Ë
    \;jç$  ã                   óp   — d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	m
Z
mZmZ d dlZd„ Zd„ Zd„ Zd„ Zy)é    N)ÚImageÚ	ImageDrawÚ	ImageFont)Údraw_ocr_box_txtÚstr2boolÚstr2int_tupleÚ	init_argsc                  ó  — t        «       } | j                  dt        d¬«       | j                  dt        d¬«       | j                  dt        d¬«       | j                  dt        ¬	«       | j                  d
t        d¬«       | j                  dt        d¬«       | j                  dt        ¬	«       | j                  dt        d¬«       | j                  dt
        dd¬«       | j                  dt
        dd¬«       | j                  dt        d¬«       | j                  dt        ¬	«       | j                  dt        ¬	«       | j                  dt        d¬«       | j                  dt        d¬«       | j                  dt        d ¬«       | j                  dt        d d!gd d"¬#«       | j                  d$t        d%d&¬«       | j                  d't        dd(¬«       | j                  d)t        dd*¬«       | j                  d+t        dd,¬«       | j                  d-t        d%d.¬«       | j                  d/t        d%d0¬«       | j                  d1t        d%d2¬«       | j                  d3t        d%d4¬«       | j                  d5t        d6d7¬«       | S )8Nz--outputz./output)ÚtypeÚdefaultz--table_max_leniè  z--table_algorithmÚ	TableAttnz--table_model_dir)r   z--merge_no_span_structureTz--table_char_dict_pathz/../ppocr/utils/dict/table_structure_dict_ch.txtz--layout_model_dirz--layout_dict_pathz9../ppocr/utils/dict/layout_dict/layout_publaynet_dict.txtz--layout_score_thresholdç      à?zThreshold of score.)r   r   Úhelpz--layout_nms_thresholdzThreshold of nms.z--kie_algorithmÚ	LayoutXLMz--ser_model_dirz--re_model_dirz--use_visual_backbonez--ser_dict_pathz'../train_data/XFUND/class_list_xfun.txtz--ocr_order_methodz--modeÚ	structureÚkiezstructure and kie is supported)r   Úchoicesr   r   z--image_orientationFz/Whether to enable image orientation recognitionz--layoutz!Whether to enable layout analysisz--tablez=In the forward, whether the table area uses table recognitionz--ocrz@In the forward, whether the non-table area is recognition by ocrz
