139 lines
4.5 KiB
Markdown
139 lines
4.5 KiB
Markdown
# 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
|