Ë
    \;jg•  ã                   ó8  — d dl Z d dlZd dlZe j                  j	                  e«      Zd dlZd dlm	Z	 ej                  j                  e j                  j                  ed«      «       d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlZd dlmZ d dlmZ dd„Z ed	e j                  j                  ed
«      d¬«      Z ej8                  dd«      Z ej8                  dd«      Zd dlm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5  e «       Z6g d¢Z7dgZ8ddgZ9e j                  ju                  d«      Z;dZ<g d¢Z=dZ>ddgZ?dd idd!idd"id#œd$d%d&œd'd(d&œd)d*d&œd+d,d&œd-d.d&œd/d0d&œd1d2d&œd3d4d&œd5d6d&œd7d8d&œd9d:d&œd;d<d&œd=œd>dd?iid@œddAidd!idd"id#œdBd%d&œdCd(d&œdDd*d&œdEd,d&œd-d.d&œdFd0d&œdGd2d&œdHd4d&œd5d6d&œdId8d&œd9d:d&œdJd<d&œd=œd>dd?iid@œd>ddKiid>dLd%d&œid>dd?iid@œddMiddNiddOidPœdQd%d&œdRd(d&œdSdTd&œdUdVd&œdWd*d&œdXd,d&œdYd.d&œdZd0d&œd[d2d&œd\d4d&œd]d6d&œd^d8d&œd_d:d&œd`d<d&œdadbd&œdcœd>dd?iid@œddœdedfdgdhd&œiididhd&œdjdkd&œdlœdmdnd&œdodpd&œdlœdqœdrœdsœZ@d€dt„ZAdu„ ZBdv„ ZCdweDfdx„ZEd�dy„ZF G dz„ d{ejŽ                  «      ZH G d|„ d}e3«      ZId~„ ZJy)‚é    N)Ú
try_importÚ )ÚPath)ÚBytesIO)ÚImage)Úpredict_systemc                 óä   — t         j                  j                  | |«      }t         j                  j                  |«      }|j                  j                  |«       |r|t        j                  | <   |S ©N)Ú	importlibÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚexec_moduleÚsysÚmodules)Úmodule_nameÚ	file_pathÚmake_importableÚspecÚmodules        ú\G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddleocr/paddleocr.pyÚ_import_filer   %   sT   € Ü�>‰>×1Ñ1°+¸yÓI€DÜ�^‰^×,Ñ,¨TÓ2€FØ‡K�K×Ñ˜FÔ#ÙØ#)Œ�‰�KÑ Ø€Mó    Útoolsztools/__init__.pyT)r   ÚppocrÚ	paddleocrÚppstructure)Ú
get_logger)Úcheck_and_readÚget_image_file_listÚalpha_to_colorÚbinarize_img)Úmaybe_downloadÚdownload_with_progressbarÚis_linkÚconfirm_model_dir_url)Údraw_ocrÚstr2boolÚ	check_gpu)Ú	init_argsÚdraw_structure_result)ÚStructureSystemÚsave_structure_resÚto_excel)Ú	PaddleOCRÚPPStructurer(   r,   r.   r%   r/   ÚDBÚCRNNÚ
SVTR_LCNetz~/.paddleocr/úPP-OCRv4)úPP-OCRúPP-OCRv2úPP-OCRv3r5   úPP-StructureV2úPP-StructureÚurlzJhttps://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tarzJhttps://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tarzYhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/Multilingual_PP-OCRv3_det_infer.tar)ÚchÚenÚmlzJhttps://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tarz./ppocr/utils/ppocr_keys_v1.txt)r;   Ú	dict_pathzJhttps://paddleocr.bj.bcebos.com/PP-OCRv4/english/en_PP-OCRv4_rec_infer.tarz./ppocr/utils/en_dict.txtzShttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/korean_PP-OCRv4_rec_infer.tarz"./ppocr/utils/dict/korean_dict.txtzRhttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/japan_PP-OCRv4_rec_infer.tarz!./ppocr/utils/dict/japan_dict.txtzXhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/chinese_cht_PP-OCRv3_rec_infer.tarz'./ppocr/utils/dict/chinese_cht_dict.txtzOhttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/ta_PP-OCRv4_rec_infer.tarz./ppocr/utils/dict/ta_dict.txtzOhttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/te_PP-OCRv4_rec_infer.tarz./ppocr/utils/dict/te_dict.txtzOhttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/ka_PP-OCRv4_rec_infer.tarz./ppocr/utils/dict/ka_dict.txtzRhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/latin_PP-OCRv3_rec_infer.tarz!./ppocr/utils/dict/latin_dict.txtzShttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/arabic_PP-OCRv4_rec_infer.tarz"./ppocr/utils/dict/arabic_dict.txtzUhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/cyrillic_PP-OCRv3_rec_infer.tarz$./ppocr/utils/dict/cyrillic_dict.txtzWhttps://paddleocr.bj.bcebos.com/PP-OCRv4/multilingual/devanagari_PP-OCRv4_rec_infer.tarz&./ppocr/utils/dict/devanagari_dict.txt)r<   r=   ÚkoreanÚjapanÚchinese_chtÚtaÚteÚkaÚlatinÚarabicÚcyrillicÚ
devanagarir<   zRhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar)ÚdetÚrecÚclszJhttps://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.tarzJhttps://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tarzShttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/korean_PP-OCRv3_rec_infer.tarzRhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/japan_PP-OCRv3_rec_infer.tarzOhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/ta_PP-OCRv3_rec_infer.tarzOhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/te_PP-OCRv3_rec_infer.tarzOhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/ka_PP-OCRv3_rec_infer.tarzShttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/arabic_PP-OCRv3_rec_infer.tarzWhttps://paddleocr.bj.bcebos.com/PP-OCRv3/multilingual/devanagari_PP-OCRv3_rec_infer.tarzJhttps://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tarzJhttps://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tarzRhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tarz\https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_ppocr_mobile_v2.0_det_infer.tarz[https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_det_infer.tar)r<   r=   Ú	structurezRhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tarz]https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_infer.tarzZhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/french_mobile_v2.0_rec_infer.tarz"./ppocr/utils/dict/french_dict.txtzZhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/german_mobile_v2.0_rec_infer.tarz"./ppocr/utils/dict/german_dict.txtzZhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_infer.tarzYhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_infer.tarz_https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/chinese_cht_mobile_v2.0_rec_infer.tarzVhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/ta_mobile_v2.0_rec_infer.tarzVhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/te_mobile_v2.0_rec_infer.tarzVhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/ka_mobile_v2.0_rec_infer.tarz_https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/latin_ppocr_mobile_v2.0_rec_infer.tarz`https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/arabic_ppocr_mobile_v2.0_rec_infer.tarzbhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/cyrillic_ppocr_mobile_v2.0_rec_infer.tarzdhttps://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/devanagari_ppocr_mobile_v2.0_rec_infer.tarz[https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_rec_infer.tarzppocr/utils/dict/table_dict.txt)r<   r=   ÚfrenchÚgermanr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rM   )r5   r8   r7   r6   Útabler=   zahttps://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tarz)ppocr/utils/dict/table_structure_dict.txtzehttps://paddleocr.bj.bcebos.com/ppstructure/models/slanet/en_ppstructure_mobile_v2.0_SLANet_infer.tarzehttps://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tarz,ppocr/utils/dict/table_structure_dict_ch.txt)r=   r<   zahttps://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tarz6ppocr/utils/dict/layout_dict/layout_publaynet_dict.txtzfhttps://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_cdla_infer.tarz1ppocr/utils/dict/layout_dict/layout_cdla_dict.txt)rP   Úlayout)r:   r9   )ÚOCRÚ	STRUCTUREc                 ó‚  — dd l }t        «       }| |_        |j                  dt        d¬«       |j                  dt
        d¬«       |j                  dt
        d¬«       |j                  dt        d	¬«       |j                  d
