mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
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) |