mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-05 03:12:34 -06:00
добавил гигачада и заворачивание в проверку чека, если данные для QR распознались
This commit is contained in:
@@ -9,7 +9,7 @@ import numpy as np
|
||||
|
||||
# Импортируем модули
|
||||
from imgproc import preprocess_image
|
||||
from parser import parse_receipt_text, ParsedItem
|
||||
from parser import parse_receipt_text, ParsedItem, extract_fiscal_data
|
||||
from ocr import ocr_engine
|
||||
from qr_manager import detect_and_decode_qr, fetch_data_from_api
|
||||
# Импортируем новый модуль
|
||||
@@ -77,28 +77,38 @@ async def recognize_receipt(image: UploadFile = File(...)):
|
||||
else:
|
||||
logger.info("QR code not found. Proceeding to OCR.")
|
||||
|
||||
# --- ЭТАП 2: Yandex Vision Strategy (Cloud OCR) ---
|
||||
# Проверяем, настроен ли Яндекс
|
||||
# --- ЭТАП 2: OCR + Virtual QR Strategy ---
|
||||
if yandex_engine.oauth_token and yandex_engine.folder_id:
|
||||
logger.info("--- Stage 2: Yandex Vision OCR ---")
|
||||
|
||||
# Яндекс принимает сырые байты картинки (Base64), ему не нужен наш препроцессинг
|
||||
logger.info("--- Stage 2: Yandex Vision OCR + Virtual QR ---")
|
||||
yandex_text = yandex_engine.recognize(content)
|
||||
|
||||
if yandex_text and len(yandex_text) > 10:
|
||||
logger.info(f"Yandex OCR success. Text length: {len(yandex_text)}")
|
||||
logger.info(f"Yandex RAW OUTPUT:\n{yandex_text}")
|
||||
logger.info(f"OCR success. Raw text length: {len(yandex_text)}")
|
||||
|
||||
# Попытка собрать виртуальный QR из текста
|
||||
virtual_qr = extract_fiscal_data(yandex_text)
|
||||
if virtual_qr:
|
||||
logger.info(f"Virtual QR constructed: {virtual_qr}")
|
||||
api_items = fetch_data_from_api(virtual_qr)
|
||||
if api_items:
|
||||
logger.info(f"Success: Retrieved {len(api_items)} items via Virtual QR API.")
|
||||
return RecognitionResult(
|
||||
source="virtual_qr_api",
|
||||
items=api_items,
|
||||
raw_text=yandex_text
|
||||
)
|
||||
|
||||
# Если виртуальный QR не сработал, пробуем Regex
|
||||
yandex_items = parse_receipt_text(yandex_text)
|
||||
logger.info(f"Parsed items preview: {yandex_items[:3]}...")
|
||||
# Если Regex не нашел позиций (как в нашем случае со счетом)
|
||||
|
||||
# Если Regex пуст — вызываем LLM (GigaChat / YandexGPT)
|
||||
if not yandex_items:
|
||||
logger.info("Regex found nothing. Calling YandexGPT for semantic parsing...")
|
||||
logger.info("Regex found nothing. Calling LLM Manager...")
|
||||
iam_token = yandex_engine._get_iam_token()
|
||||
yandex_items = llm_parser.parse_with_llm(yandex_text, iam_token)
|
||||
logger.info(f"Semantic parsed items preview: {yandex_items[:3]}...")
|
||||
yandex_items = llm_parser.parse_with_priority(yandex_text, iam_token)
|
||||
|
||||
return RecognitionResult(
|
||||
source="yandex_vision",
|
||||
source="yandex_vision_llm",
|
||||
items=yandex_items,
|
||||
raw_text=yandex_text
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user