t
        d¬«       |j                  dt        t        dd¬«       |j                  dt        t        dd¬«       |j                  D ]  }|j                  dv sŒd |_
        Œ | r|j                  «       S i }|j                  D ]  }|j                  ||j                  <   Œ  |j                  di |¤ŽS )Nr   z--langr<   )ÚtypeÚdefaultz--detTz--recz--typeÚocrz
--savefileFz--ocr_versionr5   aU  OCR Model version, the current model support list is as follows: 1. PP-OCRv4/v3 Support Chinese and English detection and recognition model, and direction classifier model2. PP-OCRv2 Support Chinese detection and recognition model. 3. PP-OCR support Chinese detection, recognition and direction classifier and multilingual recognition model.)rU   ÚchoicesrV   Úhelpz--structure_versionr9   z©Model version, the current model support list is as follows: 1. PP-Structure Support en table structure model. 2. PP-StructureV2 Support ch and en table structure model.)Úrec_char_dict_pathÚtable_char_dict_pathÚlayout_dict_path© )Úargparser+   Úadd_helpÚadd_argumentÚstrr)   ÚSUPPORT_OCR_MODEL_VERSIONÚSUPPORT_STRUCTURE_MODEL_VERSIONÚ_actionsÚdestrV   Ú
parse_argsÚ	Namespace)ÚmMainr^   ÚparserÚactionÚinference_args_dicts        r   rf   rf   i  sD  € Ûä‹[€FØ€F„OØ
×Ñ˜¤s°DÐÔ9Ø
×Ñ˜¤h¸ÐÔ=Ø
×Ñ˜¤h¸ÐÔ=Ø
×Ñ˜¤s°EÐÔ:Ø
×Ñ˜¬8¸UÐÔCØ
×ÑØÜÜ)Øðxð ô 	ð ×ÑØÜÜ/Ø ðFð ô ð —/”/ˆØ�;‰;ð 
ò 
ð
 "ˆF�Nð "ñ Ø× Ñ Ó"Ð"à ÐØ—o”oˆFØ/5¯~©~Ð §¡Ò,ð &à!ˆx×!Ñ!Ñ8Ð$7Ñ8Ð8r   c                 ó:  — g d¢}g d¢}g d¢}g d¢}| |v rd} n| |v rd} n| |v rd} n| |v rd} | t         d	   t           d
   v s6J dj                  t         d	   t           d
   j                  «       | «      «       ‚| dk(  rd}| |fS | dk(  rd}| |fS | dv rd}| |fS d}| |fS )N)*ÚafÚazÚbsÚcsÚcyÚdaÚdeÚesÚetÚfrÚgaÚhrÚhuÚidÚisÚitÚkuÚlaÚltÚlvÚmiÚmsÚmtÚnlÚnoÚocÚpiÚplÚptÚroÚrs_latinÚskÚslÚsqÚsvÚswÚtlÚtrÚuzÚvirN   rO   )ÚarÚfaÚugÚur)ÚruÚrs_cyrillicÚbeÚbgÚukÚmnÚabqÚadyÚkbdÚavaÚdarÚinhÚcheÚlbeÚlezÚtab)ÚhiÚmrÚneÚbhÚmaiÚangÚbhoÚmahÚsckÚnewÚgomÚsaÚbgcrF   rG   rH   rI   rR   rK   z!param lang must in {}, but got {}r<   rM   )r=   rF   r=   r>   )Ú
