API для работы с файлами, индексация файлов и результатов распощнавания
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
# Speech Analytics FastAPI
|
||||
|
||||
Сервис для хранения аудиофайлов, индексации файлов, записи и выдачи результатов распознавания, реализованный на FastAPI.
|
||||
|
||||
## Установка зависимостей
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Запуск приложения
|
||||
|
||||
### Разработка с автоперезагрузкой
|
||||
```bash
|
||||
python run.py
|
||||
```
|
||||
|
||||
### Production режим
|
||||
```bash
|
||||
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
|
||||
```
|
||||
|
||||
## API Эндпоинты
|
||||
|
||||
Документация доступна по адресу:
|
||||
- Swagger UI: http://localhost:8000/api/v1/docs
|
||||
- ReDoc: http://localhost:8000/api/v1/redoc
|
||||
|
||||
### Аудио файлы
|
||||
|
||||
#### Загрузка аудиофайла
|
||||
```http
|
||||
POST /api/v1/upload
|
||||
Content-Type: multipart/form-data
|
||||
|
||||
file: <audio_file>
|
||||
```
|
||||
|
||||
#### Список всех аудиофайлов
|
||||
```http
|
||||
GET /api/v1/audio/list?skip=0&limit=100
|
||||
```
|
||||
|
||||
#### Получить информацию об аудиофайле
|
||||
```http
|
||||
GET /api/v1/audio/{audio_id}
|
||||
```
|
||||
|
||||
#### Скачать аудиофайл
|
||||
```http
|
||||
GET /api/v1/audio/file/{audio_id}
|
||||
```
|
||||
|
||||
#### Удалить аудиофайл
|
||||
```http
|
||||
DELETE /api/v1/audio/delete/{audio_id}
|
||||
```
|
||||
|
||||
### Распознавание
|
||||
|
||||
#### Запустить распознавание
|
||||
```http
|
||||
POST /api/v1/recognize/{audio_id}
|
||||
```
|
||||
|
||||
Возвращает:
|
||||
- 202 Accepted - распознавание запущено
|
||||
- 200 OK - уже есть активная задача
|
||||
- 404 Not Found - аудио не найдено
|
||||
|
||||
#### Получить статус распознавания
|
||||
```http
|
||||
GET /api/v1/recognize/{audio_id}
|
||||
```
|
||||
|
||||
Статусы:
|
||||
- `not_started` - распознавание не запускалось
|
||||
- `processing` - в процессе
|
||||
- `completed` - завершено
|
||||
- `error` - ошибка
|
||||
|
||||
#### Получить статус по task_id
|
||||
```http
|
||||
GET /api/v1/recognize/task/{task_id}
|
||||
```
|
||||
|
||||
#### Получить результат распознавания
|
||||
```http
|
||||
GET /api/v1/recognize/{audio_id}/result
|
||||
```
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
FileAudioAPI/
|
||||
├── main.py # Точка входа FastAPI приложения
|
||||
├── run.py # Скрипт запуска
|
||||
├── requirements.txt # Зависимости
|
||||
├── apiApp/
|
||||
│ ├── __init__.py
|
||||
│ ├── config.py # Конфигурация
|
||||
│ ├── database.py # SQLAlchemy настройка
|
||||
│ ├── schemas.py # Pydantic модели
|
||||
│ ├── crud.py # CRUD операции
|
||||
│ ├── routers/ # API routers
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── audio.py # Эндпоинты для аудио
|
||||
│ │ └── recognition.py # Эндпоинты для распознавания
|
||||
│ ├── database/ # SQLAlchemy модели
|
||||
│ │ ├── Audio.py
|
||||
│ │ ├── AiConclusion.py
|
||||
│ │ ├── Operator.py
|
||||
│ │ └── ConclusionVersion.py
|
||||
│ └── dbApi/ # Legacy совместимость
|
||||
│ └── __init__.py
|
||||
└── uploads/ # Загруженные файлы
|
||||
```
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Переменные окружения:
|
||||
- `DATABASE_URL` - URL базы данных (по умолчанию: sqlite:///./speech_analytics.db)
|
||||
|
||||
## Основные изменения от Flask версии
|
||||
|
||||
1. **FastAPI вместо Flask**: Использование современного асинхронного фреймворка
|
||||
2. **Pydantic схемы**: Валидация данных с помощью Pydantic
|
||||
3. **Асинхронная обработка**: BackgroundTasks для фоновых задач
|
||||
4. **Dependency Injection**: Внедрение зависимостей для сессий БД
|
||||
5. **Автодокументация**: Автоматическая генерация Swagger/ReDoc
|
||||
6. **Type hints**: Полная поддержка типизации
|
||||
|
||||
## Примечания
|
||||
|
||||
- Для production рекомендуется использовать PostgreSQL вместо SQLite
|
||||
- Для хранения статусов задач в production рекомендуется использовать Redis
|
||||
- Фоновые задачи обрабатываются асинхронно с помощью BackgroundTasks
|
||||
- Поддерживается загрузка файлов до 100MB
|
||||
Reference in New Issue
Block a user