start rmser

This commit is contained in:
2025-11-29 08:40:24 +03:00
commit 5aa2238eea
2117 changed files with 375169 additions and 0 deletions

73
ocr-service/main.py Normal file
View File

@@ -0,0 +1,73 @@
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)