MODEL_URLSÚDEFAULT_OCR_MODEL_VERSIONÚformatÚkeys)ÚlangÚ
latin_langÚarabic_langÚcyrillic_langÚdevanagari_langÚdet_langs         r   Ú
parse_langrÀ   —  s  € ò+€JòX +€Kò€Mò$€Oð ˆzÑØ‰Ø	�Ñ	Ø‰Ø	�Ñ	Ø‰Ø	�Ñ	 Øˆà”
˜5Ñ!Ô";Ñ<¸UÑCÑCðà*×1Ñ1Ü�5ÑÔ3Ñ4°UÑ;×@Ñ@ÓBÀDóóØCð ˆt‚|Øˆð �ˆ>Ðð 
�Ò	Øˆð
 �ˆ>Ðð	 
�Ñ	 Øˆð �ˆ>Ðð ˆØ�ˆ>Ðr   c                 óö  — | dk(  rt         }n| dk(  rt        }nt        ‚t        |    }||vr|}|||   vrU|||   v r|}nKt        j                  dj                  |||   j                  «       «      «       t        j                  d«       |||   |   vr\|||   |   v r|}nOt        j                  dj                  |||   |   j                  «       |«      «       t        j                  d«       ||   |   |   S )NrR   rS   z,{} models is not support, we only support {}éÿÿÿÿz8lang {} is not support, we only support {} for {} models)
r·   ÚDEFAULT_STRUCTURE_MODEL_VERSIONÚNotImplementedErrorr¶   ÚloggerÚerrorr¸   r¹   r   Úexit)rU   ÚversionÚ
model_typerº   ÚDEFAULT_MODEL_VERSIONÚ
model_urlss         r   Úget_model_configrÌ   þ  s  € Øˆu‚}Ü 9ÑØ	�Ò	Ü ?Ñä!Ð!ä˜DÑ!€JØ�jÑ Ø'ˆØ˜ GÑ,Ñ,Ø˜Ð$9Ñ:Ñ:Ø+‰Gä�L‰LØ>×EÑEØ 
Ð+@Ñ A× FÑ FÓ Hóôô
 �H‰H�RŒLà�:˜gÑ& zÑ2Ñ2Ø�:Ð3Ñ4°ZÑ@Ñ@Ø+‰Gä�L‰LØJ×QÑQØØÐ4Ñ5°jÑA×FÑFÓHØóôô �H‰H�RŒLØ�gÑ˜zÑ*¨4Ñ0Ð0r   Úcontentc                 ó”   — t        j                  | t         j                  ¬«      }t        j                  |t        j
                  «      S )N)Údtype)ÚnpÚ
frombufferÚuint8Úcv2ÚimdecodeÚIMREAD_UNCHANGED)rÍ   Únp_arrs     r   Ú
img_decoder×   #  s-   € Ü�]‰]˜7¬"¯(©(Ô3€FÜ�<‰<˜¤× 4Ñ 4Ó5Ð5r   c                 ó&  — d\  }}t        | t        «      rt        | «      } t        | t        «      �ryt	        | «      rt        | d«       d} | }t        |«      \  } }}|�s!|�st        |d«      5 }|j                  «       }t        |«      } ddd«       | €ì	 t        «       }t        «      }t        j                  |«      }	|	j                  d«      }
|
j                  |d«       |j                  d«       |j                  «       }t        t        j                  |«      d¬	«      }t        j                   |«      }t#        j$                  |t"        j&                  «      }t)        j*                  |t(        j,                  «      } | €)t.        j1                  d
j3                  |«      «       d||fS t        | t"        j4                  «      r<t7        | j8                  «      dk(  r$t)        j:                  | t(        j<                  «      } t        | t"        j4                  «      r6t7        | j8                  «      dk(  r| j8                  d   dk(  rt?        | |«      } | ||fS # 1 sw Y   �ŒÎxY w#  t.        j1                  d
j3                  |«      «       d||fcY S xY w)u°  
    Check the image data. If it is another type of image file, try to decode it into a numpy array.
    The inference network requires three-channel images, So the following channel conversions are done
        single channel image: Gray to RGB Râ†�Y,Gâ†�Y,Bâ†�Y
        four channel image: alpha_to_color
    args:
        img: image data
            file format: jpg, png and other image formats that opencv can decode, as well as gif and pdf formats
            storage type: binary image, net image file, local image file
        alpha_color: Background color in images in RGBA format
        return: numpy.array (h, w, 3) or list (p, h, w, 3) (p: page of pdf), boolean, boolean
    )FFútmp.jpgÚrbNÚRGBÚjpegr   úutf-8©Úencodingúerror in loading image:{}é   é   é   ) Ú
