
    wi                        d dl Z d dlZd dlmZ d dlmZmZ d dlZd dlZ	d dl
mZmZ ddlmZmZ ddlmZ ddlmZ d	d
lmZmZ d	dlmZ  ee          j        j        dz  dz  ZdZ ee          j        j        dz  Z G d d          ZdS )    N)Path)AnyDict)FileInfo
get_engine   )DownloadFileDownloadFileInput)logger)VisRes   )TextRecInputTextRecOutput)CTCLabelDecodemodelszppocr_keys_v1.txtz|https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txtc                   h    e Zd Zdeeef         fdZd Zdede	fdZ
dej        dedej        fd	Zd
S )TextRecognizercfgc                      t          |j                  |          | _        |                     |          \  }}t	          ||          | _        |d         | _        |d         | _        || _        d S )N)	charactercharacter_pathrec_batch_numrec_img_shape)	r   engine_typesessionget_character_dictr   postprocess_opr   rec_image_shaper   )selfr   r   character_dict_paths       r/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/ch_ppocr_rec/main.py__init__zTextRecognizer.__init__$   s|    2z#/22377 *.)@)@)E)E&	&,0C
 
 
 !1"?3    c           	      ^   d }|                     dd           }| j                                        r| j                                        }||fS |s|r!t	          |                                          s| j                            t          |j        |j	        |j
        |j        |j                            }||nt          }t          t	          |          j        z  }t	          |                                          s*t!          j        t%          |d |t&                               ||fS )Nrec_keys_path)r   ocr_version	task_type	lang_type
model_type)file_urlsha256	save_pathr   )getr   have_keyget_character_listr   existsget_dict_key_urlr   r   r&   r'   r(   r)   DEFAULT_DICT_URLDEFAULT_MODEL_PATHnamer	   runr
   r   )r   r   r   	dict_pathdict_download_urls        r!   r   z!TextRecognizer.get_character_dict3   sC   	GGOT22	<  "" 	(7799Ii''  	) 	T)__5K5K5M5M 	 $ = = # #!m!m"~  ! ! &7%B!!HX  +T2C-D-D-III	??))++  %!2#"+%	     )##r#   argsreturnc                 t   t          j                    }t          |j        t          j                  r|j        gn|j        }|j        }d |D             }t	          j        t	          j        |                    }t          |          }dg|z  }| j
        }	d}
t          d||	          D ]}t          |||	z             }| j        d d         \  }}}||z  }g }t          ||          D ]M}|||                  j        dd         \  }}|dz  |z  }t          ||          }|                    |           Ng }t          ||          D ]M}|                     |||                  |          }|                    |t          j        d d f                    Nt	          j        |                              t          j                  }|                     |          }|                     ||||          \  }}t1          |          D ].\  }}|r|||         f||||z            <   |d f||||z            <   /t3          t5          |           \  }}t3          t5          |           \  }} t          j                    |z
  }
t7          ||| ||
t9          | j        j        | j        j                  	          S )
Nc                 ^    g | ]*}|j         d          t          |j         d                   z  +S )r   r   )shapefloat).0imgs     r!   
<listcomp>z+TextRecognizer.__call__.<locals>.<listcomp>[   s1    MMMScilU39Q<%8%88MMMr#   ) g        r      r   g      ?)wh_ratio_listmax_wh_ratio)r(   	font_path)viser) timeperf_counter
isinstancer?   npndarrayreturn_word_boxargsortarraylenr   rangeminr   r<   maxappendresize_norm_imgnewaxisconcatenateastypefloat32r   r   	enumeratelistzipr   r   r   r(   rE   )!r   r8   
start_timeimg_listrL   
width_listindicesimg_numrec_res	batch_numelapse
beg_img_no
end_img_noimgCimgHimgWrD   rC   inohwwh_rationorm_img_batchnorm_imgpredsline_resultsword_resultsrnoone_resall_line_resultsall_word_resultstxtsscoress!                                    r!   __call__zTextRecognizer.__call__U   s   &((
!+DHbj!A!AODH::tx.MMHMMM
 *RXj1122h--+'&	7I66  	E  	EJWj9&<==J  $3BQB7D$$;LMZ44 / /-3AaC81s7Q;"<::$$X....NZ44 ? ?//0FUU%%hrz111}&=>>>>^N;;BB2:NNNLL00E)-)<)<+)	 *= * *&L, !*, 7 7 E EW" :A<PSCT9UGGJ$4566=t_
S 0122E .2#w--@-@**C!1233f"$$z148#5ASTTT
 
 
 	
r#   r?   rD   c                 0   | j         \  }}}||j        d         k    sJ t          ||z            }|j        d d         \  }}|t          |          z  }t	          j        ||z            |k    r|}	n$t          t	          j        ||z                      }	t          j        ||	|f          }
|
                    d          }
|
	                    d          dz  }
|
dz  }
|
dz  }
t          j        |||ft          j                  }|
|d d d d d|	f<   |S )Nr   rX   )r   r   r      g      ?)dtyper   )r   r<   intr=   mathceilcv2resizerW   	transposerJ   zerosrX   )r   r?   rD   img_channel
img_height	img_widthrj   rk   ratio	resized_wresized_image
padding_ims               r!   rT   zTextRecognizer.resize_norm_img   s.   -1-A*Zcil****
\122	y!}1E!HH9Z%'((944!IIDIj5&899::I
3J(?@@%,,Y77%//	::S@X{J	B"*UUU
(5
111aaa9$%r#   N)__name__
__module____qualname__r   strr   r"   r   r   r   rx   rJ   rK   r=   rT    r#   r!   r   r   #   s        DcN     $  $  $D=
\ =
m =
 =
 =
 =
~2: U rz      r#   r   )r}   rG   pathlibr   typingr   r   r   numpyrJ   rapidocr.inference_engine.baser   r   utils.download_filer	   r
   	utils.logr   utils.vis_resr   typingsr   r   utilsr   __file__parentDEFAULT_DICT_PATHr2   r3   r   r   r#   r!   <module>r      sS                   



     ? ? ? ? ? ? ? ? A A A A A A A A       " " " " " " 0 0 0 0 0 0 0 0 ! ! ! ! ! !DNN)08;>QQ  R T(^^*1H< F F F F F F F F F Fr#   