o
    0j<(                     @   s  d dl mZ d dlZd dlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZ ddlmZ d	d
lmZ d	dlmZ ddlmZmZ ddl m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& e
drnd dl'm(Z( g dZ)dd Z*e	dG dd deZ+G dd deZ,dS )    )OptionalN)Image   )logging)class_requires_depsis_dep_available)ARABIC_FONTCYRILLIC_FONTDEVANAGARI_FONTEL_FONTKANNADA_FONTKOREAN_FONT
LATIN_FONTSIMFANG_FONT
TAMIL_FONTTELUGU_FONTTH_FONT)FuncRegister   ImageBatchSampler	ReadImage   )RunnerPredictorTransformersPredictor   )CTCLabelDecodeOCRReisizeNormImgToBatchvalidate_text_rec_image_arrayTextRecResultzpython-bidi)get_display)zPP-OCRv5_server_reczPP-OCRv5_mobile_receslav_PP-OCRv5_mobile_reckorean_PP-OCRv5_mobile_reclatin_PP-OCRv5_mobile_reczen_PP-OCRv5_mobile_recth_PP-OCRv5_mobile_recel_PP-OCRv5_mobile_recarabic_PP-OCRv5_mobile_recte_PP-OCRv5_mobile_recta_PP-OCRv5_mobile_recdevanagari_PP-OCRv5_mobile_reccyrillic_PP-OCRv5_mobile_recc                 C   s   |  drtS | dv rtS | dv rtS | dv rtS | dkrtS | dkr%tS | dv r+tS | dkr1tS | d	v r7t	S | d
v r=t
S | dv rCtS d S )N)zPP-OCRz	en_PP-OCR)zlatin_PP-OCRv3_mobile_recr&   )zcyrillic_PP-OCRv3_mobile_recr-   r$   )zkorean_PP-OCRv3_mobile_recr%   r'   r(   zarabic_PP-OCRv3_mobile_recr)   zka_PP-OCRv3_mobile_rec)zte_PP-OCRv3_mobile_recr*   )zta_PP-OCRv3_mobile_recr+   )zdevanagari_PP-OCRv3_mobile_recr,   )
startswithr   r   r	   r   r   r   r   r   r   r   r
   )
model_name r1   t/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/models/text_recognition/predictor.pyget_text_rec_vis_fontD   s.   
r3   c                       s   e Zd Zi ZeeZddd fdd
Zdd Zdd	 Zd
d Z	dddZ
eddd Zeddd Zdd Zeddd Zeddd Zdd Z  ZS )TextRecRunnerPredictorNF)input_shapereturn_word_boxc                   s<   t  j|i | || _|| _|  | _|  \| _| _d S N)	super__init__r5   r6   get_vis_fontvis_font_buildpre_tfspost_op)selfr5   r6   argskwargs	__class__r1   r2   r9   }   s
   
zTextRecRunnerPredictor.__init__c                 C      t  S r7   r   r?   r1   r1   r2   _build_batch_sampler      z+TextRecRunnerPredictor._build_batch_samplerc                 C      t S r7   r!   rE   r1   r1   r2   _get_result_class      z(TextRecRunnerPredictor._get_result_classc           	      C   s   dt ddi}| jd d D ]2}t| d }|| jv sJ | j| }||i }|r4|| fi |n|| \}}|r@|||< qt |d< | jd	i | jd }||fS )
NReadRGBformat
PreProcesstransform_opsr   r   PostProcessr1   )r   configlistkeys	_FUNC_MAPgetr   build_postprocess)	r?   r=   cfgZtf_keyfuncr@   nameopr>   r1   r1   r2   r<      s   
 