isinstanceÚbytesr×   ra   r&   r%   r    ÚopenÚreadr   r   ÚconvertÚsaveÚseekÚbase64Ú	b64encodeÚ	b64decoderÐ   rÑ   rÒ   rÓ   rÔ   ÚIMREAD_COLORrÅ   rÆ   r¸   ÚndarrayÚlenÚshapeÚcvtColorÚCOLOR_GRAY2BGRr"   )ÚimgÚalpha_colorÚflag_gifÚflag_pdfÚ
image_fileÚfÚimg_strÚbufÚimageÚimÚrgbÚimage_bytesÚdata_base64Úimage_decodeÚ	img_arrays                  r   Ú	check_imgr  (  s  € ð &Ñ€HˆhÜ�#”uÔÜ˜‹oˆÜ�#”sÕä�3Œ<Ü% c¨9Ô5ØˆCØˆ
Ü"0°Ó"<ÑˆˆX�xÚ¢Ü�j $Ô'¨1ØŸ&™&›(�Ü  Ó)�÷ (ð ˆ{ð4Ü!›)�CÜ# GÓ,�EÜŸ™ EÓ*�BØŸ*™* UÓ+�CØ—H‘H˜S &Ô)Ø—H‘H˜Q”KØ"%§(¡(£*�KÜ"%¤f×&6Ñ&6°{Ó&CÈgÔ"V�KÜ#)×#3Ñ#3°KÓ#@�LÜ "§¡¨l¼B¿H¹HÓ E�IÜŸ,™, y´#×2BÑ2BÓC�Cð ˆ;Ü�L‰LÐ4×;Ñ;¸JÓGÔHØ˜ 8Ð+Ð+ä�#”r—z‘zÔ"¤s¨3¯9©9£~¸Ò':Ü�l‰l˜3¤× 2Ñ 2Ó3ˆä�#”r—z‘zÔ"¤s¨3¯9©9£~¸Ò':¸s¿y¹yÈ¹|ÈqÒ?PÜ˜S +Ó.ˆØ�˜(Ð"Ð"÷9 (Ñ'ûð 4Ü—L‘LÐ!<×!CÑ!CÀJÓ!OÔPØ ¨8Ð3Ò3ús   Á.IÂC+I# ÉI É#+Jc                   ó4   ‡ — e Zd Zˆ fd„Zddddddi fd„Zˆ xZS )r0   c           	      óÈ  •— t        d¬«      } |j                  j                  di |¤Ž |j                  t        v s%J dj                  t        |j                  «      «       ‚t        |j                  «      |_        |j                  s#t        j                  t        j                  «       |j                  | _        t        |j                  «      \  }}t!        d|j                  d|«      }t#        |j$                  t&        j(                  j+                  t,        dd|«      |d   «      \  |_        }t!        d|j                  d|«      }t#        |j.                  t&        j(                  j+                  t,        dd|«      |d   «      \  |_        }t!        d|j                  d	d
«      }	t#        |j0                  t&        j(                  j+                  t,        dd	«      |	d   «      \  |_        }
|j                  dv rd|_        nd|_        |j4                  sBt7        |j$                  |«       t7        |j.                  |«       t7        |j0                  |
«       |j8                  t:        vr=t        j=                  dj                  t:        «      «       t?        j@                  d«       |jB                  tD        vr=t        j=                  dj                  tD        «      «       t?        j@                  d«       |jF                  €-tI        tK        tL        «      jN                  |d   z  «      |_#        t        jQ                  |«       tR        ‰| �©  |«       |jV                  | _+        y)zm
        paddleocr package
        args:
            **kwargs: other params show in paddleocr --help
        F©rh   z"ocr_version must in {}, but get {}rR   rJ   Úwhlr;   rK   rL   r<   )r8   r5   z
