ó
    ˆ*£h…  ã                   óÌ  • S SK J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	J
r
  S SKJr  S SKrS SKrS SKrS SKJr  SSKJr  \R(                  S    S:X  a  S S	KJr  OS S	KJr  S+S
 jrSS/SS/S./ SQ4S jr " S S5      r " S S5      rS rS,S jrS,S jrS rS/ 4S jr  " S S\!5      r"S r#S r$S-S jr%S r&S  r'S.S! jr(S/S" jr)S# r*S$ r+S0S% jr,S1S& jr-S' r.S2S( jr/S) r0S* r1g)3é    )Úprint_functionN)ÚImageÚJpegImagePlugin)Úndimage)ÚZipFileé   )Ú	loadImageé   )Úurlretrievec                 óf  • [         R                  " U [         R                  " [         R                  " U 5      U:g  5      S   S-   5      nU Vs/ s H  n[	        U5      S:”  d  M  UPM     nnUS:X  a  U Vs/ s H  oUS   PM	     nnU$ US:X  a  U Vs/ s H  oUS   PM	     nnW$ s  snf s  snf s  snf )Nr   r   ÚfirstÚlastéÿÿÿÿ)ÚnpÚsplitÚwhereÚdiffÚlen)ÚdataÚmodeÚstepsizeÚgroupÚitemÚlÚresults          ÚJ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/easyocr/utils.pyÚconsecutiver      sŸ   € Ü�HŠH�Tœ2Ÿ8š8¤B§G¢G¨D£M°XÑ$=Ó>¸qÑAÀ!ÑCÓD€EÙ#Ó3še�d¤s¨4£y°¡{�T™e€EÐ3àˆwƒ±Ó!6²¨1 A¤$±˜Ð!6à€Mð 
�‹±%Ó"8²%¨Q R¤5±%˜Ð"8Ø€Mùò	 4ùâ!6ùÚ"8s   ÁB$Á$B$Á6B)ÂB.é   é   )ÚthÚen)r   r
   r   r   c                 ó|  • / n/ nSnSnU HX  nUS-  S:X  a  SnOSn[        [        R                  " X:H  5      R                  5       U5      n	U	 V
s/ s H  oªU/PM     nn
XK-  nMZ     [	        US S9nU HŒ  nUR                  5        Hu  nUS   X   S   :X  a	  UnUS   nM  US   X   S   :X  d  M*  Xm:X  aD  UWS-   US   S-
  //nXå:”  a  UR                  SX^S-
  //5        US   S-   nUR                  U5        SnMw     MŽ     U[        U 5      S-
  ::  a!  UR                  SU[        U 5      S-
  //5        U$ s  sn
f )	Nr   Ú r
   r   r   c                 ó   • U S   $ ©Nr   © ©Úxs    r   Ú<lambda>Ú#word_segmentation.<locals>.<lambda>'   s   € ¨a°ªdó    ©Úkeyr   )r   r   ÚargwhereÚflattenÚsortedÚkeysÚappendr   )ÚmatÚseparator_idxÚseparator_idx_listr   Úsep_listÚ	start_idxÚsep_langÚsep_idxr   Úar   Únew_sepÚsepÚlangÚsep_start_idxÚnew_sep_pairs                   r   Úword_segmentationr@      sk  € Ø€FØ€HØ€IØ€HÛ%ˆØ�Q‰;˜!Ó 7™TØˆdÜœŸš S¡^Ó4×<Ñ<Ó>ÀÓEˆÙ01Ó2²¨˜7“O±ˆÐ2ØÑŠñ &ô �h¡NÑ3€HãˆØ!×&Ñ&Ö(ˆDØ�1‰v˜Ñ,¨QÑ/Ó/Ø�Ø # A¡’Ø�Q‘˜=Ñ.¨qÑ1Õ1ØÓ#Ø$(¨=¸©?¸CÀ¹FÀ1¹HÐ*EÐ#F�LØ$Ó0ØŸ™¨¨YÀa¹Ð,HÐ'JÔLØ # A¡ q¡�IØ—M‘M ,Ô/Ø’ó )ñ ð ”C˜“H˜Q‘JÓØ�‰˜˜Y¬¨C«°©
Ð3Ð5Ô7Ø€Mùò) 3s   ÁD9c                   ó   • \ rS rSrSrS rSrg)Ú	BeamEntryé<   z7information about one single beam at specific time-stepc                 óf   • SU l         SU l        SU l        SU l        SU l        SU l        SU l        g )Nr   r   Fr&   T)ÚprTotalÚ
prNonBlankÚprBlankÚprTextÚ	lmAppliedÚlabelingÚ
simplified©Úselfs    r   Ú__init__ÚBeamEntry.__init__>   s3   € ØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆ�r+   )rJ   rI   rG   rF   rH   rE   rK   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rN   Ú__static_attributes__r&   r+   r   rB   rB   <   s
   † Ù=õr+   rB   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	Ú	BeamStateéG   z1information about the beams at specific time-stepc                 ó   • 0 U l         g ©N©ÚentriesrL   s    r   rN   ÚBeamState.__init__I   s	   € Øˆ�r+   c                 ó  • U R                   R                  5        Ha  u  p[        U R                   U   R                  5      nU R                   U   R                  SU(       a  UOS-  -  U R                   U   l        Mc     g)zlength-normalise LM scoreç      ð?N)r\   Úitemsr   rJ   rH   )rM   ÚkÚ_ÚlabelingLens       r   ÚnormÚBeamState.normL   sa   € à—l‘l×(Ñ(Ö*‰FˆQÜ˜dŸl™l¨1™o×6Ñ6Ó7ˆKØ%)§\¡\°!¡_×%;Ñ%;ÀÖVaÁ{ÐgjÑ@kÑ%lˆD�L‰L˜‰OÖ"ò +r+   c                 óÄ   • U R                   R                  5        VVs/ s H  u  pUPM	     nnn[        USS S9nU Vs/ s H  oUR                  PM     sn$ s  snnf s  snf )z,return beam-labelings, sorted by probabilityTc                 ó4   • U R                   U R                  -  $ rZ   ©rE   rH   r'   s    r   r)   Ú BeamState.sort.<locals>.<lambda>U   ó   € ÀÇ	Á	È!Ï(É(Ò@Rr+   ©Úreverser-   )r\   r`   r0   rJ   )rM   rb   ÚvÚbeamsÚsortedBeamsr(   s         r   ÚsortÚBeamState.sortR   sU   € à!%§¡×!3Ñ!3Ô!5Ô6Ò!5‘v˜“Ñ!5ˆÑ6Ü˜U¨DÑ6RÑSˆÙ$/Ó0¢K˜q—
”
¡KÑ0Ð0ùó 7ùâ0s
   žA¿Ac                 ó„  • U R                   R                  5        VVs/ s H  u  pVUPM	     nnn[        USS S9n[        U5      U:”  a  US U n[	        U5       H\  u  pšU
R
                  nSn[	        U5       H(  u  pÞXâ;  d  M  US:”  a  X½S-
     X½   :X  a  M!  XÁU   -  nM*     U	S:X  a  UnXÄ;   a  Un  U$ M^     W$ s  snnf )NTc                 ó4   • U R                   U R                  -  $ rZ   rh   r'   s    r   r)   Ú&BeamState.wordsearch.<locals>.<lambda>Z   rj   r+   rk   r#   r   r   )r\   r`   r0   r   Ú	enumeraterJ   )rM   ÚclassesÚ
ignore_idxÚmaxCandidateÚ	dict_listrb   rm   rn   ro   ÚjÚ	candidateÚidx_listÚtextÚir   Ú	best_texts                   r   Ú
wordsearchÚBeamState.wordsearchX   sÜ   € Ø!%§¡×!3Ñ!3Ô!5Ô6Ò!5‘v˜“Ñ!5ˆÑ6Ü˜U¨DÑ6RÑSˆÜˆ{Ó˜|Ó+¸;À}ÈÐ;U¨[ä% kÖ2‰LˆAØ ×)Ñ)ˆHØˆDÜ  Ö*‘�ØÕ&°°Q³¸8ÈÁE¹?ÈhÉkÕ;YØ A™JÑ&’Dñ +ð �A‹v 4�yØÓ à �	Øð Ðñ ñ 3ð Ðùó' 7s   žB<r[   N)
rP   rQ   rR   rS   rT   rN   rd   rp   r€   rU   r&   r+   r   rW   rW   G   s   † Ù7òòmò1õr+   rW   c                 ó"  • U(       aˆ  UR                   (       dv  X R                  (       a  U R                  S   OUR                  S5         nX!R                  S      nSnUR                  XE5      U-  nU R                  U-  Ul        SUl         ggg)zjcalculate LM score of child beam by taking score from parent beam and bigram probability of last two charsr   Ú g{®Gáz„?TN)rI   rJ   ÚindexÚgetCharBigramrH   )Ú
parentBeamÚ	childBeamrv   ÚlmÚc1Úc2ÚlmFactorÚ
bigramProbs           r   ÚapplyLMr�   n   sƒ   € æ	�)×%×%Ø×0C×0C�Z×(Ñ(¨Ò,ÈÏÉÐWZÓI[Ñ\ˆØ×'Ñ'¨Ñ+Ñ,ˆØˆØ×%Ñ% bÓ-°Ñ9ˆ
Ø%×,Ñ,¨zÑ9ˆ	ÔØ"ˆ	Õð &€rr+   c                 óÌ  • [         R                  " U 5      n [         R                  " [         R                  " U S5      U :H  X:H  -  ) 5      S   nX   n [         R                  " [         R                  " U S5      [         R                  " U S5      :g  X:H  -  ) 5      S   n[	        U 5      S:”  a*  [	        U 5      S-
  nX2;  a  [         R
                  " X#/5      nX   n [        U 5      $ )Nr   r   r   )r   Úarrayr   Úrollr   r2   Útuple)rJ   ÚblankIdxÚidxÚlast_idxs       r   Úsimplify_labelr•   x   sÃ   € Ü�xŠx˜Ó!€Hô �(Š(”b—g’g˜h qÓ)¨XÑ5¸(Ñ:NÑOÐPÓ
QÐRSÑ
T€CØ‰}€Hô �(Š(”r—w’w˜x¨Ó*¬b¯gªg°h¸rÓ.BÑBÀxÑG[Ñ\Ð]Ó
_Ð`aÑ
b€Cä
ˆ8ƒ}�qÓÜ�x“= ‘?ˆØÓ¤b§i¢i°°ZÓ&@ Ø‰}€Hä�‹?Ðr+   c                 ó^  • U (       a  X:X  a  U S   U:w  a  X4-   nU$ U (       a*  X:w  a%  U S   U:X  a  U S   U:X  a  X4-   nU$ U S S U4-   n U$ U (       a  X:X  a  U S   U:X  a  U nU$ U (       d	  X:X  a  U nU$ U (       d  X:w  a  X4-   nU$ U (       a  X:w  a  X4-   nU$ X4-   n[        X25      nU$ )Nr   éþÿÿÿ)r•   )rJ   Úcr’   ÚnewLabelings       r   Úfast_simplify_labelrš   ‰   sý   € ö �A“M h¨r¡l°hÓ&>Ø ‘oˆðB Ðö= 
�a“m¨°©¸Ó(@ð �B‰<˜1ÓØ" T™/ˆKð4 Ðð- # 3 B˜-¨1¨$Ñ.‰Kð, Ðö' 
�a“m¨°©¸Ó(@Øˆð$ Ðö ˜!›-Øˆð Ðö ˜!›-Ø ‘oˆð Ðö 
�a“mØ ‘oˆð Ðð  ‘oˆÜ$ [Ó;ˆàÐr+   c                 óR   • XR                   ;  a  [        5       U R                   U'   gg)z!add beam if it does not yet existN)r\   rB   )Ú	beamStaterJ   s     r   ÚaddBeamr�   °   s%   € à×(Ñ(Ó(Ü&/£kˆ	×Ñ˜(Ò#ð )r+   é   c                 ó`  • SnU R                   u  px[        5       n	Sn
[        5       U	R                  U
'   SU	R                  U
   l        SU	R                  U
   l        [        U5       GHF  n[        5       nU	R                  5       SU nU GH  n
SnU
(       a#  U	R                  U
   R                  XU
S   4   -  nU	R                  U
   R
                  XU4   -  nU
nU	R                  U
   R                  (       d  [        X¦5      n
[        XÊ5        X¬R                  U
   l        UR                  U
   =R                  U-  sl        UR                  U
   =R                  U-  sl        UR                  U
   =R
                  Xþ-   -  sl        U	R                  U   R                  UR                  U
   l        [        R                  " XS S 24   SU-  :¬  5      S   nU HÅ  n[!        U
UU5      nU
(       a*  U
S   U:X  a!  XU4   U	R                  U   R                  -  nO XU4   U	R                  U   R
                  -  n[        UU5        UUR                  U   l        UR                  U   =R                  U-  sl        UR                  U   =R
                  U-  sl        MÇ     GM     Un	GMI     U	R#                  5         U/ :X  aS  U	R                  5       S   nSn[%        U5       H-  u  nnUU;  d  M  US:”  a  UUS-
     UU   :X  a  M%  UUU   -  nM/     U$ U	R'                  XSU5      nU$ )Nr   r&   r   r   ç      à?r#   é   )ÚshaperW   rB   r\   rG   rE   Úrangerp   rF   rK   r•   r�   rJ   rH   r   r   rš   rd   ru   r€   )r3   rv   rw   rˆ   Ú	beamWidthry   r’   ÚmaxTÚmaxCr   rJ   ÚtÚcurrÚbestLabelingsrF   rG   Úprev_labelingÚchar_highscorer˜   r™   ÚbestLabelingÚresr~   r   s                           r   ÚctcBeamSearchr®   µ   sø  € Ø€HØ—‘�J€Dô ‹;€DØ€HÜ&›[€D‡L�L�ÑØ%&€D‡L�L�ÑÔ"Ø%&€D‡L�L�ÑÔ"ô �4�[ˆÜ‹{ˆàŸ	™	› A iÐ0ˆä%ˆHàˆJæà!Ÿ\™\¨(Ñ3×>Ñ>ÀÈÐQSÉÀ_ÑAUÑU�
ð —|‘| HÑ-×5Ñ5¸À¸[Ñ9IÑIˆGð %ˆMØ—<‘< Ñ)×4×4Ü)¨(Ó=�ô �DÔ#ð /7�L‰L˜Ñ"Ô+Ø�L‰L˜Ñ"×-Ò-°Ñ;Õ-Ø�L‰L˜Ñ"×*Ò*¨gÑ5Õ*Ø�L‰L˜Ñ"×*Ò*¨gÑ.BÑBÕ*Ø,0¯L©L¸Ñ,G×,NÑ,NˆD�L‰L˜Ñ"Ô)ô  ŸXšX cªQ¨$¡i°3°t±8Ñ&;Ó<¸QÑ?ˆNÛ#�ô
 2°(¸A¸xÓH�ö  ¨¡°Ó 1Ø!$¨ T¡¨T¯\©\¸-Ñ-H×-PÑ-PÑ!P‘Jà!$¨ T¡¨T¯\©\¸-Ñ-H×-PÑ-PÑ!P�Jô ˜˜kÔ*ð 6A�—‘˜[Ñ)Ô2Ø—‘˜[Ñ)×4Ò4¸
ÑBÕ4Ø—‘˜[Ñ)×1Ò1°ZÑ?×1ô' $ñA &ðt ‹ñ ðD 	‡I�I„Kà�BƒØ—y‘y“{ 1‘~ˆØˆÜ˜\Ö*‰CˆAˆaà˜
Õ"¨Q°«U°|ÀAÈÁEÑ7JÈlÐ[\ÉoÕ7]Ø�w˜q‘zÑ!’ñ +ð €Jð �o‰o˜g°2°yÓAˆØ€Jr+   c                   óJ   • \ rS rSrSr0 0 4S jrS
S jrS rSS jrSS jr	Sr
g	)ÚCTCLabelConverteri  z*Convert between text-label and text-index c                 ó   • [        U5      n0 U l        [        U5       H  u  pVUS-   U R                  U'   M     S/U-   U l        X l        / nUR                  5        H	  u  p‰Xy-  nM     S/[        U5       VV
s/ s H
  u  pZUS-   PM     sn
n-   U l        [        U5      S:X  aT  / nUR                  5        H=  u  pŒ [        USSS9 nUR                  5       R                  5       nS S S 5        UW-  nM?     OQ0 nUR                  5        H;  u  pŒ[        USSS9 nUR                  5       R                  5       nS S S 5        WX¸'   M=     X°l        g s  sn
nf ! , (       d  f       Nv= f!    M¶  = f! , (       d  f       N<= f)Nr   z[blank]r   Úrz	utf-8-sig)Úencoding)ÚlistÚdictru   Ú	characterÚseparator_listr`   rw   r   ÚopenÚreadÚ
splitlinesry   )rM   r¶   r·   Údict_pathlistÚdict_characterr~   ÚcharÚseparator_charr=   r<   r   ry   Ú	dict_pathÚ
input_fileÚ
word_counts                  r   rN   ÚCTCLabelConverter.__init__  sm  € ä˜i›ˆàˆŒ	Ü  Ö0‰GˆAØ !™eˆD�I‰I�d‹Oñ 1ð $˜ ~Ñ5ˆŒà,ÔØˆØ'×-Ñ-Ö/‰IˆDØÑ!ŠNñ 0à˜#´9¸^Ô3LÔ MÒ3L©¨  1¤Ñ3LÒ MÑMˆŒô ˆ~Ó !Ó#ØˆIØ#0×#6Ñ#6Ö#8‘�ðÜ˜i¨¸ÒEÈØ&0§o¡oÓ&7×&BÑ&BÓ&D˜
÷ Fà Ñ+’Iò	 $9ð ˆIØ#0×#6Ñ#6Ö#8‘�Ü˜) S°[ÒAÀZØ",§/¡/Ó"3×">Ñ">Ó"@�J÷ Bà",�	“ñ $9ð
 #�ùó' !N÷ FÕEûðÚú÷ BÕAús6   Á9EÂ<E'ÃEÃ&E'ÄE/Å
E$	Å E'Å'E,Å/
E=	c                 ó  • U Vs/ s H  n[        U5      PM     nnSR                  U5      nU Vs/ s H  oPR                  U   PM     nn[        R                  " U5      [        R                  " U5      4$ s  snf s  snf )a  convert text-label into text-index.
input:
    text: text labels of each image. [batch_size]

output:
    text: concatenated text index for CTCLoss.
            [sum(text_lengths)] = [text_index_0 + text_index_1 + ... + text_index_(n - 1)]
    length: length of each text. [batch_size]
r#   )r   Újoinrµ   ÚtorchÚ	IntTensor)rM   r}   Úbatch_max_lengthÚsÚlengthr½   s         r   ÚencodeÚCTCLabelConverter.encode7  sh   € ñ #'Ó'¢$˜Q”#�a–&¡$ˆÐ'Ø�w‰w�t‹}ˆÙ,0Ó1ªD D—	‘	˜$”©DˆÐ1ä—’ Ó%¤u§¢°vÓ'>Ð?Ð?ùò	 (ùâ1s
   …A7±A<c                 ó’  • / nSnU H¼  nXXE-    n[         R                  " USS USS :H  ) SS5      n[         R                  " U[         R                  " U R                  5      5      ) nXx-  n	SR                  [         R                  " U R                  5      XiR                  5             5      n
UR                  U
5        XE-  nM¾     U$ )z$convert text-index into text-label. r   r   Nr   Tr#   )	r   ÚinsertÚisinr�   rw   rÄ   r¶   Únonzeror2   )rM   Ú
text_indexrÉ   Útextsr„   r   r§   r:   Úbr˜   r}   s              r   Údecode_greedyÚCTCLabelConverter.decode_greedyG  s°   € àˆØˆÛˆAØ ¡Ð+ˆAä—	’	˜Q˜q˜r˜U A c r F™]Ð,¨Q¨tÓ4ˆAä—’˜œ2Ÿ8š8 D§O¡OÓ4Ó5Ð5ˆAà‘ˆAà—7‘7œ2Ÿ8š8 D§N¡NÓ3°A·i±i³k±NÑCÓDˆDØ�L‰L˜ÔØ‰JŠEñ ð ˆr+   c           	      ó°   • / n[        UR                  S   5       H7  n[        X   U R                  U R                  S US9nUR                  U5        M9     U$ )Nr   )r¤   )r£   r¢   r®   r¶   rw   r2   )rM   r3   r¤   rÑ   r~   r§   s         r   Údecode_beamsearchÚ#CTCLabelConverter.decode_beamsearchY  sM   € ØˆÜ�s—y‘y ‘|Ö$ˆAÜ˜c™f d§n¡n°d·o±oÀtÐW`ÑaˆAØ�L‰L˜ŽOñ %ð ˆr+   c                 óÐ  • / n[         R                  " USS9n[        UR                  S   5       GH¬  nSn[	        U R
                  5      S:X  Ga  U R                  S   n[         R                  " XE   U:g  5      R                  5       n[         R                  " U[         R                  " [         R                  " U5      S:g  5      S   S-   5      n	U	 V
s/ s H  n
[	        U
5      S:”  d  M  [        U
5      PM!     n	n
[        U	5       HL  u  p¼XUS S 24   n[        XÐR                  U R                   S X R"                  S9nUS:X  a  Xn-  nMD  USU-   -  nMN     Os[%        XE   5      nU H`  nXUS   S   US   S   S-   2S S 24   nUS   S:X  a  / nOU R"                  US      n[        XÐR                  U R                   S UUS9nXn-  nMb     UR'                  U5        GM¯     U$ s  sn
f )Nr
   )Úaxisr   r#   rƒ   r   )r¤   ry   )r   Úargmaxr£   r¢   r   r·   rµ   r.   r/   r   r   r   r´   ru   r®   r¶   rw   ry   r@   r2   )rM   r3   r¤   rÑ   rÚ   r~   ÚstringÚ	space_idxr   r   r   rz   Úlist_idxÚmatrixr§   ÚwordsÚwordry   s                     r   Údecode_wordbeamsearchÚ'CTCLabelConverter.decode_wordbeamsearch`  s½  € ØˆÜ—’˜3 qÑ)ˆä�s—y‘y ‘|×$ˆAØˆFä�4×&Ñ&Ó'¨1Ô,Ø ŸI™I c™N�	ä—{’{ 6¡9¨iÑ#7Ó8×@Ñ@ÓB�ÜŸš ¤r§x¢x´·²¸³ÀÑ0BÓ'CÀAÑ'FÀqÑ'HÓI�Ù16ÓF²¨¼#¸d»)ÀA¹+›*œ$˜tž*±�ÐFä#,¨UÖ#3‘K�AØ  HªQ Ñ/�FÜ% f¯n©n¸d¿o¹oÈtØ09Ç^Á^ñU�Aà˜A“v˜v™{švØ  C¨¡E™/š&ò $4ô *¨&©)Ó4�ã!�DØ  D¨¡G¨A¡J¨t°A©w°q©z¸!©|Ð$;ºAÐ!=Ñ>�FØ˜A‘w "“}°"¡iØ&*§n¡n°T¸!±WÑ&=˜)Ü% f¯n©n¸d¿o¹oÈtÐ_hÐt}Ñ~�AØ‘K’Fñ "ð �L‰L˜× ñ7 %ð8 ˆùò) Gs   ÃG#Ã+G#)r¶   rµ   ry   rw   r·   N)rž   )é   )rP   rQ   rR   rS   rT   rN   rÊ   rÓ   rÖ   rá   rU   r&   r+   r   r°   r°     s%   † Ù5à35Àrô !#ôF@ò ô$÷ r+   r°   c                 ó  • / / p2U(       d  U $ U [        U5      * S  nU S [        U5      *  n [        U 5       H‰  u  pVU[        U 5      S-
  :X  a&  UR                  U5        UR                  U5        / nM=  U/ :X  d  US   S   US   :  a  UR                  U5        Me  UR                  U5        / nUR                  U5        M‹     U H™  n[        U5      n[        X(S-
     5      n	[        USS  5       H$  u  p«US   S   S   US   S   S   S   :  d  M"  U
n  O   [        X(   5       H!  u  p«US   S   S   US   S   S   :  d  M  U
n	  O   X(   R                  X—5        M›     / n U Vs/ s H  o`R	                  U5      PM       nU $ s  snf )Nr   r   r   )r   ru   r2   rÍ   Úextend)Úmerge_resultÚ	free_listÚmerge_result_bufÚmr_bufÚfree_list_bufr“   r²   Úfree_posÚy_posÚx_posr~   Ú
result_poss               r   Úmerge_to_freerï   ‚  s¹  € Ø! 2�fæØÐà ¤# i£. Ð!1Ð2€MØÐ 0¤# i£. Ð1€Lä˜LÖ)‰ˆØ”#�lÓ# AÑ%Ó%Ø�M‰M˜!ÔØ×#Ñ# FÔ+ØˆFÙà�b‹L˜f R™j¨™m¨a°©dÓ2Ø�M‰M˜!Öà×#Ñ# FÔ+ØˆFØ�M‰M˜!Öñ *ó "ˆÜÐ$Ó%ˆÜÐ$¨1¡WÑ-Ó.ˆÜ&Ð'7¸¸Ð';Ö<‰MˆAØ˜‰{˜1‰~˜aÑ  :¨a¡=°Ñ#3°AÑ#6°qÑ#9Õ9Ø�Ùñ =ô
 'Ð'7Ñ'>Ö?‰MˆAØ˜‰{˜1‰~˜aÑ  :¨a¡=°Ñ#3°AÑ#6Õ6Ø�Ùñ @ð
 	Ñ×&Ñ& uÖ7ñ "ð €LÙ%5Ó6Ò%5 ×Ñ˜ÖÑ%5Ñ6ØÐùò 7s   Å(Fc                 óÆ  • Uu  p#pE[         R                  " US   US   -
  S-  US   US   -
  S-  -   5      n[         R                  " US   US   -
  S-  US   US   -
  S-  -   5      n[        [        U5      [        U5      5      n[         R                  " US   US   -
  S-  US   US   -
  S-  -   5      n	[         R                  " US   US   -
  S-  US   US   -
  S-  -   5      n
[        [        U	5      [        U
5      5      n[         R                  " SS/US-
  S/US-
  US-
  /SUS-
  //SS9n[
        R                  " X5      n[
        R                  " XX‹45      nU$ )Nr   r
   r   Úfloat32©Údtype)r   ÚsqrtÚmaxÚintr�   Úcv2ÚgetPerspectiveTransformÚwarpPerspective)ÚimageÚrectÚtlÚtrÚbrÚblÚwidthAÚwidthBÚmaxWidthÚheightAÚheightBÚ	maxHeightÚdstÚMÚwarpeds                  r   Úfour_point_transformr	  ¬  st  € ØÑ€RˆRä�WŠW�r˜!‘u˜r !™u‘}¨Ñ*°°1±¸¸1¹±À!Ñ/CÑDÓE€FÜ�WŠW�r˜!‘u˜r !™u‘}¨Ñ*°°1±¸¸1¹±À!Ñ/CÑDÓE€FÜ”3�v“;¤ F£Ó,€Hô
 �gŠg˜˜1™  1¡™¨!Ñ+°°A±¸¸A¹±À1Ñ0DÑEÓF€GÜ�gŠg˜˜1™  1¡™¨!Ñ+°°A±¸¸A¹±À1Ñ0DÑEÓF€GÜ”C˜“L¤# g£,Ó/€Iä
�(Š(�Q˜�F˜H q™L¨!Ð,¨h¸©l¸IÈ¹MÐ-JÈAÈyÐ[\É}ÐK]Ð^ÐhqÑ
r€Cô 	×#Ò# DÓ.€AÜ× Ò  ¨HÐ+@ÓA€Fà€Mr+   c                 óZ  • / / / / 4u  pxpšU  GH4  nUS   US   -
  [         R                  " SUS   US   -
  5      -  nUS   US   -
  [         R                  " SUS   US	   -
  5      -  n[        [        U5      [        U5      5      U:  aŽ  [        US   US   US   US	   /5      n[	        US   US   US   US	   /5      n[        US   US   US   US   /5      n[	        US   US   US   US   /5      nUR                  XþUUS
UU-   -  UU-
  /5        GM  [         R                  R                  US	   US   -
  US   US   -
  /5      n[         R                  R                  US   US   -
  US   US   -
  /5      n[        SU-  [	        UU5      -  5      n[        [         R                  " US   US   -
  [         R                  " SUS   US   -
  5      -  5      5      n[        [         R                  " US   US   -
  [         R                  " SUS   US	   -
  5      -  5      5      nUS   [         R                  " U5      U-  -
  nUS   [         R                  " U5      U-  -
  nUS   [         R                  " U5      U-  -   nUS   [         R                  " U5      U-  -
  nUS   [         R                  " U5      U-  -   nUS   [         R                  " U5      U-  -   nUS	   [         R                  " U5      U-  -
  nUS   [         R                  " U5      U-  -   nUR                  UU/UU/UU/UU//5        GM7     U(       a  [        US S9n/ nU HÌ  n[        U5      S:X  a  US   /n US   /n!UR                  U5        M1  [        [         R                  " W!5      US   -
  5      U[         R                  " W 5      -  :  a;  U R                  US   5        U!R                  US   5        UR                  U5        M¬  US   /n US   /n!U	R                  U5        U/nMÎ     U	R                  U5        U	 GHg  n"[        U"5      S:X  aX  U"S   n#[        U[	        U#S   U#S   -
  U#S   5      -  5      nU
R                  U#S   U-
  U#S   U-   U#S   U-
  U#S   U-   /5        Mk  [        U"S S9n"/ / nn$U" HÓ  n#[        U5      S:X  a  U#S   /n U#S   nUR                  U#5        M0  [        [         R                  " W 5      U#S   -
  5      U[         R                  " U 5      -  :  aD  U#S   W-
  UU#S   U#S   -
  -  :  a,  U R                  U#S   5        U#S   nUR                  U#5        M´  U#S   /n U#S   nU$R                  U5        U#/nMÕ     [        U5      S:”  a  U$R                  U5        U$ Hî  n%[        U%5      S:w  a|  [	        U%S S9S   n[        U%S S9S   n[	        U%S S9S   n[        U%S S9S   nXï-
  n&UU-
  n'[        U[	        U&U'5      -  5      nU
R                  UU-
  UU-   UU-
  UU-   /5        MŽ  U%S   n#U#S   U#S   -
  n&U#S   U#S   -
  n'[        U[	        U&U'5      -  5      nU
R                  U#S   U-
  U#S   U-   U#S   U-
  U#S   U-   /5        Mð     GMj     X¨4$ )Nr   r   é
   r
   r   rã   é   r   é   r    g
×£p=
÷?c                 ó   • U S   $ )Nr   r&   ©r   s    r   r)   Ú group_text_box.<locals>.<lambda>ã  s   € À4ÈÂ7r+   r,   c                 ó   • U S   $ r%   r&   r  s    r   r)   r    s   € °4¸²7r+   c                 ó   • U S   $ r%   r&   r'   s    r   r)   r    ó   € °A°a²Dr+   c                 ó   • U S   $ ©Nr   r&   r'   s    r   r)   r    r  r+   c                 ó   • U S   $ )Nr
   r&   r'   s    r   r)   r    r  r+   c                 ó   • U S   $ )Nr   r&   r'   s    r   r)   r    r  r+   )r   Úmaximumrõ   ÚabsÚminr2   Úlinalgrd   rö   ÚarctanÚcosÚsinr0   r   Úmean)(ÚpolysÚ	slope_thsÚycenter_thsÚ
height_thsÚ	width_thsÚ
add_marginÚsort_outputÚhorizontal_listrç   Úcombined_listÚmerged_listÚpolyÚslope_upÚ
slope_downÚx_maxÚx_minÚy_maxÚy_minÚheightÚwidthÚmarginÚtheta13Útheta24Úx1Úy1Úx2Úy2Úx3Úy3Úx4Úy4Únew_boxÚb_heightÚ	b_ycenterÚboxesÚboxÚ
merged_boxÚmboxÚ	box_widthÚ
box_heights(                                           r   Úgroup_text_boxrG  Â  sö  € à<>¸rÀ"ÀR¸KÑ9€O˜}äˆØ˜‘G˜D ™G‘O¤R§Z¢Z°°T¸!±W¸TÀ!¹W±_Ó%FÑFˆØ˜1‘g˜d 1™g‘o¤r§z¢z°"°t¸A±w¸tÀA¹w±Ó'HÑHˆ
ÜŒs�8‹}œc *›oÓ.°Ó:Ü˜˜a™  a¡¨¨a©°°a±Ð9Ó:ˆEÜ˜˜a™  a¡¨¨a©°°a±Ð9Ó:ˆEÜ˜˜a™  a¡¨¨a©°°a±Ð9Ó:ˆEÜ˜˜a™  a¡¨¨a©°°a±Ð9Ó:ˆEØ×"Ñ" E°%¸ÀÀUÈ5Á[Ñ@QÐSXÐY^ÑS^Ð#_×`ä—Y‘Y—^‘^ T¨!¡W¨T°!©W¡_°T¸!±W¸TÀ!¹W±_Ð$EÓFˆFÜ—I‘I—N‘N D¨¡G¨D°©G¡O°D¸±G¸DÀ¹G±OÐ#DÓEˆEä˜˜j™¬¨U°FÓ);Ñ;Ó<ˆFäœ"Ÿ)š) d¨1¡g¨d°1©g¡o´r·z²zÀ"ÀtÈAÁwÈtÐTUÉwÁÓ7XÑ%XÓYÓZˆGÜœ"Ÿ)š) d¨1¡g¨d°1©g¡o´r·z²zÀ"ÀtÈAÁwÈtÐTUÉwÁÓ7XÑ%XÓYÓZˆGà�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBØ�a‘œ2Ÿ6š6 '›?¨6Ñ1Ñ1ˆBà×Ñ˜r "˜g r¨" g¨r°"¨g°r¸"°gÐ>×?ñ7 ö8 Ü  Ñ6JÑKˆð €GÛˆäˆw‹<˜1ÓØ˜Q™�yˆHØ˜a™˜	ˆIØ�N‰N˜4Ö ô ”2—7’7˜9Ó%¨¨Q©Ñ/Ó0°;¼r¿wºwÀxÓ?PÑ3PÓPØ—‘  Q¡Ô(Ø× Ñ   a¡Ô)Ø—‘˜tÖ$à  ™G˜9�Ø! !™W˜I�	Ø×$Ñ$ WÔ-Ø˜&’ñ!  ð" ×Ñ˜Ô!ô ˆÜˆu‹:˜‹?Ø˜‘(ˆCÜ˜¤C¨¨A©¨s°1©v©°c¸!±fÓ$=Ñ=Ó>ˆFØ×Ñ  A¡ v¡¨c°!©f°V©m¸CÀ¹FÀ6¹MÈ#ÈaÉ&ÐQWÉ-ÐXÖYä˜5Ñ&:Ñ;ˆEà"$ R˜ˆJÛ�Ü�w“< 1Ó$Ø # A¡˜x�HØ ™F�EØ—N‘N 3Ö'äœBŸGšG HÓ-°°A±Ñ6Ó7¸*ÄRÇWÂWÈXÓEVÑ:VÓVÐ^aÐbcÑ^dÐejÑ^jÐnwÐz}Ð~ñ  {Að  BEð  FGñ  BHñ  {Hñ  oIó  ^IØ Ÿ™¨¨A©Ô/Ø # A¡˜ØŸ™ sÖ+à$'¨¡F 8˜Ø # A¡˜Ø"×)Ñ)¨'Ô2Ø#& %šñ ô �7‹|˜Q‹ 
× 1Ñ 1°'Ô :ã"�Ü�t“9 “>ä ©.Ñ9¸!Ñ<�EÜ ©.Ñ9¸!Ñ<�EÜ ©.Ñ9¸!Ñ<�EÜ ©.Ñ9¸!Ñ<�Eà %¡�IØ!&¨¡�JÜ  ¬s°9¸jÓ/IÑ!JÓK�Fà×&Ñ&¨¨f©°e¸F±lÀEÈ&ÁLÐRWÐX^ÑR^Ð'_Ö`à˜q™'�Cà # A¡¨¨Q©¡�IØ!$ Q¡¨#¨a©&¡�JÜ  ¬s°9¸jÓ/IÑ!JÓK�Fà×&Ñ&¨¨A©¨v©°c¸!±f¸V±mÀCÈÁFÈ6ÁMÐRUÐVWÑRXÐY_ÑR_Ð'`Öaô) #ñ5 ð` Ð!Ð!r+   c                 ó$   • X-  nUS:  a  SU-  nU$ )zJ
Calculate aspect ratio for normal use case (w>h) and vertical text (h>w)
r_   r&   )r2  r1  Úratios      r   Úcalculate_ratiorJ  -  s    € ð ‰L€EØˆSƒyØ�5‘ˆØ€Lr+   c                 ó"  • X-  nUS:  aH  [        X5      n[        R                  " X[        X4-  5      4[        R
                  R                  S9n X4$ [        R                  " U [        X4-  5      U4[        R
                  R                  S9n X4$ )zQ
Calculate ratio and resize correctly for both horizontal text
and vertical case
r_   )Úinterpolation)rJ  r÷   Úresizerö   r   Ú
ResamplingÚLANCZOS)Úimgr2  r1  Úmodel_heightrI  s        r   Úcompute_ratio_and_resizerR  6  s†   € ð
 ‰L€EØˆSƒyÜ Ó-ˆÜ�jŠj˜¬3¨|Ñ/AÓ+BÐCÔSX×ScÑSc×SkÑSkÑlˆð ˆ9Ðô �jŠj˜œc ,Ñ"4Ó5°lÐCÔRW×RbÑRb×RjÑRjÑkˆØˆ9Ðr+   c                 ó´  • / nUR                   u  pgSu  p‰U H¤  n
[        R                  " U
SS9n[        X+5      n[	        UR                   S   UR                   S   5      n[        X=-  5      nUS:X  a  M^  [        XÌR                   S   UR                   S   U5      u  pýUR                  X¯45        [        XÙ5      n	M¦     [        R                  " U	5      n	U  H¯  n
[        SU
S   5      n[        U
S   U5      n[        SU
S   5      n[        U
S   U5      nUUU2UU24   nUU-
  nUU-
  n[	        UU5      n[        X=-  5      nUS:X  a  Mu  [        UUUU5      u  pýUR                  UU/UU/UU/UU//U45        [        XØ5      nM±     [        R                  " U5      n[        X‰5      n[        R                  " U5      U-  nU(       a  [        US S	9nUU4$ )
N)r   r   rñ   rò   r   r   r
   r   c                 ó   • U S   S   S   $ )Nr   r   r&   r  s    r   r)   Ú get_image_list.<locals>.<lambda>n  s   € ¸¸a¹À¹ÀAºr+   r,   )r¢   r   r�   r	  rJ  rö   rR  r2   rõ   ÚmathÚceilr  r0   )r'  rç   rP  rQ  r&  Ú
image_listÚ	maximum_yÚ	maximum_xÚmax_ratio_horiÚmax_ratio_freerB  rû   Útransformed_imgrI  Ú	new_widthÚcrop_imgr.  r-  r0  r/  r2  r1  Ú	max_ratioÚ	max_widths                           r   Úget_image_listrb  D  sù  € Ø€JØŸ)™)Ñ€Ià%(Ñ"€NÛˆÜ�xŠx˜ YÑ/ˆÜ.¨sÓ9ˆÜ × 5Ñ 5°aÑ 8¸×9NÑ9NÈqÑ9QÓRˆÜ˜Ñ*Ó+ˆ	Ø˜‹>Ùä5°o×F[ÑF[Ð\]ÑF^Ð_n×_tÑ_tÐuvÑ_wð  yEó  F‰NˆHØ×Ñ ˜~Ô/Ü  Ó7ŠNñ ô —Y’Y˜~Ó.€NãˆÜ�A�c˜!‘f“ˆÜ�C˜‘F˜9Ó%ˆÜ�A�c˜!‘f“ˆÜ�C˜‘F˜9Ó%ˆØ�u˜u�} e¨E kÐ1Ñ2ˆØ˜‘ˆØ˜‘ˆÜ  fÓ-ˆÜ˜Ñ*Ó+ˆ	Ø˜‹>Ùä5°h¸uÀVÈLÓY‰NˆHØ×Ñ 5¨ -°°u°¸uÀU¸mÈUÐSXÈMÐ!ZÐ\dÐeÔgÜ  Ó7ŠNñ ô" —Y’Y˜~Ó.€NÜ�NÓ3€IÜ—	’	˜)Ó$ \Ñ1€IæÜ˜JÑ,FÑGˆ
Ø�yÐ Ð r+   c                 ó  • [         R                  R                  US5      nU(       a  [        SSSS9OS n[	        XUS9  [        US5       nUR                  X5        S S S 5        [         R                  " U5        g ! , (       d  f       N%= f)Nztemp.zipú	Progress:ÚCompleteé2   ©ÚprefixÚsuffixrÉ   ©Ú
reporthookr²   )ÚosÚpathrÄ   ÚprintProgressBarr   r   ÚextractÚremove)ÚurlÚfilenameÚmodel_storage_directoryÚverboseÚzip_pathrk  ÚzipObjs          r   Údownload_and_unziprw  q  sh   € Ü�w‰w�|‰|Ð3°ZÓ@€HÞW^Ô!¨¸ZÐPRÒSÐdh€JÜ�¨*Ò5Ü	�˜3Ô	 6Ø�‰�xÔ9÷ 
 ä‡I‚IˆhÕ÷ 
 Õ	ús   ÁA<Á<
B
c                 ó  ^• [         R                  " 5       n[        U S5       m[        U4S jS5       H  nUR	                  U5        M     S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)NÚrbc                  ó&   >• T R                  S5      $ )Ni   )r¹   )Úfs   €r   r)   Úcalculate_md5.<locals>.<lambda>|  s   ø€  !§&¡&¨¤,r+   r+   )ÚhashlibÚmd5r¸   ÚiterÚupdateÚ	hexdigest)ÚfnameÚhash_md5Úchunkr{  s      @r   Úcalculate_md5r…  y  sh   ø€ Ü�{Š{‹}€HÜ	ˆe�TÔ	˜aÜÔ.°Ö4ˆEØ�O‰O˜EÖ"ñ 5÷ 
ð ×ÑÓÐ÷ 
Ô	ð ×ÑÓÐús   £)A$Á$
Bc                 ó0   • [        U 5      [        U 5      -
  $ rZ   )rõ   r  )Ú
input_lists    r   r   r   €  s   € Üˆz‹?œ3˜z›?Ñ*Ð*r+   c                 ó,
  • / nU  H”  nUS    Vs/ s H  n[        US   5      PM     nnUS    Vs/ s H  n[        US   5      PM     nn[        U5      n	[        U5      n
[        U5      n[        U5      nXË-
  nUR                  US   XšX¼USX¼-   -  S/5        M–     Sn[	        U Vs/ s H  oUS   S:X  d  M  UPM     sn5      S:”  Gaí  U Vs/ s H  oUS   S:X  d  M  UPM     nn[	        U Vs/ s H  oUS   U:X  d  M  UPM     sn5      S:X  a	  XïS   S'   GOqU Vs/ s H  oUS   U:X  d  M  UPM     nn[
        R                  " U Vs/ s H  oUS   PM	     sn5      n[        U Vs/ s H  oUS   PM	     sn5      UU-  -
  n[        U Vs/ s H  oUS   PM	     sn5      UU-  -   n[        U Vs/ s H  oUS   PM	     sn5      UU-  -
  n[        U Vs/ s H  oUS   PM	     sn5      UU-  -   nS	nU H‰  nUUS   s=:*  =(       a    U:*  Os  =(       d    UUS   s=:*  =(       a    U:*  Os  nUUS   s=:*  =(       a    U:*  Os  =(       d    UUS   s=:*  =(       a    U:*  Os  nU(       d  Mz  U(       d  Mƒ  XåS'   S
n  O   US	:X  a  US-  n[	        U Vs/ s H  oUS   S:X  d  M  UPM     sn5      S:”  a  GMí  / n[        S U 5       5       GHÖ  nU Vs/ s H  oUS   U:X  d  M  UPM     nn[
        R                  " U Vs/ s H  oUS   PM	     sn5      n[        U Vs/ s H  oUS   PM	     sn5      n[        U Vs/ s H  oUS   PM	     sn5      n[        U Vs/ s H  oUS   PM	     sn5      n[        U Vs/ s H  oUS   PM	     sn5      nSn[	        U5      S:”  aâ  [        U Vs/ s H  oUS   PM	     sn5      nU Vs/ s H  oUS   USU-  -   :  d  M  UPM     nnUS:X  a5  [        U Vs/ s H  oUS   PM	     sn5      nU H  nUS   U:X  d  M  UnM     O:US:X  a4  [        U Vs/ s H  oUS   PM	     sn5      n U H  nUS   U :X  d  M  UnM     USWS   -   -  nUR                  U5        [	        U5      S:”  a  Mâ  UR                  UU/UU/UU/UU//USS  /5        GMÙ     U$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nr   r   r    r  rã   r
   r   r   FTc              3   ó*   #   • U  H	  oS    v •  M     g7f)r  Nr&   )Ú.0rB  s     r   Ú	<genexpr>Ú get_paragraph.<locals>.<genexpr>«  s   é € Ð-¢9˜C�Q–¢9ùs   ‚r#   r  gš™™™™™Ù?ÚltrÚrtlrƒ   )	rö   r  rõ   r2   r   r   r  Úsetrp  )!Ú
raw_resultÚx_thsÚy_thsr   Ú	box_grouprB  ÚcoordÚall_xÚall_yÚmin_xÚmax_xÚmin_yÚmax_yr1  Úcurrent_groupÚ
box_group0Úcurrent_box_groupÚmean_heightÚmin_gxÚmax_gxÚmin_gyÚmax_gyÚadd_boxÚsame_horizontal_levelÚsame_vertical_levelr   r~   r}   ÚhighestÚ
candidatesÚ	most_leftÚbest_boxÚ
most_rights!                                    r   Úget_paragraphr«  ƒ  s'  € à€IÛˆØ,/°ªFÓ3ªF 5”�U˜1‘X–©FˆÐ3Ø,/°ªFÓ3ªF 5”�U˜1‘X–©FˆÐ3Ü�E“
ˆÜ�E“
ˆÜ�E“
ˆÜ�E“
ˆØ‘ˆØ×Ñ˜#˜a™& %°¸fÀcÈ5É;ÑFWÐYZÐ[Ö\ñ ð €MÜ
™iÓ5ši�s¨q©6°1©9�s™iÑ5Ó
6¸Ô
:Ù%.Ó<¢Y˜c°a±&¸!±)—c¡Yˆ
Ð<ä™yÓBšy˜°©F°MÑ,A—™yÑBÓCÀqÓHØ,�q‰M˜!Óñ 1:Ó S²	¨À¹VÀ]Ñ=R§±	ÐÐ SÜŸ'š'Ñ5FÓ"GÒ5F¨c q¤6Ñ5FÑ"GÓHˆKÜÑ,=Ó>Ò,= S˜aœ&Ñ,=Ñ>Ó?À%ÈÑBSÑSˆFÜÑ,=Ó>Ò,= S˜aœ&Ñ,=Ñ>Ó?À%ÈÑBSÑSˆFÜÑ,=Ó>Ò,= S˜aœ&Ñ,=Ñ>Ó?À%ÈÑBSÑSˆFÜÑ,=Ó>Ò,= S˜aœ&Ñ,=Ñ>Ó?À%ÈÑBSÑSˆFØˆGÛ!�Ø)/°°Q±×)?Ó)?¸Ô)?×(\ÀVÈSÐQRÉV×E[ÓE[ÐU[ÔE[Ð%Ø'-¨s°1©v×'=Ó'=°vÔ'=×&ZÀ6È3ÈqÉ6×CYÓCYÐSYÔCYÐ#ß(Ð(×-@Ð-@Ø*˜‘FØ"�GÙñ "ð ˜‹~Ø Ñ"�ô/ ™iÓ5ši�s¨q©6°1©9�s™iÑ5Ó
6¸Ö
:ð2 €FÜÑ-¡9Ó-×-ˆÙ,5ÓCªI S¸Q¹À¹ŸS©IÐÐCÜ—g’gÑ1BÓCÒ1B¨# 1œvÑ1BÑCÓDˆÜÑ(9Ó:Ò(9 ˜!”fÑ(9Ñ:Ó;ˆÜÑ(9Ó:Ò(9 ˜!”fÑ(9Ñ:Ó;ˆÜÑ(9Ó:Ò(9 ˜!”fÑ(9Ñ:Ó;ˆÜÑ(9Ó:Ò(9 ˜!”fÑ(9Ñ:Ó;ˆàˆÜÐ#Ó$ qÓ(ÜÑ->Ó?Ò-> c˜qœ6Ñ->Ñ?Ó@ˆGÙ):Ó]Ò): #À!¹fÀWÈSÐQ\É_ÑE\Ñ>\Ÿ#Ñ):ˆJÐ]à�u‹}Ü±:Ó >²:¨C Q¤±:Ñ >Ó?�	Û%�CØ˜1‘v Õ*°sªHò &à˜“Ü ±JÓ!?²J¨S a¤&±JÑ!?Ó@�
Û%�CØ˜1‘v Õ+¸ªXñ &à�C˜ ™‘OÑ#ˆDØ×$Ñ$ XÔ.ô Ð#Ó$ qÕ(ð 	�‰˜& ˜¨&°¨¸&À¸È&ÐQWÈÐYÐ[_Ð`aÐ`bÐ[cÐd×eñ1 .ð4 €Mùò} 4ùÚ3ùò 6ùÚ<ùâBùò !TùÚ"GùÚ>ùÚ>ùÚ>ùÚ>ùò 6ùò6 DùÚCùÚ:ùÚ:ùÚ:ùÚ:ùò @ùÚ]ùò !?ùò "@s¬   �R(°R-Â(R2Â8R2ÃR7ÃR7Ã/R<Ã?R<ÄSÄ-SÅ	SÅ'SÆSÆ/SÇSÊSÊ#SËS$Ë#S$Ë?S)
ÌS.
Ì;S3
ÍS8
Í7S=
Î&T
Î?TÏTÏ,T
Ð'T
c                 ó$   ^ ^^^^• UUUU U4S jnU$ )aË  
    Call in a loop to create terminal progress bar
    @params:
        prefix      - Optional  : prefix string (Str)
        suffix      - Optional  : suffix string (Str)
        decimals    - Optional  : positive number of decimals in percent complete (Int)
        length      - Optional  : character length of bar (Int)
        fill        - Optional  : bar fill character (Str)
        printEnd    - Optional  : end character (e.g. "", "
") (Str)
    c           
      ó¾   >• X-  U-  nS[        T5      -   S-   R                  US-  5      n[        T	U-  5      nTU-  ST	U-
  -  -   n[        ST
 SU SU ST 3S	S
9  g )Nz{0:.zf}éd   Ú-Úz |z| z% r#   )Úend)ÚstrÚformatrö   Úprint)ÚcountÚ	blockSizeÚ	totalSizeÚprogressÚpercentÚfilledLengthÚbarÚdecimalsÚfillrÉ   rh  ri  s          €€€€€r   Úprogress_hookÚ'printProgressBar.<locals>.progress_hookÓ  s}   ø€ ØÑ$ yÑ0ˆØœC ›MÑ)¨DÑ0×8Ñ8¸ÀC¹ÓHˆÜ˜6 HÑ,Ó-ˆØ�\Ñ! C¨6°LÑ+@Ñ$AÑAˆÜ��6�(˜"˜S˜E  G 9¨B¨v¨hÐ7¸RÓ@r+   r&   )rh  ri  r¼  rÉ   r½  r¾  s   ````` r   rn  rn  È  s   ü€ ÷Añ Að Ðr+   c           	      ó‚  • [        U 5      [        :X  aÏ  U R                  S5      (       d  U R                  S5      (       aQ  [        U [	        SSSS9S9u  p[
        R                  " U[
        R                  5      n[        R                  " U5        OD[
        R                  " U [
        R                  5      n[        R                  R                  U 5      n [        U 5      nXC4$ [        U 5      [        :X  a—  [        R                  " U [        R                   5      n[
        R"                  " U[
        R$                  5      n[
        R&                  " U[
        R(                  5      n[
        R&                  " U[
        R*                  5      nXC4$ [        U 5      [        R,                  :X  Ga‹  [/        U R0                  5      S:X  a*  U n[
        R&                  " U [
        R2                  5      nXC4$ [/        U R0                  5      S	:X  aQ  U R0                  S   S
:X  a>  [        R4                  " U 5      n[
        R&                  " U[
        R2                  5      nXC4$ [/        U R0                  5      S	:X  a=  U R0                  S   S	:X  a*  U n[
        R&                  " U [
        R*                  5      nXC4$ [/        U R0                  5      S	:X  ak  U R0                  S   S:X  aX  U S S 2S S 2S S	24   n[
        R&                  " U[
        R6                  5      n[
        R&                  " U[
        R*                  5      nWW4$ [        U 5      [8        R:                  :X  ac  [        R<                  " U 5      n[
        R&                  " U[
        R6                  5      n[
        R&                  " U[
        R*                  5      nXC4$ [?        S5      e)Nzhttp://zhttps://rd  re  rf  rg  rj  r
   r   r   r   zTInvalid input type. Supporting format = string(file path or url), bytes, numpy array) Útyper²  Ú
startswithr   rn  r÷   ÚimreadÚIMREAD_GRAYSCALErl  rp  rm  Ú
expanduserr	   Úbytesr   Ú
frombufferÚuint8ÚimdecodeÚIMREAD_COLORÚcvtColorÚCOLOR_BGR2RGBÚCOLOR_BGR2GRAYÚndarrayr   r¢   ÚCOLOR_GRAY2BGRÚsqueezeÚCOLOR_RGB2BGRr   ÚJpegImageFiler�   Ú
ValueError)rú   Útmprb   Úimg_cv_greyrP  ÚnparrÚimage_arrays          r   Úreformat_inputrØ  Ü  sÎ  € ÜˆEƒ{”cÓØ×Ñ˜I×&Ñ&¨%×*:Ñ*:¸:×*FÑ*FÜ  Ô4DÈkÐdnÐy{Ñ4|Ñ}‰FˆCÜŸ*š* S¬#×*>Ñ*>Ó?ˆKÜ�IŠI�c�NäŸ*š* U¬C×,@Ñ,@ÓAˆKÜ—G‘G×&Ñ& uÓ-ˆEÜ˜Óˆð8 ÐÐô7 
ˆe‹œÓ	Ü—’˜e¤R§X¡XÓ.ˆÜ�lŠl˜5¤#×"2Ñ"2Ó3ˆÜ�lŠl˜3¤× 1Ñ 1Ó2ˆÜ—l’l 3¬×(:Ñ(:Ó;ˆð. ÐÐô+ 
ˆe‹œŸ
™
Ô	"Üˆu�{‰{Ó˜qÓ ØˆKÜ—,’,˜u¤c×&8Ñ&8Ó9ˆCð$ ÐÐô# �—‘Ó Ó" u§{¡{°1¡~¸Ó':ÜŸ*š* UÓ+ˆKÜ—,’,˜{¬C×,>Ñ,>Ó?ˆCð ÐÐô �—‘Ó Ó" u§{¡{°1¡~¸Ó':ØˆCÜŸ,š, u¬c×.@Ñ.@ÓAˆKð ÐÐô �—‘Ó Ó" u§{¡{°1¡~¸Ó':Øšš!˜B˜Q˜B˜‘-ˆCÜ—,’,˜s¤C×$5Ñ$5Ó6ˆCÜŸ,š, s¬C×,>Ñ,>Ó?ˆKð �ÐÐô 
ˆe‹œ×5Ñ5Ó	5Ü—h’h˜u“oˆÜ�lŠl˜;¬×(9Ñ(9Ó:ˆÜ—l’l 3¬×(:Ñ(:Ó;ˆð ÐÐô ÐoÓpÐpr+   c                 ót  • [        U [        R                  5      (       a  [        U R                  5      S:X  d  [        U [
        5      (       aÜ  / / pCU  Hh  n[        U5      u  pgUb3  Ub0  [        R                  " XaU45      n[        R                  " XqU45      nUR                  U5        UR                  U5        Mj     [        R                  " U5      [        R                  " U5      pC[        UR                  5      S:X  a$  [        UR                  5      S:X  a  [        S5      eX44$ [        U 5      u  p4X44$ )a  
reformats an image or list of images or a 4D numpy image array &
returns a list of corresponding img, img_cv_grey nd.arrays
image:
    [file path, numpy-array, byte stream object,
    list of file paths, list of numpy-array, 4D numpy array,
    list of byte stream objects]
r   r   z‰The input image array contains images of different sizes. Please resize all images to same shape or pass n_width, n_height to auto-resize)Ú
isinstancer   rÎ  r   r¢   r´   rØ  r÷   rM  r2   r�   rÓ  )rú   Ún_widthÚn_heightrP  rÕ  Ú
single_imgÚclrÚgrys           r   Úreformat_input_batchedrà    s  € ô 
�Eœ2Ÿ:™:×	&Ñ	&¬3¨u¯{©{Ó+;¸qÓ+@ÄZÐPUÔW[×E\ÑE\à˜rˆ[ÛˆJÜ% jÓ1‰HˆCØÑ" xÑ';Ü—j’j °Ð&9Ó:�Ü—j’j °Ð&9Ó:�Ø�J‰J�sŒOØ×Ñ˜sÖ#ñ  ô Ÿ8š8 C›=¬"¯(ª(°;Ó*?ˆ[äˆs�y‰y‹>˜QÓ¤3 {×'8Ñ'8Ó#9¸QÓ#>Üð oó pð pð ÐÐô *¨%Ó0ÑˆØÐÐr+   c                 óÞ   • US S  nSnU  H_  nU HV  n[         R                  " US   USS9nUR                  u  px[        X‡5      n	[	        X95      nUR                  US   U45        MX     Ma     U$ )Nr   T)Úreshaper   )r   Úrotater¢   rJ  rõ   r2   )
ÚrotationInfoÚimg_listÚresult_img_listr`  ÚangleÚimg_infoÚrotatedr1  r2  rI  s
             r   Úmake_rotated_img_listrê  "  sz   € à™q�k€Oð €IãˆÛ ˆHÜ—n’n X¨a¡[°%ÀÑFˆGØ"Ÿ=™=‰LˆFÜ# EÓ1ˆEÜ˜IÓ,ˆIØ×"Ñ" H¨Q¡K°Ð#9Ö:ó !ñ ð Ðr+   c           	      óð   • / n[        [        U S   5      5       HS  n[        [        [        U 5      5       Vs/ s H  o3X   U   S   4PM     snS S9S   nUR                  X   U   5        MU     U$ s  snf )ab  Select highest confidence augmentation for TTA
Given a list of lists of results (outer list has one list per augmentation,
inner lists index the images being recognized), choose the best result 
according to confidence level.
Each "result" is of the form (box coords, text, confidence)
A final_result is returned which contains one result for each image
r   r
   c                 ó   • U S   $ r  r&   r'   s    r   r)   Ú,set_result_with_confidence.<locals>.<lambda>@  s   € ˜!˜Aš$r+   r,   )r£   r   rõ   r2   )ÚresultsÚfinal_resultÚcol_ixÚrow_ixÚbest_rows        r   Úset_result_with_confidenceró  3  s‡   € ð €LÜœ˜G A™J›Ö(ˆäÜ@EÄcÈ'ÃlÔ@SÓTÒ@S°f�g‘o fÑ-¨aÑ0Ó1Ñ@SÑTÙñ à !ñ#ˆð 	×Ñ˜GÑ-¨fÑ5Ö6ñ )ð Ðùò	 Us   ¸A3
)r   r   )r   )gš™™™™™¹?r    r    r_   gš™™™™™©?T)é@   T)T)r   r    r�  )r#   r#   r   r®  u   â–ˆ)NN)2Ú
__future__r   rÅ   ÚpickleÚnumpyr   rV  r÷   ÚPILr   r   Úscipyr   r}  Úsysrl  Úzipfiler   Úimgprocr	   Úversion_infoÚsix.moves.urllib.requestr   Úurllib.requestr   r@   rB   rW   r�   r•   rš   r�   r®   Úobjectr°   rï   r	  rG  rJ  rR  rb  rw  r…  r   r«  rn  rØ  rà  rê  ró  r&   r+   r   Ú<module>r     sû   ðÝ %ã Û Û Û Û 
ß &Ý Û ß Ý Ý à×Ñ�AÑ˜!ÓÞ4å*ôð 56°a°5ÀÀ!¸uÑ,EÒ\eô ÷@	ñ 	÷%ñ %òN#ôô"%òN2ð
 ;=È"ô Yôxo˜ô oòb(òTô,i"òVòô+!ôZò ò+ôBôJò(%ôPò<ó"r+   