
    i.P                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKr	S SK
Jr  \" S5      rS SKJr  S SKJrJrJrJrJrJrJrJrJr  S SKJrJrJr  S SKJrJrJ r   \RB                  RE                  \RB                  RG                  \$5      5      r%\RB                  RG                  \RB                  RM                  \%S5      5      r'\ RB                  RQ                  \%5        \ RB                  RS                  S \'5        S S	K*J+r+J,r,  S S
K-J.r.J/r/  S SK0J1r1  S SK2J3r3J4r4  Sr5Sr6SSSSS.r7SSS.r8SSSSS.r9SSS.r:S\	Rv                  4S jr<S\=4S jr> " S  S!\5      r? " S" S#\5      r@S$ rA\BS%:X  a  \A" 5         gg)&    N)
try_importfitz)Image)	QApplicationQWidgetQPushButtonQProgressBarQGridLayoutQMessageBoxQLabelQFileDialog	QCheckBox)SignalQThreadQObject)QImageQPixmapQIconz../../)StructureSystemsave_structure_res)
parse_argsdraw_structure_result)download_with_progressbar)sorted_layout_boxesconvert_info_docxpdf2wordz0.2.2zJhttps://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tarzJhttps://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tarzqhttps://paddleocr.bj.bcebos.com/ppstructure/models/slanet/paddle3.0b2/en_ppstructure_mobile_v2.0_SLANet_infer.tarzahttps://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tar)en_PP-OCRv3_det_inferen_PP-OCRv3_rec_infer'en_ppstructure_mobile_v2.0_SLANet_infer#picodet_lcnet_x1_0_fgd_layout_inferzen_dict.txtzlayout_publaynet_dict.txt)rec_char_dict_pathlayout_dict_pathzJhttps://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tarzJhttps://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tarzfhttps://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar)cn_PP-OCRv3_det_infercn_PP-OCRv3_rec_infer'cn_ppstructure_mobile_v2.0_SLANet_infer(picodet_lcnet_x1_0_fgd_layout_cdla_inferzppocr_keys_v1.txtzlayout_cdla_dict.txtreturnc                 P   U R                  [        R                  R                  5      n U R	                  5       nU R                  5       nU R                  5       nUR                  X!-  S-  5        [        R                  " U[        R                  5      R                  X!S45      nU$ )z-
Converts a QImage into an opencv MAT format
   )convertToFormatr   FormatFormat_RGBA8888widthheightbitssetsizenp
frombufferuint8reshape)incomingImager-   r.   ptrarrs        g/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppstructure/pdf2word/pdf2word.pyQImageToCvMatr9   X   s    
 "11&--2O2OPM!E!!#F



CKK"#
--RXX
&
.
.q/A
BCJ    c                 ,   [         R                  R                  U 5      SS  S:X  Ga/  / n[        R	                  U 5       n[        SUR                  5       H  nX#   n[        R                  SS5      nUR                  USS9nUR                  S:  d  UR                  S:  a$  UR                  [        R                  SS5      SS9n[        R                  " S	UR                  UR                  /UR                  5      n[        R                  " [         R"                  " U5      [        R$                  5      nUR'                  U5        M     S S S 5        U$ [        R(                  " U [        R*                  5      nUb  U/nW$ ! , (       d  f       U$ = f)
Npdfr      F)matrixalphai     RGB)ospathbasenamer   openrange	pageCountMatrix	getPixmapr-   r.   r   	frombytessamplescv2cvtColorr1   arrayCOLOR_RGB2BGRappendimreadIMREAD_COLOR)
image_fileimgsr=   pgpagematpmimgs           r8   	readImager[   h   s8   	ww
#BC(E1YYz"cAs}}-wkk!Q'^^3e^< 88d?bii$&6t{{1a/@NBooebhh		-BBJJOll288C=#2C2CDC  . #$ K	 jjS%5%56?5DK% #"$ Ks   DF
Fc                      ^  \ rS rSr\" \5      r\" \5      r\" 5       r\" \	5      r
SrU 4S jrS rS rS rS rS rS	 rS
 rS rSrU =r$ )Worker   Tc                    > [         [        U ]  5         Xl        X l        X0l        SU l        / U l        X@l        S U l	        SU l
        SU l        U R                  S5        g )NENr   i   )superr]   __init__