3, 48, 320z
3, 32, 320zdet_algorithm must in {}r   zrec_algorithm must in {}Nr?   r]   ),rf   Ú__dict__ÚupdateÚocr_versionrb   r¸   r*   Úuse_gpuÚshow_logrÅ   ÚsetLevelÚloggingÚINFOÚuse_angle_clsrÀ   rº   rÌ   r'   Údet_model_dirÚosÚpathÚjoinÚBASE_DIRÚrec_model_dirÚcls_model_dirÚrec_image_shapeÚuse_onnxr$   Údet_algorithmÚSUPPORT_DET_MODELrÆ   r   rÇ   Úrec_algorithmÚSUPPORT_REC_MODELrZ   ra   r   Ú__file__ÚparentÚdebugÚsuperÚ__init__Úpage_num)ÚselfÚkwargsÚparamsrº   r¿   Údet_model_configÚdet_urlÚrec_model_configÚrec_urlÚcls_model_configÚcls_urlÚ	__class__s              €r   r"  zPaddleOCR.__init__`  s­  ø€ ô  %Ô(ˆØˆ�‰×ÑÑ( Ò(à×ÑÔ";Ñ;ð	
à/×6Ñ6Ü% v×'9Ñ'9ó
ó	
Ø;ô # 6§>¡>Ó2ˆŒà�ŠÜ�O‰OœGŸL™LÔ)Ø#×1Ñ1ˆÔÜ# F§K¡KÓ0‰ˆˆhô ,¨E°6×3EÑ3EÀuÈhÓWÐÜ(=Ø× Ñ Ü�G‰G�L‰Lœ 5¨%°Ó:Ø˜UÑ#ó)
Ñ%ˆÔ˜gô
 ,¨E°6×3EÑ3EÀuÈdÓSÐÜ(=Ø× Ñ Ü�G‰G�L‰Lœ 5¨%°Ó6Ø˜UÑ#ó)
Ñ%ˆÔ˜gô
 ,¨E°6×3EÑ3EÀuÈdÓSÐÜ(=Ø× Ñ Ü�G‰G�L‰Lœ 5¨%Ó0Ø˜UÑ#ó)
Ñ%ˆÔ˜gð
 ×ÑÐ!9Ñ9Ø%1ˆFÕ"à%1ˆFÔ"à�ŠÜ˜6×/Ñ/°Ô9Ü˜6×/Ñ/°Ô9Ü˜6×/Ñ/°Ô9à×ÑÔ'8Ñ8Ü�L‰LÐ3×:Ñ:Ô;LÓMÔNÜ�H‰H�QŒKØ×ÑÔ'8Ñ8Ü�L‰LÐ3×:Ñ:Ô;LÓMÔNÜ�H‰H�QŒKà×$Ñ$Ð,Ü(+Ü”X“×%Ñ%Ð(8¸Ñ(EÑEó)ˆFÔ%ô 	�‰�VÔä‰Ñ˜Ô ØŸ™ˆ�r   TF©éÿ   r/  r/  c	                 óN  ‡‡‡— t        |t        j                  t        t        t
        f«      sJ ‚t        |t        «      r%|dk(  r t        j                  d«       t        d«       |dk(  r$| j                  dk(  rt        j                  d«       t        |‰«      \  }}	}
t        |t        «      r<|
r:| j                  t        |«      kD  s| j                  dk(  r|}n|d| j                   }n|g}ˆˆˆfd„}|r�|r‹g }t        |«      D ]y  \  }} ||«      }| j                  |||«      \  }}}|s|s|j!                  d«       Œ;t#        ||«      D ��cg c]  \  }}|j%                  «       |g‘Œ }}}|j!                  |«       Œ{ |S |r„|s‚g }t        |«      D ]p  \  }} ||«      }| j'                  |«      \  }}|j(                  dk(  r|j!                  d«       ŒC|D �cg c]  }|j%                  «       ‘Œ }}|j!                  |«       Œr |S g }g }t        |«      D ]{  \  }}t        |t        «      s ||«      }|g}| j                  r*|r(| j+                  |«      \  }}}|s|j!                  |«       | j-                  |«      \  }}|j!                  |«       Œ} |s|S |S c c}}w c c}w )aB  
        OCR with PaddleOCR

        args:
            img: img for OCR, support ndarray, img_path and list or ndarray
            det: use text detection or not. If False, only rec will be exec. Default is True
            rec: use text recognition or not. If False, only det will be exec. Default is True
            cls: use angle classifier or not. Default is True. If True, the text with rotation of 180 degrees can be recognized. If no text is rotated by 180 degrees, use cls=False to get better performance. Text with rotation of 90 or 270 degrees can be recognized even if cls=False.
            bin: binarize image to black and white. Default is False.
            inv: invert image colors. Default is False.
            alpha_color: set RGB color Tuple for transparent parts replacement. Default is pure white.
            slice: use sliding window inference for large images, det and rec must be True. Requires int values for slice["horizontal_stride"], slice["vertical_stride"], slice["merge_x_thres"], slice["merge_y_thres] (See doc/doc_en/slice_en.md). Default is {}.
        Tz.When input a list of images, det must be falser   Fz]Since the angle classifier is not initialized, it will not be used during the forward processNc                 óh   •— t        | ‰«      } ‰rt        j                  | «      } ‰rt        | «      } | S r
   )r"   rÓ   Úbitwise_notr#   )Ú_imagerõ   ÚbinÚinvs    €€€r   Úpreprocess_imagez'PaddleOCR.ocr.<locals>.preprocess_imageÍ  s2   ø€ Ü# F¨KÓ8ˆFÙÜŸ™¨Ó0�ÙÜ% fÓ-�ØˆMr   )rä   rÐ   rï   Úlistra   rå   rÅ   rÆ   rÇ   r  Úwarningr  r#  rð   Ú	enumerateÚ__call__ÚappendÚzipÚtolistÚtext_detectorÚsizeÚtext_classifierÚtext_recognizer)r$  rô   rJ   rK   rL   r4  r5  rõ   Úslicerö   r÷   Úimgsr6  Úocr_resÚidxÚdt_boxesÚrec_resÚ_ÚboxÚresÚtmp_resÚelapseÚcls_resÚcls_res_tmps        ```                r   rW   zPaddleOCR.ocr¢  s  ú€ ô0 ˜#¤§
