ó
    ñZjž/  ã                   óŠ   • S SK r S SKrS SKJr  S SKJrJr  S SKrS SKr	SSK
JrJrJr  SSKJr   " S S\5      r " S	 S
5      rg)é    N)ÚEnum)ÚListÚTupleé   )ÚTextRecOutputÚWordInfoÚWordType)Úquads_to_rect_bboxc                   ó   • \ rS rSrSrSrSrg)Ú	Directioné   Úhorizontal_directÚvertical_direct© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú
HORIZONTALÚVERTICALÚ__static_attributes__r   ó    ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/rapidocr/cal_rec_boxes/main.pyr   r      s   † Ø$€JØ ƒHr   r   c                   ó¾  • \ rS rSrSr S'S\\R                     S\R                  S\S\	S\4
S jjr
\S	\R                  S\4S
 j5       r S'S\S\R                  S\S\	S\\\   \\\\         \\   4   4
S jjrS\\\      S\S\S\\\\\4   S\\\\         4
S jr\S\\   S\S\S\\\\\4   S\\\\         4
S j5       r\S\\   S\S\4S j5       r\S\\   S\S\S\S\4
S j5       r\S\\\\         S\\\\         4S j5       rS\R                  S\\\\         S \S\\\\         4S! jr\S" 5       r\S#\\\      S\\\      4S$ j5       rS%rg&)(ÚCalRecBoxesé   u   è®¡ç®—è¯†åˆ«æ–‡å­—çš„æ±‰å­—å�•å­—å’Œè‹±æ–‡å�•è¯�çš„å��æ ‡æ¡†ã€‚
ä»£ç �å€Ÿé‰´è‡ªPaddlePaddle/PaddleOCRå’Œfanqie03/char-detectionÚimgsÚdt_boxesÚrec_resÚreturn_single_char_boxÚreturnc           
      óŒ  • / n[        [        X5      5       GH  u  nu  pxUR                  b  UR                  S:X  d  UR                  c  M5  UR
                  S S u  pš[        R                  " SS/U
S/X©/SU	//5      nU R                  UR                  U   UUR                  U   U5      u  pÍnU R                  [        R                  " U5      5      nU R                  U5      nU R                  [        R                  " U5      Xß5      nUR                  [        [        XÎU5      5      5        GM     [!        U5      Ul        U$ )Nr   r   )Ú	enumerateÚzipÚtxtsÚsizeÚword_resultsÚshapeÚnpÚarrayÚcal_ocr_word_boxÚadjust_box_overlapÚcopyÚdeepcopyÚget_box_directionÚreverse_rotate_crop_imageÚappendÚlistÚtuple)Úselfr   r   r   r    r'   ÚidxÚimgÚboxÚhÚwÚimg_boxÚword_box_content_listÚword_box_listÚ	conf_listÚ	directions                   r   Ú__call__ÚCalRecBoxes.__call__   s.  € ð ˆÜ(¬¨TÓ)<×=‰OˆC‘�#Ø�|‰|Ñ# s§x¡x°1£}¸×8LÑ8LÑ8TÙà—9‘9˜R˜a�=‰DˆAÜ—h’h  A ¨¨A¨°°¸¸A¸Ð?Ó@ˆGØ>B×>SÑ>SØ—‘˜SÑ!ØØ×$Ñ$ SÑ)Ø&ó	?Ñ;Ð!°)ð !×3Ñ3´D·M²MÀ-Ó4PÓQˆMØ×.Ñ.¨sÓ3ˆIØ ×:Ñ:Ü—’˜cÓ" MóˆMð ×ÑÜ”SÐ.¸=ÓIÓJ÷ñ#  >ô*  % \Ó2ˆÔØˆr   r7   c           
      ób  • [        [        R                  R                  U S   U S   -
  5      5      [        [        R                  R                  U S   U S   -
  5      5      [        [        R                  R                  U S   U S   -
  5      5      [        [        R                  R                  U S   U S   -
  5      5      /n[	        US   US   5      n[	        US   US   5      nUS:  a  [
        R                  $ [        X2-  S5      nUS:¼  a  [
        R                  $ [
        R                  $ )Nr   é   r   é   g�íµ ÷Æ°>g      ø?)	Úfloatr)   ÚlinalgÚnormÚmaxr   r   Úroundr   )r7   Úedge_lengthsÚwidthÚheightÚaspect_ratios        r   r/   ÚCalRecBoxes.get_box_direction9   sø   € ô ”"—)‘)—.‘.  Q¡¨#¨a©&¡Ó1Ó2Ü”"—)‘)—.‘.  Q¡¨#¨a©&¡Ó1Ó2Ü”"—)‘)—.‘.  Q¡¨#¨a©&¡Ó1Ó2Ü”"—)‘)—.‘.  Q¡¨#¨a©&¡Ó1Ó2ð	
ˆô �L ‘O \°!¡_Ó5ˆÜ�\ !‘_ l°1¡oÓ6ˆà�4‹<Ü×%Ñ%Ð%ä˜V™^¨QÓ/ˆØ%1°SÓ%8Œy×!Ñ!ÐR¼i×>RÑ>RÐRr   Úrec_txtÚbboxÚ	word_infoc                 ó
  • U(       a  UR                   S:X  a  / / / 4$ [        US   5      nUS   US   -
  UR                   -  n[        S UR                   5       5      n/ / / p©n[	        UR
                  UR                  5       Hš  u  p¼U(       a9  U(       d2  UR                  U5        U
R                  SR                  U5      5        O"UR                  U5        U
R                  U5        [        U5      S:X  a  Mx  U R                  XÆ5      nU	R                  U5        Mœ     U R                  X•S   US   [        U5      5      nU(       a  U(       d  U R                  XŽXe5      nOU R                  XŽXe5      nX¯UR                  4$ )uÝ   Calculate the detection frame for each word based on the results of recognition and detection of ocr
æ±‰å­—å��æ ‡æ˜¯å�•å­—çš„
è‹±è¯­å��æ ‡æ˜¯å�•è¯�çº§åˆ«çš„
ä¸‰ç§�æƒ…å†µï¼š
1. å…¨æ˜¯æ±‰å­—
2. å…¨æ˜¯è‹±æ–‡
3. ä¸­è‹±æ··å�ˆ
r   )N.r   c              3   óD   #   • U  H  o[         R                  L v •  M     g 7f©N)r	   ÚEN_NUM)Ú.0Úvs     r   Ú	<genexpr>Ú/CalRecBoxes.cal_ocr_word_box.<locals>.<genexpr>a   s   é € ÐOÒ:N°Q¤§¡Õ0Ò:Nùs   ‚ Ú rB   )Úline_txt_lenr
   ÚallÚ
word_typesr$   ÚwordsÚ	word_colsr1   ÚjoinÚextendÚlenÚcalc_avg_char_widthÚcalc_all_char_avg_widthÚcalc_en_num_boxÚcalc_boxÚconfs)r4   rN   rO   rP   r    Úbbox_pointsÚavg_col_widthÚis_all_en_numÚ	line_colsÚchar_widthsÚword_contentsÚwordÚword_colÚ	avg_widthÚavg_char_widthÚ
word_boxess                   r   r+   ÚCalRecBoxes.cal_ocr_word_boxL   se  € ö ˜)×0Ñ0°AÓ5Ø�r˜2�:Ðä(¨¨i©Ó9ˆØ$ Q™¨+°a©.Ñ8¸I×<RÑ<RÑRˆäÑO¸)×:NÒ:NÓOÓOˆà02°B¸ ˆ	Ü! )§/¡/°9×3FÑ3FÖG‰NˆDÞÖ%;Ø× Ñ  Ô*Ø×$Ñ$ R§W¡W¨T£]Õ3à× Ñ  Ô*Ø×$Ñ$ TÔ*ä�8‹} Ó!Ùà×0Ñ0°ÓIˆIØ×Ñ˜yÖ)ñ Hð ×5Ñ5Ø Q™¨°Q©¼¸W»ó
ˆö Ö!7Ø×-Ñ-Ø¨=ó‰Jð Ÿ™Ø¨=óˆJð ¨)¯/©/Ð9Ð9r   rj   rp   rh   rg   c                 ó¶   • / nU HP  nU R                  XbX45      n[        [        R                  " U5      5      u  p‰p«UR	                  X‰/X©/X«/X‹//5        MR     U$ rS   )re   r
   r)   r*   r1   )r4   rj   rp   rh   rg   ÚresultsÚone_colÚcur_word_cellÚx0Úy0Úx1Úy1s               r   rd   ÚCalRecBoxes.calc_en_num_box€   sc   € ð ˆÛ ˆGØ ŸM™MØ¨óˆMô 0´·²¸Ó0GÓH‰NˆB�BØ�N‰N˜R˜H r h°°¸2¸(ÐCÖDñ !ð ˆr   c                 óö   • Uu  pEpg/ nU  Hb  n	U	S-   U-  n
[        [        X¡S-  -
  5      S5      U-   n[        [        X¡S-  -   5      Xd-
  5      U-   nXµ/XÅ/XÇ/X·//nUR                  U5        Md     [	        US S9$ )Ng      à?r   r   c                 ó   • U S   S   $ )Nr   r   )Úxs    r   Ú<lambda>Ú&CalRecBoxes.calc_box.<locals>.<lambda>¨   s   € ¨Q¨q©T°!ªWr   )Úkey)rG   ÚintÚminr1   Úsorted)rj   rp   rh   rg   rw   rx   ry   rz   rt   Úcol_idxÚcenter_xÚchar_x0Úchar_x1Úcells                 r   re   ÚCalRecBoxes.calc_box�   s£   € ð %‰ˆ�àˆÛ ˆGà #™¨Ñ6ˆHô œ#˜h¸!Ñ);Ñ;Ó<¸aÓ@À2ÑEˆGÜœ#˜h¸!Ñ);Ñ;Ó<¸b¹gÓFÈÑKˆGà�Ø�Ø�Ø�ð	ˆDð �N‰N˜4Ö ñ !ô �gÑ#4Ñ5Ð5r   rn   Úeach_col_widthc                 ó@   • U S   U S   -
  U-  nU[        U 5      S-
  -  $ )Néÿÿÿÿr   rB   )ra   )rn   r‹   Úchar_total_lengths      r   rb   ÚCalRecBoxes.calc_avg_char_widthª   s.   € à% b™\¨H°Q©KÑ7¸>ÑIÐØ ¤C¨£M°AÑ$5Ñ6Ð6r   Ú
width_listÚbbox_x0Úbbox_x1Útxt_lenc                 ój   • US:X  a  g[        U 5      S:”  a  [        U 5      [        U 5      -  $ X!-
  U-  $ )Nr   g        )ra   Úsum)r�   r‘   r’   r“   s       r   rc   Ú#CalRecBoxes.calc_all_char_avg_width¯   s;   € ð �a‹<Øäˆz‹?˜QÓÜ�z“?¤S¨£_Ñ4Ð4àÑ! WÑ,Ð,r   r<   c                 óR  • [        [        U 5      S-
  5       H‹  nX   XS-      p2US   S   US   S   :”  d  M!  [        US   S   US   S   -
  5      nUS   S==   US-  -  ss'   US   S==   US-  -  ss'   US   S==   XDS-  -
  -  ss'   US   S==   XDS-  -
  -  ss'   M�     U $ )NrB   r   r   rC   )Úrangera   Úabs)r<   ÚiÚcurÚnxtÚdistances        r   r,   ÚCalRecBoxes.adjust_box_overlap»   sË   € ô
 ”s˜=Ó)¨AÑ-Ö.ˆAØ$Ñ'¨¸1±uÑ)=�Ø�1‰v�a‰y˜3˜q™6 !™9Õ$Ü˜s 1™v a™y¨3¨q©6°!©9Ñ4Ó5�Ø�A‘�q“	˜X¨™\Ñ)“	Ø�A‘�q“	˜X¨™\Ñ)“	Ø�A‘�q“	˜X°1©Ñ4Ñ4“	Ø�A‘�q“	˜X°1©Ñ4Ñ4•	ñ /ð Ðr   Úword_points_listr>   c           	      óz  • [        [        R                  " USS2S4   5      5      n[        [        R                  " USS2S4   5      5      nUSS2S4   U-
  USS2S4'   USS2S4   U-
  USS2S4'   [        [        R                  R	                  US   US   -
  5      5      n[        [        R                  R	                  US   US   -
  5      5      n[        R
                  " SS/US/Xg/SU//5      R                  [        R                  5      n[        R                  " X5      n	[        R                  " U	5      u  p«/ nU Hò  n/ nU HÅ  nUnU[        R                  :X  a:  U R                  [        R                  " S5      US   US   SS5      nUS   U-   US'   [        R
                  " US/-   5      n[        R                   " UU5      u  nnnUU-  UU-  /n[        US   U-   5      [        US   U-   5      /nUR#                  U5        MÇ     U R%                  U5      nUR#                  U5        Mô     U$ )uÛ   
get_rotate_crop_imageçš„é€†æ“�ä½œ
imgä¸ºåŽŸå›¾
part_imgä¸ºcropå�Žçš„å›¾
bbox_pointsä¸ºpart_imgä¸­å¯¹åº”åœ¨åŽŸå›¾çš„bbox, å››ä¸ªç‚¹ï¼Œå·¦ä¸Šï¼Œå�³ä¸Šï¼Œå�³ä¸‹ï¼Œå·¦ä¸‹
part_pointsä¸ºåœ¨part_imgä¸­çš„ç‚¹[(x, y), (x, y)]
Nr   rB   rC   i¦ÿÿÿ)r‚   r)   rƒ   rE   rF   r*   ÚastypeÚfloat32Úcv2ÚgetPerspectiveTransformÚinvertr   r   Ús_rotateÚmathÚradiansÚdotr1   Úorder_points)r4   rg   rŸ   r>   ÚleftÚtopÚimg_crop_widthÚimg_crop_heightÚpts_stdÚMÚ_ÚIMÚnew_word_points_listÚword_pointsÚnew_word_pointsÚpointÚ	new_pointÚpr~   ÚyÚzs                        r   r0   Ú%CalRecBoxes.reverse_rotate_crop_imageÊ   s&  € ô ”2—6’6˜+¢a¨ dÑ+Ó,Ó-ˆÜ”"—&’&˜¢Q¨ TÑ*Ó+Ó,ˆØ'ª¨1¨Ñ-°Ñ4ˆ’A�q�DÑØ'ª¨1¨Ñ-°Ñ3ˆ’A�q�DÑäœRŸY™YŸ^™^¨K¸©N¸[È¹^Ñ,KÓLÓMˆÜœbŸi™iŸn™n¨[¸©^¸kÈ!¹nÑ-LÓMÓNˆä—(’(à�A�Ø Ð#ØÐ1Ø�OÐ$ð	ó
÷ ‰&”—‘Ó
ð 	ô ×'Ò'¨Ó=ˆÜ—
’
˜1“‰ˆà!ÐÛ+ˆKØ ˆOÛ$�Ø!�	Ø¤	× 2Ñ 2Ó2Ø $§¡ÜŸš SÓ)¨9°Q©<¸À1¹ÀqÈ!ó!�Ið $-¨Q¡<°.Ñ#@�I˜a‘Lä—H’H˜Y¨!¨™_Ó-�ÜŸ&š&  Q›-‘��1�aØ ™U A¨¡E˜N�	ä  ¨1¡°Ñ!4Ó5´s¸9ÀQ¹<È#Ñ;MÓ7NÐO�	Ø×&Ñ& yÖ1ñ %ð #×/Ñ/°Ó@ˆOØ ×'Ñ'¨Ö8ñ# ,ð$ $Ð#r   c                 óH  • [         R                  " U5      n[         R                  " U5      nX-
  [        R                  " U 5      -  X$-
  [        R                  " U 5      -  -   U-   nX$-
  [        R                  " U 5      -  X-
  [        R                  " U 5      -  -
  U-   nXV/$ )u[   ç»•pointx,pointyé¡ºæ—¶é’ˆæ—‹è½¬
https://blog.csdn.net/qq_38826019/article/details/84233397
)r)   r*   r§   ÚcosÚsin)ÚangleÚvaluexÚvalueyÚpointxÚpointyÚsRotatexÚsRotateys          r   r¦   ÚCalRecBoxes.s_rotateÿ   s™   € ô
 —’˜&Ó!ˆÜ—’˜&Ó!ˆà‰_¤§¢¨£Ñ/Ø‰¤$§(¢(¨5£/Ñ1ñ2àñð 	ð ‰_¤§¢¨£Ñ/Ø‰¤$§(¢(¨5£/Ñ1ñ2àñð 	ð
 Ð#Ð#r   Úori_boxc           
      ó@
  • S n[         R                  " U 5      R                  S5      n[         R                  " USS2S4   5      [         R                  " USS2S4   5      pC[         R                  " USS2S4   U:H  5      (       Ga  [         R                  " USS2S4   U:H  5      (       aú  U[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         nU[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         nU[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         nU[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         nGO$[         R                  " USS2S4   U:H  5      (       a;  [         R                  " USS2S4   5      n	X)S      nX)S      nX)S      nX)S      nGOÄ[         R                  " USS2S4   U:H  5      (       Gac  [         R                  " USS2S4   U:g  5      (       Ga=  U[         R
                  " USS2S4   U:  5         U[         R
                  " USS2S4   U:„  5         pºU
[         R
                  " U
SS2S4   [         R                  " U
SS2S4   5      :H  5         U
[         R
                  " U
SS2S4   [         R                  " U
SS2S4   5      :H  5         peU[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         U[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         p‡GO;U[         R
                  " USS2S4   U:  5         U[         R
                  " USS2S4   U:„  5         pÜU[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         U[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         p…U[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         U[         R
                  " USS2S4   [         R                  " USS2S4   5      :H  5         pvU" U5      nU" U5      nU" U5      nU" U5      n[         R                  " XVXx/5      R                  S5      R                  5       $ )u   çŸ©å½¢æ¡†é¡ºåº�æŽ’åˆ—c                 ó~   • U R                   S:X  a  U R                  S5      $ U R                   S:X  a  U $ U S S2S S 24   $ )N)r   )rB   r   rB   )r(   Úreshape)r¸   s    r   Úconvert_to_1x2Ú0CalRecBoxes.order_points.<locals>.convert_to_1x2  s>   € Ø�w‰w˜$‹Ø—y‘y Ó(Ð(à�w‰w˜&Ó Ø�Ø�R�a�Rš�U‘8ˆOr   )r�   r   Nr   rB   r   rC   )r)   r*   rÊ   ÚmeanÚanyÚwhererƒ   rG   r[   ÚargsortÚtolist)rÇ   rË   r7   r†   Úcenter_yÚp1Úp2Úp3Úp4Úy_sortÚp12Úp34Úp14Úp23s                 r   rª   ÚCalRecBoxes.order_points  sS  € ò	ô �hŠh�wÓ×'Ñ'¨Ó0ˆÜŸWšW Sª¨A¨¡YÓ/´·²¸ºQÀ¸T¹Ó1C�(Ü�6Š6�#’a˜�d‘)˜xÑ'×(Ò(¬R¯VªVØ’�1�‰I˜Ñ!÷.
ñ .
ð ”R—X’X˜c¢! Q $™i¬2¯6ª6°#²a¸°d±)Ó+<Ñ<Ó=Ñ>ˆBØ”R—X’X˜c¢! Q $™i¬2¯6ª6°#²a¸°d±)Ó+<Ñ<Ó=Ñ>ˆBØ”R—X’X˜c¢! Q $™i¬2¯6ª6°#²a¸°d±)Ó+<Ñ<Ó=Ñ>ˆBØ”R—X’X˜c¢! Q $™i¬2¯6ª6°#²a¸°d±)Ó+<Ñ<Ó=Ñ>ŠBÜ�VŠV�Cš˜1˜‘I Ñ)×*Ñ*Ü—Z’Z ¢A q D¡	Ó*ˆFØ˜A‘Y‘ˆBØ˜A‘Y‘ˆBØ˜A‘Y‘ˆBØ˜A‘Y‘ŠBÜ�VŠV�Cš˜1˜‘I Ñ)×*Ò*¬r¯vªvØ’�1�‰I˜Ñ!÷0
ò 0
ð ”B—H’H˜S¢ A ™Y¨Ñ1Ó2Ñ3Ø”B—H’H˜S¢ A ™Y¨Ñ1Ó2Ñ3ð ð
 ”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=Ø”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=ð ð
 ”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=Ø”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=ò ð ”B—H’H˜S¢ A ™Y¨Ñ1Ó2Ñ3Ø”B—H’H˜S¢ A ™Y¨Ñ1Ó2Ñ3ð ð
 ”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=Ø”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=ð ð
 ”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=Ø”B—H’H˜S¢ A ™Y¬"¯&ª&°²Q¸°T±Ó*;Ñ;Ó<Ñ=ð ñ ˜BÓˆÙ˜BÓˆÙ˜BÓˆÙ˜BÓˆÜ�xŠx˜ Ð(Ó)×1Ñ1°'Ó:×AÑAÓCÐCr   r   N)F)r   r   r   r   Ú__doc__r   r)   Úndarrayr   Úboolr?   Ústaticmethodr   r/   Ústrr   r   rD   r+   r‚   rd   re   rb   rc   r,   r0   r¦   rª   r   r   r   r   r   r      sØ  † ñGð (-ñà�2—:‘:Ñðð —*‘*ðð ð	ð
 !%ðð 
õð@ ðS˜rŸz™zð S¨ió Só ðSð. (-ñ2:àð2:ð �j‰jð2:ð ð	2:ð
 !%ð2:ð 
ˆt�C‰y˜$˜t D¨¡KÑ0Ñ1°4¸±;Ð>Ñ	?õ2:ðhà˜˜S™	‘?ðð ðð ð	ð
 ˜5 %¨°Ð5Ñ6ðð 
ˆd�4˜‘;ÑÑ	 ôð  ð6Ø˜‘9ð6àð6ð ð6ð ˜5 %¨°Ð5Ñ6ð	6ð
 
ˆd�4˜‘;ÑÑ	 ó6ó ð6ð2 ð7 d¨3¡ið 7Àð 7È5ó 7ó ð7ð ð	-Ø˜‘Kð	-Ø*/ð	-Ø:?ð	-ØJMð	-à	ó	-ó ð	-ð ðØ˜D  e¡Ñ-Ñ.ðà	ˆd�4˜‘;ÑÑ	 óó ðð3$à—Z‘Zð3$ð ˜t D¨¡KÑ0Ñ1ð3$ð ð	3$ð
 
ˆd�4˜‘9‰oÑ	ô3$ðj ñ$ó ð$ð$ ð<D˜d 4¨¡9™oð <D°$°t¸C±y±/ó <Dó ó<Dr   r   )r-   r§   Úenumr   Útypingr   r   r£   Únumpyr)   Úch_ppocr_rec.typingsr   r   r	   Úutils.utilsr
   r   r   r   r   r   Ú<module>rç      s<   ðó Û Ý ß ã 
Û ç DÑ DÝ ,ô!�ô !÷
zDò zDr   