Ë
    yÌj¨  ã                   ó¤   — d Z ddlZddlZddlmZ ddlZddlZddlm	Z	  ej                  e«      Zdedeej                     fd„Zdded	d
defd„Zy)u�  
scan_service.py â€” detecciÃ³n de QR en un fotograma de cÃ¡mara (base64), en servidor.

Mismo comportamiento que `/api/scan/frame` de hec-photo-app: el navegador intenta primero con jsQR
(gratis, en local) y, si no acierta tras unos fotogramas, manda el fotograma aquÃ­, donde se aplica la
cascada completa de OpenCV (`qr_detect`) y, si no hay QR legible, el OCR del cÃ³digo impreso.
é    N)ÚOptional)Ú	qr_detectÚb64_dataÚreturnc                 óF  — d| v r| j                  dd«      d   } 	 t        j                  t        j                  | «      t        j
                  ¬«      }t        j                  |t        j                  «      S # t        $ r }t        j                  d|«       Y d}~yd}~ww xY w)uV   Data-URL (o base64 a secas) â†’ imagen BGR de OpenCV. None si no se puede decodificar.ú,é   )Údtypezb64 decode error: %sN)ÚsplitÚnpÚ
frombufferÚbase64Ú	b64decodeÚuint8Úcv2ÚimdecodeÚIMREAD_COLORÚ	ExceptionÚloggerÚdebug)r   ÚarrÚexcs      ú0/var/www/photos/backend/services/scan_service.pyÚ
b64_to_cv2r      s{   € à
ˆh�Ø—>‘> # qÓ)¨!Ñ,ˆðÜ�m‰mœF×,Ñ,¨XÓ6¼b¿h¹hÔGˆÜ�|‰|˜C¤×!1Ñ!1Ó2Ð2øÜò Ü�‰Ð+¨SÔ1Üûðús   ›AA7 Á7	B Â BÂB Ú	b64_imageÚprefixeszset[str] | Nonec                 ó  — t        | «      }|€dddœS t        j                  ||d¬«      }|rt        j                  |«      nd}|r|ddœS |r6t        j                  ||«      }|rt        j                  |«      nd}|r|ddœS dddœS )uX   {"code": str|None, "method": "qr"|"text"|None}. `code` ya normalizado (URL â†’ cÃ³digo).N)ÚcodeÚmethodF)r   Úuse_ocrÚqrÚtext)r   r   Ú	detect_qrÚextract_codeÚocr_code)r   r   ÚimgÚrawr   r"   s         r   Ú
scan_framer(       s”   € ä
�YÓ
€CØ
€{Ø¨Ñ-Ð-ä
×
Ñ
˜c¨H¸eÔ
D€CÙ*-Œ9×!Ñ! #Ô&°4€DÙØ¨Ñ-Ð-áÜ×!Ñ! # xÓ0ˆÙ/3Œy×%Ñ% dÔ+¸ˆÙØ ¨FÑ3Ð3Ø DÑ)Ð)ó    )N)Ú__doc__r   ÚloggingÚtypingr   r   Únumpyr   Úservicesr   Ú	getLoggerÚ__name__r   ÚstrÚndarrayr   Údictr(   © r)   r   ú<module>r5      sg   ðñó Û Ý ã 
Û å à	ˆ×	Ñ	˜8Ó	$€ð	˜ð 	 ¨"¯*©*Ñ!5ó 	ñ*˜#ð *Ð):ð *Àdô *r)   