zTextRecRunnerPredictor._buildc                 C   s  | j d |jd}t|D ]
\}}t||d qg }|D ]}||jd t|jd   qtt	|}| j d |d}| j d |d}	| j
|	d}
| jj}t|}td	d
 | jd d D }|d d \}}}|| }t||}g }td|D ]}|||  jdd \}}|d | }t||}|| q{| j|
|p| j||d\}}| jdv rdd |D }|j|j|||| jgt| dS )NrK   Zimgsindexr   r   ReisizeNormr   )xc                 s   s$    | ]}d |v r|d  d V  qdS )RecResizeImgimage_shapeNr1   ).0r[   r1   r1   r2   	<genexpr>   s    
z1TextRecRunnerPredictor.process.<locals>.<genexpr>rO   rP   r   r   g      ?)r6   wh_ratio_listmax_wh_ratior.   c                 S   s2   g | ]}t |trt|d  |d fnt|qS )r   r   )
isinstancetupler#   )rc   sr1   r1   r2   
<listcomp>   s    $z2TextRecRunnerPredictor.process.<locals>.<listcomp>Z
input_pathZ
page_indexZ	input_imgZrec_textZ	rec_scorer;   )r=   	instances	enumerater    appendshapefloatnpZargsortarrayrunnerZbatch_samplerZ
batch_sizelennextrR   minrangemaxr>   r6   r0   input_pathspage_indexesr;   )r?   
batch_datar6   batch_raw_imgsiimgZ
width_listindicesZ
batch_imgsr`   Zbatch_predsZ	batch_numZimg_numrec_image_shapeZimgCZimgHZimgWrf   Z
end_img_nore   inohwZwh_ratiotextsscoresr1   r1   r2   process   sR    



zTextRecRunnerPredictor.processZDecodeImagec                 C   s   |dksJ dt |dfS )NFrK   rM   r   )r?   Zchannel_firstZimg_moder1   r1   r2   build_readimg   s   z$TextRecRunnerPredictor.build_readimgra   c                 K   s   dt || jdfS )Nr_   )r   r5   )r   r5   )r?   rb   rA   r1   r1   r2   build_resize   s   z#TextRecRunnerPredictor.build_resizec                 K   s$   | ddkrt| ddS t )NrZ   r   character_dictcharacter_list)rV   r   	Exception)r?   rA   r1   r1   r2   rW      s
   z(TextRecRunnerPredictor.build_postprocessZMultiLabelEncodec                 O      dS N)NNr1   r?   r@   rA   r1   r1   r2   foo      zTextRecRunnerPredictor.fooZKeepKeysc                 O   r   r   r1   r   r1   r1   r2   r      r   c                 C   s
   t | jS r7   )r3   r0   rE   r1   r1   r2   r:      s   
z#TextRecRunnerPredictor.get_vis_font)F)__name__
__module____qualname__rU   r   registerr9   rF   rI   r<   r   r   r   rW   r   r:   __classcell__r1   r1   rB   r2   r4   w   s$    
2



r4   c                       sp   e Zd ZdZdddef fddZdd Zd	d
 Zdd Zdd Z	dd Z
ddee fddZdd Z  ZS )TextRecTransformersPredictorz?Text recognition predictor backed by Hugging Face transformers.F)r6   r6   c                   sN   t  j|i | || _t| j| _tdd| _|  \| _	| _
|  | _d S )NrL   rM   )r8   r9   r6   r3   r0   r;   r   read_opr<   image_processorZinfer_build_postprocessr>   )r?   r6   r@   rA   rB   r1   r2   r9      s   z%TextRecTransformersPredictor.__init__c                 C   rD   r7   r   rE   r1   r1   r2   rF      rG   z1TextRecTransformersPredictor._build_batch_samplerc                 C   rH   r7   r!   rE   r1   r1   r2   rI      rJ   z.TextRecTransformersPredictor._get_result_classc                 C   s,   ddl m}m} | |}| |}||fS )Nr   )AutoImageProcessorAutoModelForTextRecognition)Ztransformersr   r   Z_load_pretrained_processorZ_load_pretrained_model)r?   r   r   r   modelr1   r1   r2   r<      s   

z#TextRecTransformersPredictor._buildc                 C   sb   t | jdd }|s| jdi d}|s tt| jj d|d dkr,|dd  }t|dS )	Nr   rQ   r   zR does not provide the character dictionary required for text recognition decoding.r   blankr   r   )getattrr   Zmodel_configrV   RuntimeErrortyper   r   )r?   r   r1   r1   r2   r     s   
z/TextRecTransformersPredictor._build_postprocessc                 C   s^   t | jdi pi }t | jdi p|}t|d|dd}t|d|dd}d||fS )Nsizepad_sizeheight0   widthi@  r   )r   r   intrV   )r?   r   r   Zimg_hZimg_wr1   r1   r2   _get_rec_image_shape  s
   
z1TextRecTransformersPredictor._get_rec_image_shapeNc                 C   s   |rt d | j|jd}t|D ]
\}}t||d qdd |D }| j|d}| |}| |\}	}
|j	|j
||	|
| jgt| dS )Nz5transformers engine doesn't support `return_word_box`r\   r]   c                 S   s   g | ]}t |qS r1   )r   Z	fromarray)rc   r~   r1   r1   r2   rj     s    z8TextRecTransformersPredictor.process.<locals>.<listcomp>)imagesrk   )r   warningr   rl   rm   r    Zpreprocess_imagesforwardpostprocessry   rz   r;   rt   )r?   r{   r6   r|   r}   r~   r   Zmodel_inputsoutputsr   r   r1   r1   r2   r     s    

z$TextRecTransformersPredictor.processc                 K   s0   | j |}dd |D }dd |D }||fS )Nc                 S      g | ]}|d  qS )textr1   rc   rr1   r1   r2   rj   0      z<TextRecTransformersPredictor.postprocess.<locals>.<listcomp>c                 S   r   )Zscorer1   r   r1   r1   r2   rj   1  r   )r   Zpost_process_text_recognition)r?   r   rA   resultsr   r   r1   r1   r2   r   .  s   z(TextRecTransformersPredictor.postprocessr7   )r   r   r   __doc__boolr9   rF   rI   r<   r   r   r   r   r   r   r1   r1   rB   r2   r      s    r   )-typingr   numpyrq   ZPILr   utilsr   Z
utils.depsr   r   Zutils.fontsr   r	   r
   r   r   r   r   r   r   r   r   Zutils.func_registerr   Zcommon.batch_samplerr   Zcommon.readerr   Z
predictorsr   r   Z
processorsr   r   r   r    resultr"   Zbidi.algorithmr#   ZTEXT_REC_TRANSFORMERS_MODELSr3   r4   r   r1   r1   r1   r2   <module>   s&   43r