¡
¬D´#´uÐ=Ô>Ð>Ð>Ü�cœ4Ô  S¨D¢[Ü�L‰LÐIÔJÜ�ŒGØ�$Š;˜4×-Ñ-°Ò6Ü�N‰NØoôô #,¨C°Ó"=ÑˆˆX�xä�cœ4Ô ¡XØ�}‰}œs 3›xÒ'¨4¯=©=¸AÒ+=Ø‘à˜?˜TŸ]™]Ð+‘à�5ˆDö	ñ ‘3ØˆGÜ% džO‘��SÙ& sÓ+�Ø'+§}¡}°S¸#¸uÓ'EÑ$�˜' 1Ù©Ø—N‘N 4Ô(ØÜ?BÀ8ÈWÔ?UÔVÑ?U±8°3¸˜CŸJ™J›L¨#Ò.Ð?U�ÑVØ—‘˜wÕ'ð ,ð ˆNÙ™ØˆGÜ% džO‘��SÙ& sÓ+�Ø#'×#5Ñ#5°cÓ#:Ñ �˜&Ø—=‘= AÒ%Ø—N‘N 4Ô(ØÙ3;Ó<±8¨C˜3Ÿ:™:�<°8�Ð<Ø—‘˜wÕ'ð ,ð ˆNàˆGØˆGÜ% džO‘��SÜ! #¤tÔ,Ù*¨3Ó/�CØ˜%�CØ×%Ò%©#Ø/3×/CÑ/CÀCÓ/HÑ,�C˜ fÙØŸ™ {Ô3Ø"&×"6Ñ"6°sÓ";‘�˜Ø—‘˜wÕ'ð ,ñ Ø�ØˆNùó; Wùò =s   ÅJÇJ")Ú__name__Ú
__module__Ú__qualname__r"  rW   Ú__classcell__©r-  s   @r   r0   r0   _  s'   ø„ ô@(ðJ ØØØØØ#Ø÷Xr   r0   c                   ó0   ‡ — e Zd Zˆ fd„Z	 	 	 dˆ fd„	Zˆ xZS )r1   c           	      ó&  •— t        d¬«      } |j                  j                  di |¤Ž |j                  t        v s%J dj                  t        |j                  «      «       ‚t        |j                  «      |_        d|_        |j                  s#t        j                  t        j                  «       t        |j                  «      \  }}|dk(  rd}nd}|j                  dk(  rd|_        t#        d|j$                  d	|«      }t'        |j(                  t*        j,                  j/                  t0        d
d	|«      |d   «      \  |_        }t#        d|j$                  d|«      }t'        |j2                  t*        j,                  j/                  t0        d
d|«      |d   «      \  |_        }	t#        d|j                  d|«      }
t'        |j4                  t*        j,                  j/                  t0        d
d«      |
d   «      \  |_        }t#        d|j                  d|«      }t'        |j6                  t*        j,                  j/                  t0        d
d«      |d   «      \  |_        }|j8                  sXt;        |j(                  |«       t;        |j2                  |	«       t;        |j4                  |«       t;        |j6                  |«       |j<                  €-t?        tA        tB        «      jD                  |d   z  «      |_        |jF                  €-t?        tA        tB        «      jD                  |
d   z  «      |_#        |jH                  €-t?        tA        tB        «      jD                  |d   z  «      |_$        t        jK                  |«       tL        ‰| ��  |«       y )NFr  z(structure_version must in {}, but get {}rM   r<   r=   r:   rR   rJ   r  r;   rK   rS   rP   rQ   r?   r]   )(rf   r  r	  Ústructure_versionrc   r¸   r*   r  Úmoder  rÅ   r  r  r  rÀ   rº   Úmerge_no_span_structurerÌ   r
  r'   r  r  r  r  r  r  Útable_model_dirÚlayout_model_dirr  r$   rZ   ra   r   r  r  r[   r\   r   r!  r"  )r$  r%  r&  rº   r¿   Ú
table_langr'  r(  r)  r*  Útable_model_configÚ	table_urlÚlayout_model_configÚ
layout_urlr-  s                 €r   r"  zPPStructure.__init__þ  s  ø€ Ü %Ô(ˆØˆ�‰×ÑÑ( Ò(à×$Ñ$Ô(GÑGð	
à5×<Ñ<Ü+¨V×-EÑ-Eó
ó	
ØGô # 6§>¡>Ó2ˆŒØ!ˆŒà�ŠÜ�O‰OœGŸL™LÔ)Ü# F§K¡KÓ0‰ˆˆhØ�4Š<Ø‰JàˆJØ×#Ñ# ~Ò5Ø-2ˆFÔ*ô ,¨E°6×3EÑ3EÀuÈhÓWÐÜ(=Ø× Ñ Ü�G‰G�L‰Lœ 5¨%°Ó:Ø˜UÑ#ó)
Ñ%ˆÔ˜gô
 ,¨E°6×3EÑ3EÀuÈdÓSÐÜ(=Ø× Ñ Ü�G‰G�L‰Lœ 5¨%°Ó6Ø˜UÑ#ó)
Ñ%ˆÔ˜gô
 .Ø˜×1Ñ1°7¸Jó
Ðô -BØ×"Ñ"Ü�G‰G�L‰Lœ 5¨'Ó2Ø˜uÑ%ó-
Ñ)ˆÔ 	ô
 /Ø˜×1Ñ1°8¸Tó
Ðô /DØ×#Ñ#Ü�G‰G�L‰Lœ 5¨(Ó3Ø Ñ&ó/
Ñ+ˆÔ ð �ŠÜ˜6×/Ñ/°Ô9Ü˜6×/Ñ/°Ô9Ü˜6×1Ñ1°9Ô=Ü˜6×2Ñ2°JÔ?à×$Ñ$Ð,Ü(+Ü”X“×%Ñ%Ð(8¸Ñ(EÑEó)ˆFÔ%ð ×&Ñ&Ð.Ü*-Ü”X“×%Ñ%Ð(:¸;Ñ(GÑGó+ˆFÔ'ð ×"Ñ"Ð*Ü&)Ü”X“×%Ñ%Ð(;¸KÑ(HÑHó'ˆFÔ#ô 	�‰�VÔÜ‰Ñ˜Õ r   c           	      óR  •— t        ||«      \  }}}t        |t        «      rp|rng }t        |«      D ]\  \  }}	t        j                  dj                  |dz   t        |«      «      «       t        ‰| �%  |	||¬«      \  }
}|j                  |
«       Œ^ |S t        ‰| �%  |||¬«      \  }
}|
S )Núprocessing {}/{} page:é   ©Úimg_idx)r  rä   r7  r9  rÅ   Úinfor¸   rð   r!  r:  r;  )r$  rô   Úreturn_ocr_result_in_tablerd  rõ   rö   r÷   Úres_listÚindexÚpdf_imgrJ  rH  r-  s               €r   r:  zPPStructure.__call__F  s²   ø€ ô #,¨C°Ó"=ÑˆˆX�xÜ�cœ4Ô ¡XØˆHÜ"+¨C¦.‘��wÜ—‘Ð4×;Ñ;¸EÀA¹IÄsÈ3ÃxÓPÔQÜ™Ñ)ØÐ7Àð *ó ‘��Qð —‘ Õ$ð #1ð ˆOÜ‘Ñ! #Ð'AÈ7Ð!ÓS‰ˆˆQØˆ
r   )Fr   r.  )rO  rP  rQ  r"  r:  rR  rS  s   @r   r1   r1   ý  s   ø„ ôF!ðV $)ØØ#÷ñ r   r1   c            
      óÒ  — t        d¬«      } | j                  }t        |«      rt        |d«       dg}nt	        | j                  «      }t        |«      dk(  r/t        j                  dj                  | j                  «      «       y | j                  dk(  rt        d%i | j                  ¤Ž}n+| j                  dk(  rt        d%i | j                  ¤Ž}nt        ‚|D �]Ã  }t        j                  j!                  |«      j#                  d«      d   }t        j%                  d	j                  d
