/
buvanenko
/
tts-top
Обзор
Документация
Войти
/
buvanenko
/
tts-top
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/api.py
72 строки
3 KB
buvanenko
init
08 авг 2025, 07:48
08 авг 2025, 07:48
9c89ef5
Код
Авторство
О чём код?
from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse from app.config import SUPPORTED_AUDIO_FORMATS from app.audio_utils import convert_mp3_to_wav from app.speech_recognition import SpeechRecognizer from app.llm import get_response from app.database import TranscriptionCache, calculate_file_hash # Инициализация распознавателя recognizer = SpeechRecognizer() # Инициализация БД cache = TranscriptionCache() def create_api() -> FastAPI: """Создание и настройка FastAPI приложения.""" app = FastAPI( title="Speech Recognition API", description="API для распознавания речи из аудиофайлов", version="1.0.0" ) return app def setup_routes(app: FastAPI): """Настройка маршрутов API.""" @app.post("/transcribe") async def transcribe_audio(file: UploadFile = File(...)): """Распознавание речи из загруженного аудиофайла.""" # Проверка формата файла if file.content_type not in SUPPORTED_AUDIO_FORMATS: raise HTTPException( status_code=400, detail="Неверный формат аудио. Поддерживаемые форматы: WAV, MP3" ) # Чтение загруженного файла audio_bytes = await file.read() # Проверка на наличие кэша file_hash = calculate_file_hash(audio_bytes) summary = cache.get_transcription(file_hash) if summary is not None: return JSONResponse(content={"text": summary}) # Попытка открыть как WAV try: import wave import io wav_io = io.BytesIO(audio_bytes) with wave.open(wav_io, "rb") as wf: wav_bytes = audio_bytes except wave.Error: # Если не WAV — конвертируем wav_bytes = convert_mp3_to_wav(audio_bytes) # Распознавание речи text = recognizer.recognize_speech(wav_bytes) # Резюмирование summary = await get_response(text) # Кэширование cache.save_transcription(file_hash, summary) return JSONResponse(content={"text": summary}) @app.get("/health") async def health_check(): """Проверка работоспособности сервиса.""" return {"status": "healthy"}