predictorssave_pdfvis_font_pathlang
imagePathsuse_pdf2docx_api	outputDirtotalPageCntpageCntsetStackSize)selfrc   rd   re   rh   	__class__s        r8   rb   Worker.__init__   sX    fd$&$ *	 0+&r:   c                     Xl         g N)rg   )rm   rg   s     r8   setImagePathWorker.setImagePath   s    $r:   c                     Xl         g rq   )rf   )rm   rf   s     r8   setLangWorker.setLang   s    	r:   c                     Xl         g rq   )ri   )rm   ri   s     r8   setOutputDirWorker.setOutputDir   s    "r:   c                     Xl         g rq   )rh   )rm   enableds     r8   setPDFParserWorker.setPDFParser   s     'r:   c                     SU l         g Nr   )rk   rm   s    r8   resetPageCntWorker.resetPageCnt   s	    r:   c                     SU l         g r   )rj   r   s    r8   resetTotalPageCntWorker.resetTotalPageCnt   s
    r:   c                    / nU =R                   [        U5      -  sl         U R                  R                  U R                   5        [	        U5       H  u  pEU R
                  U R                     " U5      u  pg[        X`R                  U5        UR                  u  pn
[        Xi5      nX6-  nU =R                  S-  sl        U R                  R                  U R                  5        M     U/ :w  a   [        XU R                  U5        [        SR!                  WS   5      5        [        SR!                  U R                  5      5        g ! [         a$  n[        SR!                  X+5      5         S nANkS nAff = f)NrA   z.error in layout recovery image:{}, err msg: {}zPredict time : {:.3f}sallzresult save to {})rj   lenprogressBarRangeemit	enumeraterc   rf   r   ri   shaper   rk   progressBarValuer   	Exceptionprintformat)rm   rU   img_nameall_resindexrZ   res	time_dicthw_exs               r8   ppocrPrecitorWorker.ppocrPrecitor   s6   SY&""4#4#45#D/JE!__TYY7<NC sNNH= iiGA!%c-CNGLLAL!!&&t||4 *" b=!$J 	&--i.>?@!((89  DKK  s   0E	 	
E7E22E7c                    U R                  5         U R                  5          [        R                  " U R                  SS9  [        U R                  5       GH/  u  pU R                  (       d    GOU R                  (       Gag  [        R                  R                  U5      SS  S:X  Ga@  [        S5        SSKJn  U =R                  S-  sl        U R                  R!                  U R                  5        [#        S	5        [        R                  R                  U5      R%                  S
5      S   n[        R                  R'                  U R                  SR)                  U5      5      nU" U5      nUR+                  U5        UR-                  5         [#        SR)                  U5      5        U =R.                  S-  sl        U R0                  R!                  U R.                  5        GM  [3        U5      n[5        U5      S:X  a  GM  [        R                  R                  U5      R%                  S
5      S   n[        R                  " [        R                  R'                  U R                  U5      SS9  U R7                  Xt5        GM2     U R8                  R!                  5         g ! [:         a.  nU R<                  R!                  [?        U5      5         S nAg S nAff = f)NTexist_okr<   r=   pdf2docxr   )	ConverterrA   z4===============using use_pdf2docx_api===============.z{}.docxzdocx save to {}) r   r   rC   makedirsri   r   rg   loopFlagrh   rD   rE   r   pdf2docx.converterr   rj   r   r   r   splitjoinr   convertcloserk   r   r[   r   r   	endsignalr   exceptedsignalstr)	rm   irT   r   r   	docx_filecvrU   es	            r8   run
Worker.run   s    !	-KK6!*4??!;}}(((RWW-=-=j-I"#-NRW-Wz*<%%*%))..t/@/@APQ!ww//
;AA#FqIH "T^^Y=M=Mh=W XI":.BJJy)HHJ+229=>LLA%L))..t||< %Z0D4yA~ !ww//
;AA#FqIHKKT^^X FQUV&&t65 "<8 NN! 	-$$SV,,	-s   JJ% %
K/$KK)	rg   rf   ri   rk   rc   rd   rj   rh   re   )__name__
__module____qualname____firstlineno__r   intr   r   r   r   r   r   rb   rr   ru   rx   r|   r   r   r   r   __static_attributes____classcell__rn   s   @r8   r]   r]      s_    c{c{IC[NH'%#(!:F$- $-r:   r]   c                   r   ^  \ rS rSrU 4S jrS rS rSS jrS rSS jr	S r
S	 rS
 rS rS rS rSrU =r$ )APP_Image2Doc   c                   > [         TU ]  5         / U l        S U l        SU l        S U l        [        R                  R                  [        SSS5      U l
        SU l        [        5       U l        U R                  R                  SS5        U R                  R                  S5        U R!                  5         U R#                  [$        5        U R#                  [&        5        U R)                  S5      U R)                  S5      S	.n[+        XR                  U R                  U R                  5      U l        U R,                  R.                  R1                  U R2                  5        U R,                  R4                  R1                  U R6                  5        U R,                  R8                  R1                  U R:                  5        U R,                  R<                  R1                  U R>                  5        SU l         g )
NFdocfontszsimfang.ttfr   d   r`   CN)r`   r   )!ra   rb   rg   
screenShotrd   
output_dirrC   rD   r   rootre   rh   r	   pbsetRangesetValuesetupUidownloadModelsURLs_ENURLs_CNinitPredictorr]   _threadr   connecthandleProgressBarUpdateSingalr   handleEndsignalSignalr   handleProgressBarRangeSingalr   handleThreadException
time_start)rm   rc   rn   s     r8   rb   APP_Image2Doc.__init__   st   
 WW\\$wN % .C  	 	G$G$ $$T*$$T*

 t'9'94;P;P
 	%%--d.P.PQ&&t'A'AB%%--d.O.OP##++D,F,FGr:   c                    U R                  S5        U R                  [        S-   [        -   5        [	        5       n[        S5      U l        U R                  R                  [        [        S5      5      5        UR                  U R                  SSSS5        U R                  R                  R                  U R                  5        [        S5      U l        U R                  R                  [        [        S5      5      5        UR                  U R                  SSSS5        U R                  R                  R                  [        R                   " U R"                  S	S
5      5        [        S5      U l        U R$                  R                  [        [        S5      5      5        UR                  U R$                  SSSS5        U R$                  R                  R                  [        R                   " U R"                  SS
5      5        [        SU 5      U l        UR                  U R&                  SSSS5        U R&                  R                  R                  [        R                   " U R"                  S	S5      5        [        S5      U l        U R(                  R                  [        [        S5      5      5        UR                  U R(                  SSSS5        U R(                  R                  R                  U R*                  5        UR                  U R,                  SSSS5        [/        S5      U l        UR                  U R0                  SSSS5        U R3                  U5        g )N
MainWindow u   打开文件z./icons/folder-plus.pngr   rA   u   中文转换z./icons/chinese.pngr   Fu   英文转换z./icons/english.pngr>   r`   u	   PDF解析   Tu   显示结果z./icons/folder-open.pngr)      zTime Left: --)setObjectNamesetWindowTitle__APPNAME____VERSION__r
   r   openFileButtonsetIconr   r   	addWidgetclickedr   handleOpenFileSignalstartCNButton	functoolspartialhandleStartSignalstartENButtonPDFParserButtonshowResultButtonhandleShowResultSignalr   r   timeEstLabel	setLayout)rm   layouts     r8   r   APP_Image2Doc.setupUi  s   <(K#-;<).9##E'2K*L$MN,,aAq9##++D,E,EF )8""51F)G#HI++Q1a8""**d44dEB	
 )8""51F)G#HI++Q1a8""**d44dEB	
  +;=--q!Q:$$,,d44dDA	
 !,N ;%%eG4M,N&OP..1a;%%--d.I.IJ 	!Q1-"O5**Aq!Q7vr:   c           	         / SQn[         R                  R                  [        S5      n[         R                  " USS9  UR                  5        GH  nX   n[        SR                  U5      5        UR                  S5      S   n[         R                  R                  X65      n[         R                  R                  U5      (       a  [        S5        O [        XW5         [        R                  " US
5       n	[         R                  R                  X45      n
[         R                  " U
SS9  U	R                  5        H  nS nU H  nXR                  ;   d  M  UnM     Uc  M&  U	R!                  U5      n[        [         R                  R                  X5      S5       nUR#                  UR%                  5       5        S S S 5        M     S S S 5        GM     g ! [         a!  n[        S	5        [        U5         S nAGNS nAff = f! , (       d  f       M  = f! , (       d  f       GM  = f! [         a"  n[        S5        [        U5         S nAGM  S nAff = f)N)zinference.pdiparamszinference.pdiparams.infozinference.pdmodelzmodel.pdiparamszmodel.pdiparams.infozmodel.pdmodel	inferenceTr   zTry downloading file: {}/zFile have already exist. skipz4Error occurred when downloading file, error message:rwbz1Error occurred when unziping file, error message:)rC   rD   r   r   r   keysr   r   r   existsr   r   tarfilerF   
getmembersnameextractfilewriteread)rm   URLstar_file_name_list
model_pathr   urltarnametarpathr   tarObjstorage_dirmemberfilenametar_file_namefilefs                   r8   r   APP_Image2Doc.downloadModelsM  s   
 WW\\$4

J. IIKD*C,33C89iinR(Gggll:7Gww~~g&&56-c;\\'3/6"$'',,z"@KKKd;"("3"3"5#'-?M,;+8 .@ $+$%11&9!"'',,{"EtLPQGGDIIK0 ML #6 0/!   ! PQ!HH" ML 0/  IJasn   G H)7AHAH H	<HH)
H G<<H
HH
H&	 H)&H))
I3IIc           	         [        5       nSUl        SUl        SUl        U R                  Ul        [
        R                  R                  [        SSSS5      Ul	        US:X  a  [
        R                  R                  [        SS	5      Ul
        [
        R                  R                  [        SS
5      Ul        [
        R                  R                  [        SS5      Ul        [
        R                  R                  [        S5      Ul        [
        R                  R                  [        SS5      Ul        [        nOUS:X  a  [
        R                  R                  [        SS5      Ul
        [
        R                  R                  [        SS5      Ul        [
        R                  R                  [        SS5      Ul        [
        R                  R                  [        S5      Ul        [
        R                  R                  [        SS5      Ul        [         nO[#        S5      e[
        R                  R                  [        SSUS   5      Ul        [
        R                  R                  [        SSSSUS   5      Ul        [)        U5      $ )Ni  Tppocrutilsdictztable_structure_dict.txtr`   r   r   r   r   outputr    r   r#   r$   r%   r&   zUnsupported languager!   layout_dictr"   )r   table_max_lenocrrecoveryrd   rC   rD   r   r   table_char_dict_pathdet_model_dirrec_model_dirtable_model_dirr  layout_model_dirDICT_ENDICT_CN
ValueErrorr!   r"   r   )rm   rf   args	lang_dicts       r8   r   APP_Image2Doc.initPredictor|  s   | $&GGLL'7F,F%
! 4<!#k#:"D "$k#:"D $&77<<k#L$D  '',,tX6DK$&GGLLk#H%D!  IT\!#k#:"D "$k#:"D $&77<<k#L$D  '',,tX6DK$&GGLLk#M%D!  I344"$'',,'7I.B$C#
 !#'7FM9EW;X!
 t$$r:   c                     [         R                  " U SSS5      S   n[        U5      S:  a)  Xl        SU l        U R
                  R                  S5        gg)u   
可以多选图像文件
u   多文件选择r   u-   图片文件 (*.png *.jpeg *.jpg *.bmp *.pdf)r   N)r   getOpenFileNamesr   rg   r   r   r   )rm   selectedFiless     r8   r   "APP_Image2Doc.handleOpenFileSignal  sY     $44#S*Y

 }!+O"DOGGQ "r:   c                    U R                   (       a  S[        R                  " S[        R                  " 5       5      -   n[	        U R                   5      nU R                  XCU5        U R                  R                  S5        [        R                  " U SS5        g [        U R                  5      S:  Ga  [        R                  R                  [        R                  R                  U R                  S   5      S5      U l        U R"                  R%                  U R                   5        U R"                  R'                  U R                  5        U R"                  R)                  U5        U R"                  R+                  U5        U R,                  R/                  S5        U R0                  R/                  S5        U R2                  R/                  S5        U R4                  R/                  S5        U R"                  R7                  5         [        R                  " 5       U l        [        R                  " U SS	5        g [        R:                  " U SS
5        g )Nscreenshot_z%Y%m%d%H%M%SrA   Informationu   文档提取完成r   r  Fu   开始转换u$   请选择要识别的文件或截图)r   timestrftime	localtimer9   predictAndSaver   r   r   informationr   rg   rC   rD   r   dirnamer   r   rx   rr   ru   r|   r   
setEnabledr   r   r   startr   warning)rm   rf   	pdfParserr   images        r8   r   APP_Image2Doc.handleStartSignal  s   ??$t}}^T^^EU'VVH!$//2E6GGQ##D-9MN!A% ggll 23XDO LL%%doo6LL%%doo6LL  &LL%%i0**51))%0))%0  ++E2LL "iikDO##D-Hm5[\r:   c                    U R                   c  g [        R                  R                  U R                   5      (       a{  [        R
                  " 5       S:X  a!  [        R                  " U R                   5        g [        R
                  " S[        R                  R                  U R                   5      -   5        g [        R                  " U SS5        g )NWindowszopen r%  u   输出文件不存在)
r   rC   rD   r   platformsystem	startfilenormpathr   r*  r   s    r8   r   $APP_Image2Doc.handleShowResultSignal  s|    ??"77>>$//** I-T__-		'BGG$4$4T__$EEF##D-9PQr:   c                 \   U R                   R                  U5        U R                   R                  5       n[        R                  " 5       U R                  -
  U-  n[        [        R                  " X2U-
  -  S95      R                  S5      S   nU R                  R                  SU 35        g )N)secondsr   r   zTime Left: )r   r   maximumr&  r   r   datetime	timedeltar   r   setText)rm   r   lenbaravg_time	time_lefts        r8   r   +APP_Image2Doc.handleProgressBarUpdateSingal  s    "IIK$//) **8z3JKLRRSVW
	 	!!K	{";<r:   c                 <    U R                   R                  SU5        g r   )r   r   )rm   maxs     r8   r   *APP_Image2Doc.handleProgressBarRangeSingal  s    C r:   c                    U R                   R                  S5        U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        [
        R                  " U SS5        g )NTr%  u   转换结束)r   r,  r   r   r   r   r*  r   s    r8   r   #APP_Image2Doc.handleEndsignalSignal  sd    &&t,%%d+%%d+''-m^Dr:   c                 j    U R                   R                  U R                  R                  5       5        g rq   )r   r|   checkBox	isCheckedr   s    r8   handleCBChangeSignal"APP_Image2Doc.handleCBChangeSignal  s!    !!$--"9"9";<r:   c                 h    U R                   R                  5         [        R                  " U SU5        g )NError)r   quitr   r*  )rm   messages     r8   r   #APP_Image2Doc.handleThreadException	  s$    gw7r:   )r   r   rg   r   r   r   rd   r   r   r   r   r   r   rh   re   )r`   )r`   F)r   r   r   r   rb   r   r   r   r   r   r   r   r   r   rK  r   r   r   r   s   @r8   r   r      sK    )V/b-^1%f
 0]:	R
=!E=8 8r:   r   c                      [        [        R                  5      n [        5       nUR	                  5         [         R
                  " 5         [        R                  " U R                  5       5        g rq   )r   sysargvr   showprocessEventsexitexec)appwindows     r8   mainr[    s>    
sxx
 C_F
KKM HHSXXZr:   __main__)CrS  r   rC   r&  r<  r   rM   r4  numpyr1   paddle.utilsr   r   PILr   qtpy.QtWidgetsr   r   r   r	   r
   r   r   r   r   qtpy.QtCorer   r   r   
qtpy.QtGuir   r   r   rD   r+  abspath__file__r  r   r   rQ   insertppstructure.predict_systemr   r   ppstructure.utilityr   r   ppocr.utils.networkr   $ppstructure.recovery.recovery_to_docr   r   r   r   r   r  r   r  rO   r9   listr[   r]   r   r[  r    r:   r8   <module>rl     sr     	    
   #& 
 
 
 1 0 - -	wwrwwx01	wwrww||D(34   4  J A 9 W  ji 0c ,O	 (3 ji 0c 1Y	 ..BHH  T 0m-W m-`[8G [8| zF r:   