feat: Init
This commit is contained in:
+53
@@ -0,0 +1,53 @@
|
||||
import io
|
||||
import os
|
||||
from fastapi import FastAPI, UploadFile, File, HTTPException
|
||||
from fastapi.responses import JSONResponse
|
||||
from PIL import Image
|
||||
|
||||
# Импортируем твои существующие загрузчики (они теперь работают только на бэкенде)
|
||||
from data_loader import load_music_engine, load_image_processor
|
||||
|
||||
app = FastAPI(title="EmoM Inference API", version="1.0.0")
|
||||
|
||||
# Глобальный кэш для удержания моделей в памяти
|
||||
ml_context = {
|
||||
"image_processor": None,
|
||||
"music_matcher": None
|
||||
}
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup_event():
|
||||
print("Инициализация нейросетевого ядра EmoM...")
|
||||
ml_context["image_processor"] = load_image_processor()
|
||||
ml_context["music_matcher"] = load_music_engine()
|
||||
|
||||
if not ml_context["image_processor"] or not ml_context["music_matcher"]:
|
||||
raise RuntimeError("Отказ системы: Артефакты моделей не найдены.")
|
||||
print("Вычислительный конвейер готов к работе.")
|
||||
|
||||
@app.post("/analyze")
|
||||
async def analyze_image_endpoint(file: UploadFile = File(...)):
|
||||
"""
|
||||
Принимает изображение, прогоняет через ResNet и возвращает треки из DEAM.
|
||||
"""
|
||||
try:
|
||||
# 1. Чтение бинарных данных из запроса
|
||||
image_bytes = await file.read()
|
||||
image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
|
||||
|
||||
# 2. Инференс (ВНИМАНИЕ: здесь используй реальные названия методов из своих классов!)
|
||||
# Предположим, твой процессор выдает координаты V/A
|
||||
v_a_coords = ml_context["image_processor"].extract_va(image)
|
||||
|
||||
# 3. Поиск треков в базе
|
||||
matched_tracks = ml_context["music_matcher"].find_tracks(v_a_coords)
|
||||
|
||||
# 4. Формирование ответа
|
||||
return JSONResponse(content={
|
||||
"status": "success",
|
||||
"valence_arousal": v_a_coords,
|
||||
"tracks": matched_tracks
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Ошибка инференса: {str(e)}")
|
||||
Reference in New Issue
Block a user