|d
«      «       | j                  dk(  �r:|j'                  || j(                  | j*                  | j,                  | j.                  | j0                  | j2                  ¬«      }|€ŒÂg }|D ]E  }|D ]>  }	t        j%                  |	«       |j5                  t7        j8                  |	«      dz   «       Œ@ ŒG | j:                  s�Œt        j                  j=                  | j>                  «      du rt        j@                  | j>                  «       | j>                  dz   |z   dz   }
tC        |
dd¬«      5 }|jE                  |«       d d d «       �Œ¥| j                  dk(  s�Œ¶tG        |«      \  }}}|s|stI        jJ                  |«      }| jL                  r§| jN                  r›|r™tQ        d«       ddl)m*} t        j                  jW                  | j>                  dj                  |«      «      } ||«      }|jY                  |«       |j[                  «        t        j%                  dj                  |«      «       �Œ‘|s.|€&t        j                  dj                  |«      «       �Œ»||gg}nºg }t]        |«      D ]ª  \  }}t        j^                  t        j                  jW                  | j>                  |«      d¬«       t        j                  jW                  | j>                  ||dz   ta        |«      z   dz   «      }tI        jb                  ||«       |j5                  ||g«       Œ¬ g }t]        |«      D ]   \  }\  }}t        j%                  dj                  |dz   t        |«      «      «        |||¬«      }te        || j>                  ||«       | jL                  sŒi|g k7  sŒoddl3m4} ddl5m6} |jn                  \  }}} ||«      } |||«      }||z  }Œ¢ | jL                  r!|g k7  r	 dd l5m8}  |||| j>                  |«       |D ]9  }!|!ju                  d"«       |!ju                  d#«       t        j%                  |!«       Œ; t        j%                  d$j                  | j>                  «      «       �ŒÆ y # 1 sw Y   �ŒÒxY w# tr        $ r0} t        j                  d!j                  || «      «       Y d } ~ �Œ	d } ~ ww xY w)&NTr  rÙ   r   zno images find in {}rW   rM   Ú.z{}{}{}z
**********)rJ   rK   rL   r4  r5  rõ   Ú
FÚ/z.txtÚwrÝ   rÞ   Úpdf2docx)Ú	Converterz{}.docxzdocx save to {}rà   )Úexist_okrH  z.jpgra  rb  rc  )Údeepcopy)Úsorted_layout_boxes)Úconvert_info_docxz.error in layout recovery image:{}, err msg: {}rô   rJ  zresult save to {}r]   );rf   Ú	image_dirr&   r%   r!   rð   rÅ   rÆ   r¸   rU   r0   r  r1   rÄ   r  r  ÚbasenameÚsplitre  rW   rJ   rK   r  ÚbinarizeÚinvertÚ
alphacolorr;  ÚpprintÚpformatÚsavefileÚexistsÚoutputÚmkdirræ   Ú
writelinesr    rÓ   ÚimreadÚrecoveryÚuse_pdf2docx_apir   Úpdf2docx.converterrp  r  rè   Úcloser9  Úmakedirsra   Úimwriter.   Úcopyrr  Ú$ppstructure.recovery.recovery_to_docrs  rñ   rt  Ú	ExceptionÚpop)"Úargsru  Úimage_file_listÚengineÚimg_pathÚimg_nameÚresultÚlinesrJ  ÚlineÚoutfilerù   rô   rö   r÷   rp  Ú	docx_fileÚcvÚ	img_pathsrh  ri  Úpdf_img_pathÚall_resÚnew_img_pathrr  rs  Úhrn  rH  Ú	result_cpÚresult_sortedrt  ÚexÚitems"                                     r   Úmainr¡  [  s¬  € ä˜DÔ!€DØ—‘€IÜˆyÔÜ! )¨YÔ7Ø$˜+‰ä-¨d¯n©nÓ=ˆÜ
ˆ?Ó˜qÒ Ü�‰Ð+×2Ñ2°4·>±>ÓBÔCØØ‡y�y�EÒÜÑ-˜dŸm™mÑ-‰Ø	�‰�kÒ	!ÜÑ/ §¡Ñ/‰ä!Ð!ä#ˆÜ—7‘7×#Ñ# HÓ-×3Ñ3°CÓ8¸Ñ;ˆÜ�‰�H—O‘O H¨h¸ÓAÔBØ�9‰9˜ÓØ—Z‘ZØØ—H‘HØ—H‘HØ×&Ñ&Ø—M‘MØ—K‘KØ ŸO™Oð  ó ˆFð Ñ!Ø�Û!�CÛ #˜ÜŸ™ DÔ)ØŸ™¤V§^¡^°DÓ%9¸DÑ%@ÕAñ !$ð "ð —=”=Ü—w‘w—~‘~ d§k¡kÓ2°eÑ;ÜŸ™ §¡Ô-Ø"Ÿk™k¨CÑ/°(Ñ:¸VÑC�GÜ˜g s°WÕ=ÀØŸ™ UÔ+÷ >Ñ=ð �Y‰Y˜+Ô%Ü&4°XÓ&>Ñ#ˆC�˜8Ù¡HÜ—j‘j Ó*�à�}Š} ×!6Ò!6¹8Ü˜:Ô&Ý8äŸG™GŸL™L¨¯©°i×6FÑ6FÀxÓ6PÓQ�	Ù˜xÓ(�Ø—
‘
˜9Ô%Ø—‘”
Ü—‘Ð-×4Ñ4°YÓ?Ô@ÙáØ�;Ü—L‘LÐ!<×!CÑ!CÀHÓ!MÔNÙØ&¨˜_Ð-‘	à�	Ü&/°¦n‘N�E˜7Ü—K‘K¤§¡§¡¨T¯[©[¸(Ó CÈdÕSÜ#%§7¡7§<¡<ØŸ™ X¨x¸#©~ÄÀEÃ
Ñ/JÈVÑ/Só$�Lô —K‘K ¨gÔ6Ø×$Ñ$ l°GÐ%<Õ=ð '5ð ˆGÜ.7¸	Ö.BÑ*�Ñ*˜ cÜ—‘Ð4×;Ñ;¸EÀA¹IÄsÈ9Ã~ÓVÔWÙ ¨UÔ3�Ü" 6¨4¯;©;¸À%ÔHà—=“= V¨r£\Ý-ÝXà!Ÿi™i‘G�A�q˜!Ù (¨Ó 0�IÙ$7¸	À1Ó$E�MØ˜}Ñ,‘Gð /Cð �}Š} ¨B¢ð
ÝVá% c¨7°D·K±KÀÔJó  �Ø—‘˜”Ø—‘˜”Ü—‘˜DÕ!ð  ô �K‰KÐ+×2Ñ2°4·;±;Ó?Ö@ñs $÷. >Ñ=ûôl !ò Ü—L‘LØH×OÑOØ$ bóôõ
 ûðús$   É!V ÔV-Ö V*	Ö-	W&Ö6%W!×!W&)F)T)r.  )Kr  r   r   r  Údirnamer  Ú__dir__ÚpaddleÚpaddle.utilsr   r;  r  rÓ   r  ÚnumpyrÐ   Úpathlibr   rë   Úior   r{  ÚPILr   Útools.inferr   r   r   Úimport_moduler   r   Úppocr.utils.loggingr   Úppocr.utils.utilityr    r!   r"   r#   Úppocr.utils.networkr$   r%   r&   r'   Útools.infer.utilityr(   r)   r*   Úppstructure.utilityr+   r,   Úppstructure.predict_systemr-   r.   r/   rÅ   Ú__all__r  r  Ú
expanduserr  r·   rb   rÃ   rc   r¶   rf   rÀ   rÌ   rå   r×   r  Ú
TextSystemr0   r1   r¡  r]   r   r   Ú<module>rµ     sQ  ðó 
Û 
Û à
�'‰'�/‰/˜(Ó
#€ã Ý #à ‡�‡��—‘—‘˜W bÓ)Ô *ã 
Û Û Ý Û Ý Û Ý Ý &óñ 	ØˆR�W‰W�\‰\˜'Ð#6Ó7Èô	€ð 	 ˆ	×Ñ ¨Ó5€Ø%ˆi×%Ñ% m°[ÓA€Ý *÷ó ÷ó ÷ >Ñ =ß @ß TÑ Tá	‹€ò€ð �FÐ Ø˜\Ð*Ð Ø�7‰7×Ñ˜oÓ.€à&Ð ÚJÐ Ø"2Ð Ø#1Ð3CÐ"DÐ ð Ðgðð Ðgðð Ðvðñ
ð hØ!Bñð
 hØ!<ñð
 qØ!Eñð
 pØ!Dñð
 vØ!Jñ ð
 mØ!Añð
 mØ!Añð
 mØ!Añð
 pØ!Dñð
 qØ!Eñð
 sØ!Gñð
 uØ!Iññ[1ðf ØÐoððñ}C
ðN Ðgðð Ðgðð Ðvðñ
ð hØ!Bñð
 hØ!<ñð
 qØ!Eñð
 pØ!Dñð
 vØ!Jñ ð
 mØ!Añð
 mØ!Añð
 mØ!Añð
 pØ!Dñð
 qØ!Eñð
 sØ!Gñð
 uØ!Iññ[1ðf ØÐoððñ}C
ðL ØÐgððð ØgØ!Bñðð ØÐoððñ
ð* Ðoðð Ðyðð Ðxðñ
ð pØ!Bñð
 {Ø!<ñð
 xØ!Eñð
 xØ!Eñð
 xØ!Eñð
 wØ!Dñð
 }Ø!Jñ ð
 tØ!Añð
 tØ!Añð
 tØ!Añð
 }Ø!Dñð
 ~Ø!Eñð
 @Ø!Gñð
 BØ!Iñð
 yØ!Bññs=ð~ ØÐoððñUO
ñwkð\ ØØ~Ø!Lñðð
ð CØ!Lñð
 CØ!Oññ	ð Ø!Yñð
 DØ!Tññ	ñ
ññ[M€
ó`+9ò\dòN"1ðJ6˜ó 6ó
4#ôn[�×)Ñ)ô [ô|[�/ô [ó|lAr   