ó
    ÛÉj¨  ã                   óª   • S r SSKrSSKrSSKJr  SSKrSSKrSSKJ	r	  \R                  " \5      rS\S\\R                     4S jrSS\S	S
S\4S jjrg)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                 óL  • SU ;   a  U R                  SS5      S   n  [        R                  " [        R                  " U 5      [        R
                  S9n[        R                  " U[        R                  5      $ ! [         a   n[        R                  SU5         SnAgSnAff = f)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      ÚXD:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\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A9 Á9
B#ÂBÂB#Ú	b64_imageÚprefixeszset[str] | Nonec                 óB  • [        U 5      nUc  SSS.$ [        R                  " X!SS9nU(       a  [        R                  " U5      OSnU(       a  USS.$ U(       aA  [        R                  " X!5      nU(       a  [        R                  " U5      OSnU(       a  USS.$ SS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¸eÑ
D€CÞ*-Œ9×!Ò! #Ô&°4€DÞØ¨Ñ-Ð-æÜ×!Ò! #Ó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      se   ðñó Û Ý ã 
Û å à	×	Ò	˜8Ó	$€ð	˜ð 	 ¨"¯*©*Ñ!5ô 	ñ*˜#ð *Ð):ð *Àdö *r)   