Team Ai
Apppublic

Explicite/api-test

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

2�_�i���.�ddlmZddlZddlZddlmZddlmZm	Z	ddl3Z4ddlmZddl
mZmZmZmZmZddlmZddlmZd	e	d5eddfd�Zd	e	dej2fd
�Zdej2defd�Zddejdefd�Zdedededefd�Z de	de	fd�Z!y)�)�BytesION)�Image)�
HTTPException�6UploadFile)�settings)�get_face_app�pick_best_face�to_bbox_dict�cosine_similarity�augment_rgb)�classify_document)�assess_quality�upload�7field_name�returnc��|stdd|�����|jr|jjd�stdd|�d����y)N�zFalta el archivo: ��status_code�detailzimage/�'z' debe ser una imagen.)r�content_type�8startswith)rrs  �X/Users/alexiseduardojuarezjaimes/Desktop/api-face-extractor/app/services/face_service.py�ensure_imagersS�����6H���4U�V�V����f�&9�&9�&D�&D�X�&N���a�9�|�CY�4Z�[�[�'O�c��K�|j��d{���}|s
tdd���	tjt	|��jd�}t
j|�S7�V#t$rtdd���wxYw�w)NruLa imagen está vacía.r�RGBu*No pude leer la imagen. ¿Formato válido?)	�readrr�openr�convert�np�array�	Exception)r�raw�pils   r�read_as_np_rgbr's{�������
�10�C����4M�N�N�b��j�j����&�.�.�u�5���x�x��}�����b���4`�a�a�b�s'�B	�A-�B	�AA/�,B	�/B�B	�np_rgb�bboxc��tj|�}|j\}}|d|d|d|df\}}}}td|�}td|�}t	||�}t	||�}|j||||f�S)N�top�right�bottom�leftr)r�	fromarray�size�max�min�crop)	r(r)�pil_img�width�heightr+r,r-r.s	         r�	crop_facer7 s����o�o�f�%�G��L�L�M�E�6�#�E�{�D��M�4��>�4�PV�<�W��C����11
�a��+�C�c�!�T�l�t�
���
 �F�#�e�U�*;�%��<�<��s�E�6�2�3�3rr4�qualityc��t�}|j|d|��tj|j	��jd�}|d|��fS)N�JPEG)�formatr8zutf-8zdata:image/jpeg;base64,)r�save�base64�	b64encode�getvalue�decode)r4r8�buf�b64s    r�img_to_base64_jpegrC*sO��12�)�C��L�L��V�W�L�5�13�14�15�3�<�<�>�16*�171�181�'�19:�C��)�#��/�/�/r�sim�mid�kc	��tdtdt|���}||z20|z}ddtj|�zz}t|dzd�S)z�21    sim suele estar entre ~0.0 y ~1.0 (cosine similarity).22    NO es probabilidad. Esto es un mapeo UI-friendly con curva sigmoid.23    g��?gY@�)r1r2�float�math�exp�round)rDrErF�x�ys     r�similarity_to_percent_sigmoidrP0sR��24�c�3�s�E�#�J�'�25(�C�	�s��a��A��s�T�X�X�q�b�\�!�"�A���U��A��r�image1�image2c��K�t|d�t|d�t|��d{���}t|��d{���}t|�}t�}|j	|�}|j	|�}t|�}t|�}	|�|	�
t
dd���t|�}26|	j}|j}t||27�}
t|
�\}}t||tjtjtjtj ��}t||tjtjtjtj ��}|j"}|	j"}t%||�}|g}tj&r�tj&dkDr�t)tj&dz28�D]�}t+|d|z�	�}t+|d29|z�	�}t|j	|��}t|j	|��}|�|��\t%|j"|j"�}|j-|���tj.rt1|�n0t3t5j6t5j8|���}t;|tj<tj>�}tj@}|jBr|jBsd}d} n||k\} | rd
nd}t3|�tEdt3|�z30d�tG| �t3|�tEt3|�d�|tItK|��|D�!cgc]}!tEt3|!�d���c}!|31|||jBtE|jLd�tE|jNd�tE|jPd�|jRd�|jBtE|jLd�tE|jNd�tE|jPd�|jRd�d�
S7��7��32cc}!w�w)NrQrRi�u.No se detectó rostro en una de las imágenes.r)�min_face_area_ratio�blur_var_min�brightness_min�brightness_max�i�)�seedi��low_qualityF�match�no_matchrH�rI)�ok�blur_var�brightness_mean�face_area_ratio�signals)
�	tolerance�distance�is_match�similarity_percent�raw_similarity�decision�samples_used�samples�image1_bbox�image1_face_data_uri�	document1�quality1�quality2)*rr'r
r�getr	rr33r)r7rCrrrTrUrVrW�normed_embeddingr�
multi_samples�ranger�append�use_best_of_samplesr1rJr"�medianr#rP�	score_mid�score_k�
sim_thresholdr^rM�bool�int�lenr_r`rarb)"rQrR�np1�np2�doc1�face_app�faces1�faces2�f1�f2�bbox1�34bbox2_xyxy�35bbox1_xyxy�36face1_crop�_�face1_data_uri�q1�q2�emb1�emb2�base_sim�sims�i�np1_aug�np2_aug�fa1�fa2�s�raw_simrf�	thresholdrhrerNs"                                  r�compare_two_uploadsr�:s��������"����"��v�&�37&�C��v�&�38&�C��S�!�D��~�H��\�\�#�
�F�
�\�\�#�
�F�	��	�B�	��	�B�	�z�R�Z���4d�e�e�
���E����J����J��3��&�J�*�:�6��A�~�39��Z�$�8�8��*�*��.�.��.�.�40�B�41��Z�$�8�8��*�*��.�.��.�.�42�B����D�
���D� ��t�,�H�
�:�D����(�"8�"8�1�"<��x�-�-��1�2�A�!�#�D�1�H�5�G�!�#�D�1�H�5�G� ����g�!6�7�C� ����g�!6�7�C��{�c�k��!�#�"6�"6��8L�8L�M�A��K�K��N�3�$�7�7�c�$�i�U�2�9�9�R�X�X�VZ�^�C\�=]�G�7�w��@R�@R�T\�Td�Td�e���&�&�I��E�E�b�e�e� �����i�'��&�7�J���9�%��#��g��.��2���N�#�$6�7���g���2���C��I��04�5��1�E�%��(�A�&��5�� .���%�%��b�k�k�1�-�$�R�%7�%7��;�$�R�%7�%7��;��z�z�43��%�%��b�k�k�1�-�$�R�%7�%7��;�$�R�%7�%7��;��z�z�44�-��]'��45&��j6�s3�'Q�Q�Q�Q�L4Q�1Q	�
B7Q�Q�	Q)�_)"�iorr=�numpyr"�PILr�fastapirrrK�app.core.configr�app.services.insightface_enginerr	r46rr�app.services.doc_classifierr
�app.services.face_qualityr�strr�ndarrayr'�dictr7r{rCrJrPr��rr�<module>r�s����
���-��$���:�4�\��\��\��\�b��b��47�48�b�4�b�j�j�4��4�0����0�c�0��u��5��U��u��o�j�o�*�or