Team Ai
Apppublic

Explicite/api-test

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
doc_classifier.cpython-312.pyc54 linesDownload Raw Back to __pycache__
1�

2O�ii��^�ddlZddlmZmZddlZd�Zdedefd�Zdejdefd�Z3y)	�N)�Dict�Listc�.�	ddl}|S#t$rYywxYw)Nr)�pytesseract�	Exception)rs �Z/Users/alexiseduardojuarezjaimes/Desktop/api-face-extractor/app/services/doc_classifier.py�_safe_import_pytesseractr	s"�����������s��	��s�returnc��|j�}tjdd|�}tjdd|�j�}|S)u1Normaliza el texto OCR para búsqueda de patronesz[^A-Z0-9<\s]� z\s+)�upper�re�sub�strip)r4s r�_normalize_textrs?��	���	�A�5�����Q�'�A�6���v�s�A��$�$�&�A��H��np_rgbc���g}t�}|�dddgd�S	|j|dd��}t|��t
��d7krdddgd�Sd
|vxr"t
tjd|��dk\}|r|jd�gd�}t�fd�|D��}|r|jd|���gd�}t�fd�|D��}	|	r|jd|	���gd�}8t�fd�|9D��}|r|jd|���gd�}t�fd�|D��}
|
r|jd|
���gd�}t�fd�|D��}|r|jd|���|rd d!|d�S|d"k\rtd#d$d%|zz�}d&||d�S|d'k(rd&d(|d�S|	d"k\rd)�vrtd*d+d,|	zz�}d-||d�S|d"k\rtd!d.d%|zz�}d/||d�S|
d'k\rtd0d1d,|
zz�}d2||d�S|d'k\rd3d4|d�Sdd5|r|d�Sd6gd�S#t$r'}ddd	t|�j��gd�cYd}~Sd}~wwxYw)7uI10    Clasifica el tipo de documento mediante OCR y reglas heurísticas.11    12    NO bloquea el flujo - solo añade información al JSON.13    14    Tipos soportados:15      - ine_mx: INE (Credencial para votar) de México16      - passport: Pasaporte (detecta MRZ)17      - driver_license_mx: Licencia de conducir México18      - us_driver_license: Licencia de conducir USA19      - us_id_card: ID estatal USA20      - id_card_generic: Credencial genérica21      - unknown: No se pudo determinar22    23    Returns:24        Dict con: type (str), confidence (float 0-1), signals (List[str])25    N�unknowng�������?z3ocr:not_available (install pytesseract + tesseract))�type�26confidence�signalszeng+spaz--psm 6)�lang�configz27ocr:error:�28g333333�?zocr:too_little_textz<<�<�zmrz:detected (<< and many <))zINSTITUTO NACIONAL ELECTORALzCREDENCIAL PARA VOTAR�ELECTOR�SECCION�VIGENCIAzCLAVE DE ELECTOR�CURPc3�,�K�|]}|�vs�d���
y�w��N���.0�k�texts  �r�	<genexpr>z$classify_document.<locals>.<genexpr>Ys�����8�l��a�4�i�1�l���	�z	ine:hits=)�LICENCIA�CONDUCIR�	CONDUCTOR�29EXPEDICIONr!�FOLIOc3�,�K�|]}|�vs�d���
y�wr$r&r's  �rr+z$classify_document.<locals>.<genexpr>f������<��1�!�t�)�Q��r,zmx_dl:hits=)30�DRIVER LICENSEzDRIVER LICENCE�DL�CLASS�ISS�EXP�DOB�HEIGHT�EYES�SEXc3�,�K�|]}|�vs�d���
y�wr$r&r's  �rr+z$classify_document.<locals>.<genexpr>wr3r,zus_dl:hits=)zIDENTIFICATION CARDz
IDENTITY CARDzSTATE IDzID CARDc3�,�K�|]}|�vs�d���
y�wr$r&r's  �rr+z$classify_document.<locals>.<genexpr>�r3r,zus_id:hits=)�IDENTIFICACION�IDENTIFICATION�ID�31CREDENCIALc3�,�K�|]}|�vs�d���
y�wr$r&r's  �rr+z$classify_document.<locals>.<genexpr>�s�����C�"5�Q��d��q�"5�r,z
generic:hits=�passportg�������?�gffffff�?g333333�?g���Q��?�ine_mxr%g�������?r4gq=32ףp�?g�?g{�G�z�?�driver_license_mxg�(\����?�us_driver_licenseg)\���(�?g33ףp=34�?�35us_id_card�id_card_genericg�������?g�������?�no_keywords_matched)r	�image_to_stringrr�__name__r�lenr�findall�append�sum�min)rrr�raw_text�e�mrz_detected�ine_keywords�ine_hits�mx_dl_keywords�36mx_dl_hits�us_dl_keywords�37us_dl_hits�us_id_keywords�38us_id_hits�generic_id_keywords�generic_hitsrr*s                 @r�classify_documentr`s����$�G�*�,�K�����M�N�39�	40�41��.�.�v�I�i�.�X���8�$�D�42�4�y�2�~���-�.�43�	44��H�$�N��R�Z�Z��h�-G�)H�B�)N�L�����5�6��L��8�l�8�8�H������8�*�-�.��N��<��<�<�J������Z�L�1�2��N��<��<�<�J������Z�L�1�2��N��<��<�<�J������Z�L�1�2����C�"5�C�C�L������|�n�5�6�45�"�$�7�K�K��1�}���t�d�X�o�5�6�46� �47�w�O�O��1�}� ���I�I��Q��+�4�7���t�d�Z�&7�7�8�48�+�:�RY�Z�Z��Q����t�d�Z�&7�7�8�49�+�:�RY�Z�Z��Q����t�d�Z�&7�7�8�50�$�J�7�S�S��q��)��'�R�R��T��g�n�n�Wl�Vm�n�n��w�51���$�T�!�W�%5�%5�$6�7�8�52�	53��54�s�H�	I�H;�5I�;I)r�typingrr�numpy�npr	�strr�ndarrayr`r&rr�<module>rfsC��	����
�s�
�s�
�Zo�b�j�j�Zo�T�Zor