Files
rmser/ocr-service/main.py
2025-11-29 08:40:24 +03:00

73 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from typing import List
from fastapi import FastAPI, File, UploadFile, HTTPException
from pydantic import BaseModel
# Настройка логгера
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI(title="RMSER OCR Service")
# DTO ответа (должно совпадать с Go-структурой RecognizedItem)
class RecognizedItem(BaseModel):
raw_name: str
amount: float
price: float
sum: float
class RecognitionResult(BaseModel):
items: List[RecognizedItem]
@app.get("/health")
def health_check():
return {"status": "ok"}
@app.post("/recognize", response_model=RecognitionResult)
async def recognize_receipt(image: UploadFile = File(...)):
"""
Принимает изображение, 'распознает' его (пока заглушка)
и возвращает список позиций.
"""
logger.info(f"Received file: {image.filename}, content_type: {image.content_type}")
if not image.content_type.startswith("image/"):
raise HTTPException(status_code=400, detail="File must be an image")
# Читаем байты (имитация обработки)
content = await image.read()
logger.info(f"Read {len(content)} bytes")
# --- ЗАГЛУШКА (MOCK) ---
# Здесь в будущем будет вызов нейросети/Tesseract.
# Пока возвращаем хардкод, чтобы проверить интеграцию с Go.
mock_items = [
RecognizedItem(
raw_name="Молоко Петмол 3.2", # Это мы потом свяжем с реальным молоком
amount=5.0,
price=100.0,
sum=500.0
),
RecognizedItem(
raw_name="Хлеб Бородинский", # Этого, возможно, нет в базе (проверим обработку неизвестных)
amount=2.0,
price=45.50,
sum=91.0
),
RecognizedItem(
raw_name="НЕИЗВЕСТНЫЙ ТОВАР 123",
amount=1.0,
price=1000.0,
sum=1000.0
)
]
# -----------------------
return RecognitionResult(items=mock_items)
if __name__ == "__main__":
import uvicorn
# Запуск: python main.py
uvicorn.run(app, host="0.0.0.0", port=5000)