STABLE: Final schema sync, optimized gitignore

This commit is contained in:
Kincses
2026-02-26 08:19:25 +01:00
parent 893f39fa15
commit 505543330a
203 changed files with 11590 additions and 9542 deletions

View File

@@ -1,62 +1,38 @@
# /opt/docker/dev/service_finder/backend/app/services/image_processor.py
import cv2
import numpy as np
from typing import Optional
class DocumentImageProcessor:
"""
Saját fejlesztésű képtisztító pipeline OCR-hez.
A nyers (mobillal fotózott) képekből kontrasztos, fekete-fehér, zajmentes változatot készít,
amelyet az AI már közel 100%-os pontossággal tud olvasni.
"""
""" Saját képtisztító pipeline Robot 3 OCR számára. """
@staticmethod
def process_for_ocr(image_bytes: bytes) -> Optional[bytes]:
if not image_bytes: return None
try:
# 1. Kép betöltése a memóriából (FastAPI UploadFile bytes-ból)
# A képet nem mentjük a lemezre, villámgyorsan a RAM-ban dolgozzuk fel.
nparr = np.frombuffer(image_bytes, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
if img is None: return None
if img is None:
raise ValueError("A képet nem sikerült dekódolni.")
# 2. Szürkeárnyalatossá alakítás (A színek csak zavarják a szövegfelismerést)
# 1. Előkészítés (Szürkeárnyalat + Felskálázás)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 3. Kép átméretezése (Felskálázás)
# Az AI és az OCR motorok a minimum 300 DPI körüli képeket szeretik.
height, width = gray.shape
if width < 1000 or height < 1000:
if gray.shape[1] < 1200:
gray = cv2.resize(gray, None, fx=2.0, fy=2.0, interpolation=cv2.INTER_CUBIC)
# 4. Kontraszt növelése (CLAHE - Contrast Limited Adaptive Histogram Equalization)
# Ez eltünteti a vaku okozta becsillanásokat és kiemeli a halvány betűket.
# 2. Kontraszt dúsítás (CLAHE)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
contrast = clahe.apply(gray)
# 5. Enyhe homályosítás (Denoising / Noise Reduction)
# Eltünteti a papír textúráját (pl. a forgalmi engedély vízjelét vagy a blokk gyűrődéseit).
blur = cv2.GaussianBlur(contrast, (5, 5), 0)
# 6. Adaptív Küszöbérték (Binarization)
# Minden pixel környezetét külön vizsgálja. Ez küszöböli ki azt, amikor a fotó egyik
# sarka sötét (pl. árnyékot vet a telefon), a másik meg világos.
# 3. Adaptív Binarizálás (Fekete-fehér szöveg kiemelés)
blur = cv2.GaussianBlur(contrast, (3, 3), 0)
thresh = cv2.adaptiveThreshold(
blur,
255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,
11, # Blokk méret (páratlan szám)
2 # Konstans levonás
blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2
)
# 7. Visszakódolás bájt formátumba (PNG), hogy átadhassuk az AI-nak
success, encoded_image = cv2.imencode('.png', thresh)
if not success:
raise ValueError("Nem sikerült a feldolgozott képet PNG-be kódolni.")
return encoded_image.tobytes()
return encoded_image.tobytes() if success else None
except Exception as e:
print(f"Hiba a képfeldolgozás során: {str(e)}")
print(f"OpenCV Feldolgozási hiba: {e}")
return None