--recoveryz$Whether to enable layout of recoveryz--use_pdf2docx_apizWhether to use pdf2docx apiz--invertz)Whether to invert image before processingz
--binarizez5Whether to threshold binarize image before processingz--alphacolor©éÿ   r   r   zQReplacement color for the alpha channel, if the latter is present; R,G,B integers)Ú
infer_argsÚadd_argumentÚstrÚintr   ÚfloatÚboolr   ©Úparsers    úfG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddleocr/ppstructure/utility.pyr	   r	      sâ  € Ü‹\€Fð ×Ñ˜
¬°jÐÔAà
×ÑÐ)´¸SÐÔAØ
×ÑÐ+´#¸{ÐÔKØ
×ÑÐ+´#ÐÔ6Ø
×ÑÐ3¼(ÈDÐÔQØ
×ÑØ ÜØAð ô ð ×ÑÐ,´3ÐÔ7Ø
×ÑØÜØKð ô ð
 ×ÑØ"¬¸ÐBWð ô ð ×ÑØ ¤u°cÐ@Sð ô ð ×ÑÐ)´¸[ÐÔIØ
×ÑÐ)´ÐÔ4Ø
×ÑÐ(¬sÐÔ3Ø
×ÑÐ/´hÈÐÔMØ
×ÑØ¤Ð-Vð ô ð ×ÑÐ,´3ÀÐÔEà
×ÑØÜØ˜eÐ$ØØ-ð ô ð ×ÑØÜØØ>ð	 ô ð ×ÑØÜØØ0ð	 ô ð ×ÑØÜØØLð	 ô ð ×ÑØÜØØOð	 ô ð ×ÑØÜØØ3ð	 ô ð ×ÑØÜØØ*ð	 ô ð ×ÑØÜØØ8ð	 ô ð ×ÑØÜØØDð	 ô ð ×ÑØÜØØ`ð	 ô ð €Mó    c                  ó6   — t        «       } | j                  «       S )N)r	   Ú
parse_argsr   s    r   r!   r!   …   s   € Ü‹[€FØ×ÑÓÐr   c                 ó  — t        | t        j                  «      rt        j                  | «      } g g g }}}| j                  «       }t        j                  |«      }d}d}	i }
d}t        j                  ||d¬«      }|D �]y  }|d   |
vrJt        j                  dd«      t        j                  dd«      t        j                  dd«      f}||
|d   <   n|
|d      }|d	   }|j                  |d   |d
   f|d   |d   fg|d¬«       t        t        j                  j!                  d«      d   «      dk  r|j#                  |d   «      \  }}n#|j%                  |d   «      \  }}}}||z
  ||z
  }}|j                  |d   |d
   f|d   |z   |d
   |z   fg|	¬«       |j'                  |d   |d
   f|d   ||¬«       |d   dk(  r�ŒF|d   D �]+  }|j)                  t        j*                  |d   «      «       |j)                  |d   «       |j)                  |d   «       d|v sŒX|d   D ]Ì  }|}t        t-        j.                  |d   d   |d   d   z
  dz  |d   d
   |d   d
   z
  dz  z   «      «      }t        t-        j.                  |d   d   |d
   d   z
  dz  |d   d
   |d
   d
   z
  dz  z   «      «      }|dk(  s|dk(  rŒš|j)                  |«       |j)                  d«       |j)                  d«       ŒÎ �Œ. �Œ| t1        |||||d¬«      }|S )Nr   )éP   é   r   é   zutf-8)Úencodingr   r   r   Úbboxé   é   é   )ÚoutlineÚwidthÚ.é
   )Úfill)r/   ÚfontÚtableÚresÚtext_regionÚtextÚ
confidenceÚtext_word_regionÚ g      ð?)Ú	font_pathÚ
drop_score)Ú
isinstanceÚnpÚndarrayr   Ú	fromarrayÚcopyr   ÚDrawr   ÚtruetypeÚrandomÚrandintÚ	rectangler   ÚPILÚ__version__ÚsplitÚgetsizeÚgetbboxr4   ÚappendÚarrayÚmathÚsqrtr   )ÚimageÚresultr8   ÚboxesÚtxtsÚscoresÚ
img_layoutÚdraw_layoutÚ
text_colorÚtext_background_colorÚcatid2colorÚ	font_sizer0   ÚregionÚ	box_colorÚ
box_layoutÚtext_wÚtext_hÚleftÚtopÚrightÚbottomÚtext_resultÚword_regionÚchar_boxÚ
box_heightÚ	box_widthÚim_shows                               r   Údraw_structure_resultrg   Š   sp  € Ü�%œŸ™Ô$Ü—‘ Ó&ˆØ˜b "�ˆ4€Eà—‘“€JÜ—.‘. Ó,€KØ €JØ*ÐØ€KØ€IÜ×Ñ˜i¨¸WÔE€DäˆØ�&‰> Ñ,ä—‘˜q #Ó&Ü—‘˜q #Ó&Ü—‘˜q #Ó&ðˆIð
 +4ˆK˜˜v™Ò'à# F¨6¡NÑ3ˆIØ˜F‘^ˆ
Ø×ÑØ˜‰m˜Z¨™]Ð+¨j¸©m¸ZÈ¹]Ð-KÐLØØð 	ô 	
ô Œs�‰×$Ñ$ SÓ)¨!Ñ,Ó-°Ò2Ø!Ÿ\™\¨&°©.Ó9‰NˆF‘Fà'+§|¡|°F¸6±NÓ'CÑ$ˆD�#�u˜fØ" T™\¨6°C©<�FˆFà×Ñà˜A‘ 
¨1¡Ð.Ø˜A‘ Ñ'¨°A©¸Ñ)?Ð@ðð 'ð 	ô 	
ð 	×ÑØ˜‰]˜J q™MÐ*¨F°6©NÀÐRVð 	ô 	
ð �&‰>˜WÒ$Ùà% e�}�Ø—‘œRŸX™X k°-Ñ&@ÓAÔBØ—‘˜K¨Ñ/Ô0Ø—‘˜k¨,Ñ7Ô8à%¨Ò4Ø'2Ð3EÔ'F˜Ø#.˜Ü%(Ü ŸI™IØ!)¨!¡¨Q¡°(¸1±+¸a±.Ñ!@ÀQÑ FØ#+¨A¡;¨q¡>°H¸Q±KÀ±NÑ#BÀqÑ"Hñ!Ióó&˜
ô %(Ü ŸI™IØ!)¨!¡¨Q¡°(¸1±+¸a±.Ñ!@ÀQÑ FØ#+¨A¡;¨q¡>°H¸Q±KÀ±NÑ#BÀqÑ"Hñ!Ióó%˜	ð &¨š?¨i¸1ªnØ$ØŸ™ [Ô1ØŸ™ BœØŸ™ cÕ*ò% (Gò  -ðK ô~ Ø�E˜4 °9Èô€Gð €Nr   c                 óš  — |\  }}}}|j                  «       }|d   d   }|d   d   }|d   d   }	|d   d   }
||z
  |z  }g }g }g }g }t        |||«      D ]Á  \  }}}|dk(  rLt        |«      dk7  r3|d   |d   z
  dz   |z  }|t        |«      dz
  z  }|j                  |«       ||z  }||z  }ŒX|t	        |d   |z  «      z   }|t	        |d   dz   |z  «      z   }||	f||	f||
f||
ff}|j                  |«       |j                  dj                  |«      «       ŒÃ t        |«      dk7  r¢t        |«      dk7  rt        j                  |«      }n||z
  t        | «      z  }|D ]h  }|dz   |z  }t        t	        ||dz  z
  «      d«      |z   }t        t	        ||dz  z   «      ||z
  «      |z   }||	f||	f||
f||
ff}|j                  |«       Œj ||fS )zdCalculate the detection frame for each word based on the results of recognition and detection of ocrr   r(   r)   Úcnéÿÿÿÿr7   r   )
ÚtolistÚzipÚlenrI   r   Újoinr;   ÚmeanÚmaxÚmin)Úrec_strÚboxÚrec_word_infoÚcol_numÚ	word_listÚword_col_listÚ
state_listÚbbox_x_startÚ
bbox_x_endÚbbox_y_startÚ
bbox_y_endÚ
cell_widthÚword_box_listÚword_box_content_listÚcn_width_listÚcn_col_listÚwordÚword_colÚstateÚchar_seq_lengthÚ
char_widthÚcell_x_startÚ
cell_x_endÚcellÚavg_char_widthÚ
center_idxÚcenter_xs                              r   Úcal_ocr_word_boxr�   Ü   s_  € ð 5BÑ1€GˆY˜ zØ
�*‰*‹,€CØ�q‘6˜!‘9€LØ�Q‘˜‘€JØ�q‘6˜!‘9€LØ�Q‘˜‘€Jà˜|Ñ+¨wÑ6€Jà€MØÐØ€MØ€KÜ!$ Y°¸zÖ!JÑˆˆh˜Ø�DŠ=Ü�8‹} Ò!Ø#+¨B¡<°(¸1±+Ñ#=ÀÑ#AÀZÑ"O�Ø,´°H³ÀÑ0AÑB�
Ø×$Ñ$ ZÔ0Ø˜8Ñ#ˆKØ! TÑ)Ñ!à'¬#¨h°q©k¸JÑ.FÓ*GÑGˆLØ%¬¨X°b©\¸AÑ-=ÀÑ,KÓ(LÑLˆJà˜|Ð,Ø˜\Ð*Ø˜ZÐ(Ø˜zÐ*ð	ˆDð × Ñ  Ô&Ø!×(Ñ(¨¯©°«Õ7ð% "Kô& ˆ;Ó˜1ÒÜˆ}Ó Ò"ÜŸW™W ]Ó3‰Nà(¨<Ñ7¼3¸w»<ÑGˆNÛ%ˆJØ" SÑ(¨JÑ6ˆHÜœs 8¨n¸qÑ.@Ñ#@ÓAÀ1ÓEÈÑTˆLä”C˜ >°AÑ#5Ñ5Ó6¸
À\Ñ8QÓRØñð ð
 ˜|Ð,Ø˜\Ð*Ø˜ZÐ(Ø˜zÐ*ð	ˆDð × Ñ  Õ&ð &ð ! -Ð/Ð/r   )rA   ÚastrD   r   r   r   Únumpyr;   Útools.infer.utilityr   r   r   r	   r   rK   r!   rg   r�   © r   r   Ú<module>r’      s@   ðó Û 
Û 
ß +Ñ +Û ÷ó ó òfòRò
Oód70r   