Ë
    \;jY9  ã            	       óè  — d dl Z d dlZd dlZe j                  j	                  e j                  j                  e«      «      Zej                  j                  e«       ej                  j                  d e j                  j                  e j                  j                  ed«      «      «       de j                  d<   d dlZd dlZd dlZd dl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 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&m'Z'm(Z(  e«       Z) G d„ de*«      Z+dd„Z,d„ Z-e.dk(  rÇ e&«       Z/e/j`                  r«g Z1e/jd                  Z2 e3e2«      D ]z  Z4ejj                  dgejl                  z   djo                  e4«      djo                  d«      gz   Z8 ejr                  e8ejt                  ejt                  ¬«      Z;e1j                  e;«       Œ| e1D ]  Z;e;jy                  «        Œ y e-e/«       yy)é    Nz../Úauto_growthÚFLAGS_allocator_strategy)Údeepcopy)Ú
try_import)Úget_image_file_listÚcheck_and_read)Ú
get_logger)Údraw_ser_resultsÚdraw_re_results)Ú
TextSystem)ÚLayoutPredictor)ÚTableSystemÚto_excel)Ú
parse_argsÚdraw_structure_resultÚcal_ocr_word_boxc                   ó,   — e Zd Zd„ Zdd„Zd„ Zd„ Zd„ Zy)ÚStructureSystemc                 ó^  — |j                   | _         |j                  | _        d | _        |j                  rdd l}|j                  d¬«      | _        | j                   dk(  �r|j                  s#t        j                  t        j                  «       |j                  dk(  r+|j                  dk(  rd|_        t        j                  d«       d | _        d | _        d | _        |j                  r,t#        |«      | _        |j                  rt%        |«      | _        |j&                  rz| j                  �;t)        || j                  j*                  | j                  j,                  «      | _        n3t)        |«      | _        n"| j                   dk(  rdd	lm}  ||«      | _        |j4                  | _        y )
Nr   Útext_image_orientation)Ú
model_nameÚ	structureFTzAWhen args.layout is false, args.ocr is automatically set to falseÚkie)ÚSerRePredictor)ÚmodeÚrecoveryÚimage_orientation_predictorÚimage_orientationÚ
paddleclasÚ
PaddleClasÚshow_logÚloggerÚsetLevelÚloggingÚINFOÚlayoutÚocrÚwarningÚlayout_predictorÚtext_systemÚtable_systemr   r   Útabler   Útext_detectorÚtext_recognizerÚ(ppstructure.kie.predict_kie_token_ser_rer   Úkie_predictorÚreturn_word_box)ÚselfÚargsr   r   s       úmG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddleocr/ppstructure/predict_system.pyÚ__init__zStructureSystem.__init__,   sV  € Ø—I‘IˆŒ	ØŸ™ˆŒà+/ˆÔ(Ø×!Ò!Ûà/9×/DÑ/DØ3ð 0Eó 0ˆDÔ,ð �9‰9˜Ó#Ø—=’=Ü—‘¤§¡Ô-Ø�{‰{˜eÒ#¨¯©°DÒ(8Ø �”Ü—‘ØWôð %)ˆDÔ!Ø#ˆDÔØ $ˆDÔØ�{Š{Ü(7¸Ó(=�Ô%Ø—8’8Ü'1°$Ó'7�DÔ$Ø�zŠzØ×#Ñ#Ð/Ü(3ØØ×(Ñ(×6Ñ6Ø×(Ñ(×8Ñ8ó)�DÕ%ô )4°DÓ(9�DÕ%à�Y‰Y˜%ÒÝOá!/°Ó!5ˆDÔà#×3Ñ3ˆÕó    c           
      óð  — dddddddddœ}t        j                   «       }| j                  �¯t        j                   «       }| j                  j                  |¬«      }t        |«      }|d   d   d   }	t        j
                  t        j                  t        j                  dœ}
|	|
v rt	        j                  ||
|	   «      }t        j                   «       }||z
  |d<   | j                  dk(  �rØ|j                  «       }| j                  �"| j                  |«      \  }}|dxx   |z  cc<   n!|j                  d d	 \  }}t        d d
d¬«      g}d }| j                  �4| j                  |«      \  }}|dxx   |d   z  cc<   |dxx   |d   z  cc<   g }|D �]  }d}|d   �H|d   \  }}}}t!        |«      t!        |«      t!        |«      t!        |«      f\  }}}}|||…||…d d …f   }nddf\  }}}}|}||||g}|d   d
k(  rb| j"                  �j| j#                  ||«      \  }}|d
xx   |d
   z  cc<   |dxx   |d   z  cc<   |dxx   |d   z  cc<   |dxx   |d   z  cc<   n|�| j%                  ||«      }|j'                  |d   j)                  «       |||||d   dœ«       �Œ t        j                   «       }||z
  |d<   ||fS | j                  dk(  r%| j+                  |«      \  }}||d<   ||d<   |d   |fS y)Nr   )r   r&   r,   Útable_matchÚdetÚrecr   Úall)Ú
input_dataÚlabel_names)Ú90Ú180Ú270r   r   r&   é   r,   g        )ÚbboxÚlabelÚscorer9   r:   Ú rB   rC   r8   ÚmatchrD   )ÚtyperB   ÚimgÚresÚimg_idxrD   r;   r   )NN)Útimer   ÚpredictÚnextÚcv2ÚROTATE_90_COUNTERCLOCKWISEÚ
ROTATE_180ÚROTATE_90_CLOCKWISEÚrotater   Úcopyr)   ÚshapeÚdictr*   Ú_predict_textÚintr+   Ú_filter_text_resÚappendÚlowerr0   )r2   rH   Úreturn_ocr_result_in_tablerJ   Ú	time_dictÚstartÚticÚ
cls_resultÚcls_resÚangleÚcv_rotate_codeÚtocÚori_imÚ
layout_resÚelapseÚhÚwÚtext_resÚocr_time_dictÚres_listÚregionrI   Úx1Úy1Úx2Úy2Úroi_imgrB   Útable_time_dictÚendÚre_ress                                  r4   Ú__call__zStructureSystem.__call__Y   sj  € à!"ØØØØØØØñ	
ˆ	ô —	‘	“ˆà×+Ñ+Ð7Ü—)‘)“+ˆCØ×9Ñ9×AÑAÈSÐAÓQˆJÜ˜:Ó&ˆGØ˜A‘J˜}Ñ-¨aÑ0ˆEä×4Ñ4Ü—~‘~Ü×.Ñ.ñˆNð
 ˜Ñ&Ü—j‘j  n°UÑ&;Ó<�Ü—)‘)“+ˆCØ-0°3©YˆIÐ)Ñ*à�9‰9˜Ó#Ø—X‘X“ZˆFØ×$Ñ$Ð0Ø%)×%:Ñ%:¸3Ó%?Ñ"�
˜FØ˜(Ó# vÑ-Ô#à—|‘| B QÐ'‘��1Ü"¨°GÀ3ÔGÐH�
ð ˆHØ×ÑÐ+Ø*.×*<Ñ*<¸SÓ*AÑ'�˜-Ø˜%Ó  M°%Ñ$8Ñ8Ó Ø˜%Ó  M°%Ñ$8Ñ8Ó àˆHÜ$�Ø�Ø˜&‘>Ð-Ø%+¨F¡^‘N�B˜˜B Ü%(¨£W¬c°"«g´s¸2³wÄÀBÃÐ%G‘N�B˜˜B Ø$ R¨ U¨B¨r¨E²1 _Ñ5‘Gà%&¨¨1¨a Z‘N�B˜˜B Ø$�GØ˜B  BÐ'�à˜'‘? gÒ-Ø×(Ñ(Ð4Ø/3×/@Ñ/@Ø#Ð%?ó0Ñ,˜˜_ð " 'Ó*¨o¸gÑ.FÑFÓ*Ø! -Ó0°OÀGÑ4LÑLÓ0Ø! %Ó(¨O¸EÑ,BÑBÓ(Ø! %Ó(¨O¸EÑ,BÑBÔ(àÐ+à"×3Ñ3°H¸dÓC˜à—‘à & w¡× 5Ñ 5Ó 7Ø $Ø&Ø"Ø#*Ø!'¨¡ñö	ð3 %ôH —)‘)“+ˆCØ" U™{ˆI�eÑØ˜YÐ&Ð&à�Y‰Y˜%ÒØ!×/Ñ/°Ó4‰NˆF�FØ%ˆI�eÑØ%ˆI�eÑØ˜!‘9˜iÐ'Ð'àr6   c           	      ó¬  — | j                  |«      \  }}}g d¢}g }t        ||«      D ]§  \  }}|d   |d   }
}	|D ]  }||	v sŒ|	j                  |d«      }	Œ | j                  rBt	        |	||d   «      \  }}|j                  |	t        |
«      |j                  «       ||dœ«       Œ||j                  |	t        |
«      |j                  «       dœ«       Œ© ||fS )N)ú<strike>rw   z<sup>z</sub>z<b>z</b>z<sub>z</sup>z
<overline>z</overline>z<underline>z</underline>z<i>z</i>r   é   rE   rA   )ÚtextÚ
confidenceÚtext_regionÚ	text_wordÚtext_word_region)ry   rz   r{   )r*   ÚzipÚreplacer1   r   rY   ÚfloatÚtolist)r2   rH   Úfilter_boxesÚfilter_rec_resrj   Ústyle_tokenrI   ÚboxÚrec_resÚrec_strÚrec_confÚtokenÚword_box_content_listÚword_box_lists                 r4   rV   zStructureSystem._predict_text¼   sô   € Ø6:×6FÑ6FÀsÓ6KÑ3ˆ�n mò

ˆð  ˆÜ ¨nÖ=‰LˆC�Ø '¨¡
¨G°A©J�XˆGÛ$�Ø˜GÒ#Ø%Ÿo™o¨e°RÓ8‘Gð %ð ×#Ò#Ü7GØ˜S '¨!¡*ó8Ñ4Ð% }ð —
‘
à 'Ü&+¨H£oØ'*§z¡z£|Ø%:Ø,9ñõð —
‘
à 'Ü&+¨H£oØ'*§z¡z£|ñõð' >ð4 �MÐ!Ð!r6   c                 ó¦   — g }|D ]I  }|d   }|d   d   |d   d   |d   d   |d   d   f}| j                  ||«      sŒ9|j                  |«       ŒK |S )Nr{   r   rx   rA   )Ú_has_intersectionrY   )r2   ri   rB   rI   Úrr…   Úrects          r4   rX   z StructureSystem._filter_text_resï   sk   € ØˆÛˆAØ�MÑ"ˆCØ�q‘6˜!‘9˜c !™f Q™i¨¨Q©°©°C¸±F¸1±IÐ=ˆDØ×%Ñ% d¨DÕ1Ø—
‘
˜1•ð	 ð
 ˆ
r6   c                 óL   — |\  }}}}|\  }}}	}
||	kD  s||k  ry||
kD  s||k  ryy)NFT© )r2   Úrect1Úrect2Úx_min1Úy_min1Úx_max1Úy_max1Úx_min2Úy_min2Úx_max2Úy_max2s              r4   r�   z!StructureSystem._has_intersectionø   sA   € Ø).Ñ&ˆ�˜ Ø).Ñ&ˆ�˜ Ø�FŠ?˜f všoØØ�FŠ?˜f všoØØr6   N)Fr   )Ú__name__Ú
__module__Ú__qualname__r5   ru   rV   rX   r�   r‘   r6   r4   r   r   +   s   „ ò+4óZaòF1"òfór6   r   c           	      ól  — t         j                  j                  ||«      }t        j                  |d¬«       t	        | «      }t        t         j                  j                  |dj                  |«      «      dd¬«      5 }|D �]  }|j                  d«      }|j                  dj                  t        j                  |«      «      «       |d	   j                  «       d
k(  r^t        |d   «      dkD  rMd|d   v rFt         j                  j                  |dj                  |d   |«      «      }	t        |d   d   |	«       Œ¼|d	   j                  «       dk(  sŒÓt         j                  j                  |dj                  |d   |«      «      }
t        j                  |
|«       �Œ 	 d d d «       y # 1 sw Y   y xY w)NT©Úexist_okz
res_{}.txtrh   Úutf8©ÚencodingrH   z{}
rG   r,   rI   r   Úhtmlz
{}_{}.xlsxrB   Úfigurez	{}_{}.jpg)ÚosÚpathÚjoinÚmakedirsr   ÚopenÚformatÚpopÚwriteÚjsonÚdumpsrZ   Úlenr   rN   Úimwrite)rI   Úsave_folderÚimg_namerJ   Úexcel_save_folderÚres_cpÚfrl   rq   Ú
excel_pathÚimg_paths              r4   Úsave_structure_resrº     sd  € ÜŸ™Ÿ™ [°(Ó;ÐÜ‡K�KÐ!¨DÕ1Ü�c‹]€Fä	Ü
�‰�‰Ð&¨×(;Ñ(;¸GÓ(DÓEØØõ
ð 
ÜˆFØ—j‘j Ó'ˆGØ�G‰G�F—M‘M¤$§*¡*¨VÓ"4Ó5Ô6ð �v‘×$Ñ$Ó&¨'Ò1Ü˜˜u™Ó&¨Ò*Ø˜f U™mÑ+äŸW™WŸ\™\Ø% |×':Ñ':¸6À&¹>È7Ó'Só�
ô ˜ ™ vÑ.°
Õ;Ø˜‘×%Ñ%Ó'¨8Ó3ÜŸ7™7Ÿ<™<Ø% {×'9Ñ'9¸&À¹.È'Ó'Ró�ô —‘˜H gÖ.ñ# ÷
÷ 
ñ 
ús   Á>CF*ÅAF*Æ*F3c                 ó°	  — t        | j                  «      }|}|| j                  d | j                  …   }| j                  sVt        | «      }t        j                  j                  | j                  |j                  «      }t        j                  |d¬«       t        |«      }t        |«      D �]ß  \  }}t        j                  dj!                  |||«      «       t#        |«      \  }}}	t        j                  j%                  |«      j'                  d«      d   }
| j(                  rÈ| j                  r¼|	rºt+        d«       ddlm} t        j                  | j                  d¬«       t        j                  j                  | j                  dj!                  |
«      «      } ||«      }|j1                  |«       |j3                  «        t        j                  d	j!                  |«      «       �ŒA|s|	st5        j6                  |«      }|	s,|€&t        j9                  d
j!                  |«      «       �Œ„|g}n|}g }t        |«      D �]  \  }} ||¬«      \  }}t        j                  j                  |
dj!                  |«      «      }t        j                  t        j                  j                  ||
«      d¬«       |j                  dk(  r+|g k7  r&t;        ||| j<                  «      }t?        |||
|«       nÕ|j                  dk(  rÆ|j@                  jB                  �tE        ||| j<                  ¬«      }ntG        ||| j<                  ¬«      }tI        t        j                  j                  ||
dj!                  |«      «      dd¬«      5 }dj!                  |tK        jL                  d|id¬«      «      }|jO                  |«       d d d «       |g k7  r:t5        jP                  |«       t        j                  dj!                  |«      «       | j(                  s�ŒÕ|g k7  s�ŒÜddl)m*}m+} |jX                  \  }}} |||«      }||z  }�Œ | j(                  r|g k7  r	  |||
«       t        j                  dj!                  d   «      «       �Œâ y # 1 sw Y   ŒÎxY w# tZ        $ r0}t        j9                  dj!                  ||«      «       Y d }~�Œ$d }~ww xY w)NTr    z
[{}/{}] {}Ú.r   Úpdf2docx)Ú	Converterz{}_api.docxzdocx save to {}zerror in loading image:{})rJ   zshow_{}.jpgr   r   )Ú	font_pathzres_{}_kie.txtrh   r¢   r£   z{}	{}
Úocr_infoF)Úensure_asciizresult save to {})Úsorted_layout_boxesÚconvert_info_docxz.error in layout recovery image:{}, err msg: {}zPredict time : {:.3f}sr;   ).r   Ú	image_dirÚ
process_idÚtotal_process_numÚuse_pdf2docx_apir   r§   r¨   r©   Úoutputr   rª   r±   Ú	enumerater"   Úinfor¬   r   ÚbasenameÚsplitr   r   Úpdf2docx.converterr¾   ÚconvertÚcloserN   ÚimreadÚerrorr   Úvis_font_pathrº   r0   Ú	predictorr   r
   r«   r¯   r°   r®   r²   Ú$ppstructure.recovery.recovery_to_docrÂ   rÃ   rT   Ú	Exception)r3   Úimage_file_listÚstructure_sysr³   Úimg_numÚiÚ
image_filerH   Úflag_gifÚflag_pdfr´   r¾   Ú	docx_fileÚcvÚimgsÚall_resÚindexrI   r\   Úimg_save_pathÚdraw_imgr·   Úres_strrÂ   rÃ   rg   rh   Ú_Úexs                                r4   Úmainrç      sê  € Ü)¨$¯.©.Ó9€OØ%€OØ% d§o¡oÐ&O¸×9OÑ9OÐ&OÑP€Oà× Ò Ü'¨Ó-ˆÜ—g‘g—l‘l 4§;¡;°×0BÑ0BÓCˆÜ
�‰�K¨$Õ/Ü�/Ó"€Gä" ?×3‰ˆˆ:Ü�‰�L×'Ñ'¨¨7°JÓ?Ô@Ü"0°Ó"<ÑˆˆX�xÜ—7‘7×#Ñ# JÓ/×5Ñ5°cÓ:¸1Ñ=ˆà�=Š=˜T×2Ò2±xÜ�zÔ"Ý4ä�K‰K˜Ÿ™¨dÕ3ÜŸ™Ÿ™ T§[¡[°-×2FÑ2FÀxÓ2PÓQˆIÙ˜:Ó&ˆBØ�J‰J�yÔ!Ø�H‰HŒJÜ�K‰KÐ)×0Ñ0°Ó;Ô<Ùá¡Ü—*‘*˜ZÓ(ˆCáØˆ{Ü—‘Ð8×?Ñ?À
ÓKÔLÙØ�5‰DàˆDàˆÜ# DŸ/‰JˆE�3Ù*¨3¸Ô>‰NˆC�ÜŸG™GŸL™LØ˜X }×';Ñ';¸EÓ'BóˆMô �K‰KœŸ™Ÿ™ [°(Ó;ÀdÕKØ×!Ñ! [Ò0°S¸B²YÜ0°°c¸4×;MÑ;MÓN�Ü" 3¨°X¸uÕEØ×#Ñ# uÒ,Ø ×.Ñ.×8Ñ8ÐDÜ.¨s°CÀ4×CUÑCUÔV‘Hä/°°SÀD×DVÑDVÔW�HäÜ—G‘G—L‘L ¨hÐ8H×8OÑ8OÐPUÓ8VÓWØØ#õð Ø(×/Ñ/Ø"¤D§J¡J°
¸CÐ/@ÈuÔ$Uó�Gð —G‘G˜GÔ$÷ð �bŠyÜ—‘˜M¨8Ô4Ü—‘Ð/×6Ñ6°}ÓEÔFØ�}Œ} ¨¤÷ð
 Ÿ)™)‘��1�aÙ)¨#¨qÓ1�Ø˜3‘’ðG *ðJ �=Š=˜W¨š]ðÙ! # w°¸XÔFô 	�‰Ð,×3Ñ3°I¸eÑ4DÓEÖFñY 4÷Xð ûô2 ò Ü—‘ØD×KÑKØ" Bóôõ
 ûðús$   Î;RÑRÒRÒ	SÒ%%SÓSÚ__main__z-uz--process_id={}z--use_mp={}F)ÚstdoutÚstderr)r   )=r§   ÚsysÚ
subprocessr¨   ÚdirnameÚabspathÚ__file__Ú__dir__rY   Úinsertr©   ÚenvironrN   r¯   ÚnumpyÚnprK   r$   rS   r   Úpaddle.utilsr   Úppocr.utils.utilityr   r   Úppocr.utils.loggingr	   Úppocr.utils.visualr
   r   Útools.infer.predict_systemr   Ú!ppstructure.layout.predict_layoutr   Úppstructure.table.predict_tabler   r   Úppstructure.utilityr   r   r   r"   Úobjectr   rº   rç   rœ   r3   Úuse_mpÚp_listrÆ   ÚrangerÅ   Ú
executableÚargvr¬   ÚcmdÚPopenré   ÚpÚwaitr‘   r6   r4   Ú<module>r     s•  ðó 
Û 
Û à
�'‰'�/‰/˜"Ÿ'™'Ÿ/™/¨(Ó3Ó
4€Ø ‡�‡��Ô Ø ‡�‡���2—7‘7—?‘? 2§7¡7§<¡<°¸Ó#?Ó@Ô Aà)6€‡
�
Ð%Ñ &Û 
Û Û Û Û Ý å #ß CÝ *ß @Ý 1Ý =ß Aß SÑ Sá	‹€ôT�fô Tón/ò<WGðt ˆzÒÙ‹<€DØ‡{‚{ØˆØ ×2Ñ2ÐÙÐ 1Ö2ˆJà—‘ Ð&Ø—(‘(ñà$×+Ñ+¨JÓ7¸×9MÑ9MÈeÓ9TÐUñVð ð
 !�
× Ñ  ¨S¯Z©ZÀÇ
Á
ÔKˆAØ�M‰M˜!Õð 3ó ˆAØ�F‰F�Hñ ñ 	ˆT�
ð! r6   