76 lines
6.2 KiB
Markdown
76 lines
6.2 KiB
Markdown
# Структура проекта Whisper API Service
|
|
|
|
Проект представляет собой локальный API-сервис для распознавания речи, построенный на основе модели Whisper. Сервис разработан как OpenAI-совместимый API, что позволяет использовать его в качестве локальной альтернативы облачным сервисам распознавания речи.
|
|
|
|
## Основные файлы
|
|
|
|
### Корневые файлы
|
|
- **server.py** - точка входа в приложение, инициализирует и запускает сервис
|
|
- **server.sh** - bash-скрипт для запуска сервера с опциональным обновлением conda-окружения
|
|
- **config.json** - конфигурационный файл с настройками сервиса
|
|
- **requirements.txt** - зависимости проекта для conda/pip
|
|
|
|
### Модуль `app`
|
|
|
|
#### app/\_\_init\_\_.py
|
|
Содержит основной класс `WhisperServiceAPI`, который инициализирует приложение, загружает конфигурацию и запускает сервер на указанном порту.
|
|
|
|
#### app/logger.py
|
|
Настройка логирования для всех компонентов приложения.
|
|
|
|
#### app/transcriber.py
|
|
Содержит класс `WhisperTranscriber`, который загружает модель Whisper и выполняет распознавание речи. Класс определяет оптимальное устройство для вычислений (CPU, CUDA, MPS) и поддерживает ускорение с помощью Flash Attention 2.
|
|
|
|
#### app/audio_processor.py
|
|
Содержит класс `AudioProcessor` для предобработки аудиофайлов перед их транскрибацией. Включает методы для:
|
|
- Конвертации в WAV с частотой 16 кГц
|
|
- Нормализации уровня громкости
|
|
- Добавления тишины в начало записи
|
|
- Очистки временных файлов
|
|
|
|
#### app/audio_sources.py
|
|
Содержит абстрактный класс `AudioSource` и его конкретные реализации для различных источников аудио:
|
|
- `UploadedFileSource` - для файлов, загруженных через HTTP-запрос
|
|
- `URLSource` - для файлов, доступных по URL
|
|
- `Base64Source` - для аудио, закодированного в base64
|
|
- `LocalFileSource` - для локальных файлов на сервере
|
|
- `FakeFile` - вспомогательный класс для унификации обработки из разных источников
|
|
|
|
#### app/routes.py
|
|
Содержит классы:
|
|
- `TranscriptionService` - сервис для обработки и транскрибации аудиофайлов
|
|
- `Routes` - регистрирует все эндпоинты API, включая OpenAI-совместимые маршруты
|
|
|
|
## Основные классы и их описание
|
|
|
|
### WhisperServiceAPI
|
|
Основной класс приложения, инициализирует сервис, загружает конфигурацию и запускает сервер с использованием Waitress.
|
|
|
|
### WhisperTranscriber
|
|
Класс для распознавания речи с использованием модели Whisper. Определяет оптимальное устройство для вычислений, загружает модель с учетом доступного оборудования и выполняет транскрибацию аудиофайлов.
|
|
|
|
### AudioProcessor
|
|
Класс для предобработки аудиофайлов. Выполняет конвертацию, нормализацию и добавление тишины в начало записи для улучшения качества распознавания.
|
|
|
|
### AudioSource (и наследники)
|
|
Абстрактный класс и его реализации для работы с различными источниками аудиофайлов. Обеспечивает унифицированный интерфейс для получения аудиофайлов из разных источников.
|
|
|
|
### TranscriptionService
|
|
Сервис, объединяющий логику обработки запросов и транскрибации аудио. Принимает источник аудио, обрабатывает его и возвращает результат транскрибации.
|
|
|
|
### Routes
|
|
Класс, регистрирующий все маршруты API сервиса, включая совместимые с OpenAI эндпоинты для интеграции с существующими клиентами.
|
|
|
|
## API Endpoints
|
|
|
|
Сервис предоставляет несколько эндпоинтов, включая:
|
|
- `/health` - проверка статуса сервиса
|
|
- `/config` - получение текущей конфигурации
|
|
- `/local/transcriptions` - транскрибация локального файла на сервере
|
|
- `/v1/models` - получение списка доступных моделей (OpenAI-совместимый)
|
|
- `/v1/audio/transcriptions` - транскрибация загруженного файла (OpenAI-совместимый)
|
|
- `/v1/audio/transcriptions/url` - транскрибация по URL
|
|
- `/v1/audio/transcriptions/base64` - транскрибация из base64
|
|
- `/v1/audio/transcriptions/multipart` - транскрибация файла из multipart-формы
|
|
|
|
Сервис разработан таким образом, чтобы обеспечить максимальную гибкость в использовании и интеграцию с существующими системами, поддерживающими API OpenAI Whisper. |