
    y h|                     :   d dl mZmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dl ddlmZ ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlZddlZej>                  d   d	k(  rdd
l m!Z! ddl"m#Z# ddl$m%Z% nddl&m#Z# ddl'm%Z%  ee(      Z) G d de*      Z+y)   )get_recognizerget_text)group_text_boxget_image_listcalculate_md5get_paragraphdownload_and_unzipprintProgressBardiffreformat_inputmake_rotated_img_listset_result_with_confidencereformat_input_batchedmerge_to_free)*    )get_displayN)Image)	getLogger   )open)urlretrieve)Pathc                       e Zd Z	 	 	 	 	 ddZd Zd Zd Zd Zd Zd Z		 	 	 	 	 dd	Z
	 	 	 	 	 	 dd
Z	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 ddZy)ReaderNc           
         |
| _         || _        t        dz   | _        |r|| _        t	        | j                        j                  dd       t        dz   | _        |r|| _        t	        | j                        j                  dd       t        j                  j                  | j                         |du rd| _
        |
rt        j                  d       n|du rut        j                  j                         rd| _
        nVt        j                   j"                  j                         rd	| _
        n&d| _
        |
rt        j                  d
       n|| _
        t$        | _        t&        | _        ddg| _        |f| _        || _        |r| j/                  |      }i }|dgt&        d   D cg c]  }| c}z   t&        d   D cg c]  }| c}z   v r|t&        d   D cg c]  }| c}v rt&        d   |   }d}|d   | _        n|t&        d   D cg c]  }| c}v rt&        d   |   }d}|d   | _        nt3        |      t3        t4              z
  }|t3               k7  rt7        |d      |dgk(  r%| j9                  d|dgd       t&        d   d   }d}n}d|v r&| j9                  d|ddgd       t&        d   d   }d}nSd|v r&| j9                  d|ddgd       t&        d   d   }d}n)d |v r&| j9                  d!|d dgd"       t&        d   d#   }d}nd$|v r&| j9                  d%|d$dgd&       t&        d   d'   }d}nd(|v r&| j9                  d)|d(dgd*       t&        d   d+   }d}nd,|v r&| j9                  d-|d,dgd.       t&        d   d/   }d}nd0|v r&| j9                  d1|d0dgd2       t&        d   d3   }d}nWd4|v r&| j9                  d5|d4dgd6       t&        d   d7   }d}n-t3        |      t3        t:              z  r+| j9                  d8|t:        dgz   d9       t&        d   d:   }d}nt3        |      t3        t<              z  r+| j9                  d;|t<        dgz   d<       t&        d   d=   }d}nt3        |      t3        t>              z  r+| j9                  d>|t>        dgz   d?       t&        d   d@   }d}n[t3        |      t3        t@              z  r+| j9                  dA|t@        dgz   dB       t&        d   dC   }d}ndD| _        t&        d   dE   }d}|dF   | _!        tD        j                  jG                  | j                  |dG         }|	r^tD        j                  jI                  |      dk(  r| j                  stK        dH|z        t        j                  dI       tM        |dJ   |dG   | j                  |
       tO        |      |dK   k(  sJ tP               t        jS                  dL       ntO        |      |dK   k7  r| j                  stK        dM|z        t        j                  tP               tE        jT                  |       t        j                  dN       tM        |dJ   |dG   | j                  |
       tO        |      |dK   k(  sJ tP               t        jS                  dO       | jW                  ||       ntY        tD        j                  jG                  | j                  |dPz         dQR      5 }t[        j\                  |tZ        j^                  S      }dTdTdT       dU   r|dU   a0|dV   }| j9                  |||tc        |             |dW   | _!        |dXz   }tD        j                  jG                  | j                  |      }| jW                  ||       i }|D ]-  }tD        j                  jG                  td        dY|dZz         ||<   / |r| jg                        | _4        |	rR|dk(  rd[d\d\d]}n|dk(  rd[d^d^d]}nd_   }tk        ||| jB                  |||| j                  |`      \  | _6        | _7        yTyTc c}w c c}w c c}w c c}w # 1 sw Y   6xY w)aaD  Create an EasyOCR Reader

        Parameters:
            lang_list (list): Language codes (ISO 639) for languages to be recognized during analysis.

            gpu (bool): Enable GPU support (default)

            model_storage_directory (string): Path to directory for model data. If not specified,
            models will be read from a directory as defined by the environment variable
            EASYOCR_MODULE_PATH (preferred), MODULE_PATH (if defined), or ~/.EasyOCR/.

            user_network_directory (string): Path to directory for custom network architecture.
            If not specified, it is as defined by the environment variable
            EASYOCR_MODULE_PATH (preferred), MODULE_PATH (if defined), or ~/.EasyOCR/.

            download_enabled (bool): Enabled downloading of model data via HTTP (default).
        z/modelT)parentsexist_okz/user_networkFcpuz7Using CPU. Note: This module is much faster with a GPU.cudampszdNeither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.craftdbnet18standardgen1gen2generation1model_scriptgeneration2zis not supportedenenglishz["en"]
english_g2ththaiz["th","en"]thai_g1ch_trachinese_traz["ch_tra","en"]	zh_tra_g1ch_simchinese_simz["ch_sim","en"]	zh_sim_g2jajapanesez["ja","en"]japanese_g2kokoreanz["ko","en"]	korean_g2tatamilz["ta","en"]tamil_g1teteluguz["te","en"]	telugu_g2knkannadaz["kn","en"]
kannada_g2bengaliz["bn","as","en"]
bengali_g1arabicz["ar","fa","ur","ug","en"]	arabic_g1
devanagariz["hi","mr","ne","en"]devanagari_g1cyrillicz-["ru","rs_cyrillic","be","bg","uk","mn","en"]cyrillic_g2latinlatin_g2
charactersfilename!Missing %s and downloads disabledzqDownloading recognition model, please wait. This may take several minutes depending upon your network connection.urlmd5sumzDownload complete.*MD5 mismatch for %s and downloads disabledzxRe-downloading the recognition model, please wait. This may take several minutes depending upon your network connection.Download completez.yamlutf8encoding)LoaderNimgH	lang_listcharacter_listz.pthdict.txtr   i   )input_channeloutput_channelhidden_size   network_params)devicequantize)8verbosedownload_enabledMODULE_PATHmodel_storage_directoryr   mkdiruser_network_directorysyspathappendrd   LOGGERwarningtorchr    is_availablebackendsr!   detection_modelsrecognition_modelssupport_detection_networkre   cudnn_benchmarkgetDetectorPath
model_langsetall_lang_list
ValueErrorsetModelLanguagebengali_lang_listarabic_lang_listdevanagari_lang_listcyrillic_lang_list	characterosjoinisfileFileNotFoundErrorr	   r   corrupt_msginforemovesetLanguageListr   yamlload
FullLoaderrZ   str	BASE_PATHinitDetectordetectorr   
recognizer	converter)selfr[   gpuri   rk   detect_networkrecog_networkrg   r   r   rf   re   rw   detector_pathseparator_listmodelunknown_lang
model_pathfilerecog_configavailable_lang
model_file	dict_listlangrc   s                            k/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/easyocr/easyocr.py__init__zReader.__init__    sg   ,  0'2X'=$"+BD(T))*000M&1O&C#!*@D'T(()//t/L334%<DKXYD[zz&&($##002##NN  $J  KDK 0"4 +29)=&i, 00@M ZL?QRX?Y+ZeE+ZZ  rD  EK  rL  ^Mhm^c  ^M  M  M4Fv4N O5 OO*62=A -"'"76H6P"QU5"QQ*62=A -"'"7"9~M0BB35($\3EFF&)))YQ.v6|DE$1MY&))&)d4[-X.v6yAE$1M*))-XdOUfg.v6{CE$1M*))-XdOUfg.v6{CE$1MY&))*i$tm\.v6}EE$1MY&))(IT{MZ.v6{CE$1MY&))'9tDk=Y.v6zBE$1MY&))(IT{MZ.v6{CE$1MY&)))Yd][.v6|DE$1M^c*;&<<)))Y@QSWRX@XZlm.v6|DE$1M^c*:&;;))(I?OQUPV?VXtu.v6{CE$1M^c*>&??)),	CWY]X^C^`wx.v6GE$1M^c*<&==))*iASUYTZAZ*Y[.v6}EE$1M&-DO.v6zBE$1M"<0DNd&B&BE*DUVJ77>>*-600/0SV`0`aaNN $k l&uU|U:5FHdHdfmn(4hGTTGKK 45":.%/A00/0\_i0ijjNN;/IIj)NN $k l&uU|U:5FHdHdfmn(4hGTTGKK 34  E2 bggll4#>#>w@VWbhi Gmq#yydooFG F##F+)+6N!!-NCP^L_`)*:;DN&.Jd&B&BJOJ  L9	 	MD ggll9fdVmLIdO	M  --m<DM-%&&)#&"
 -/%&&)#&" "..>!?.<]N9=9BJY]YdYdow/y+DOT^ o ,[  ^M O #RxG Gs$   &	`9>	`>	a	a3&aac                    || j                   v r|| _        | j                  dk(  r	ddlm}m} n"| j                  dv r	ddlm}m} nt        d      || _        || _        d}t        j                  j                  | j                  | j                  | j                     d         }t        j                  j                  |      dk(  r| j                  st        d	|z        t        j!                  d
       t#        | j                  | j                     d   | j                  | j                     d   | j                  | j$                         t'        |      | j                  | j                     d   k(  sJ |       t        j)                  d       |S t'        |      | j                  | j                     d   k7  r| j                  st        d|z        t        j!                  |       t        j*                  |       t        j!                  d       t#        | j                  | j                     d   | j                  | j                     d   | j                  | j$                         t'        |      | j                  | j                     d   k(  sJ |       |S t        dj-                  dj                  | j                                     )Nr"   r   )get_detectorget_textbox)r#   zCUnsupport detector network. Support networks are craft and dbnet18.z+MD5 hash mismatch, possible file corruptionrP   FrQ   zoDownloading detection model, please wait. This may take several minutes depending upon your network connection.rR   rS   rU   rT   zvRe-downloading the detection model, please wait. This may take several minutes depending upon your network connection.z4Unsupport detector network. Support networks are {}.z, )rv   r   	detectionr   r   detection_dbRuntimeErrorr   rm   r   ri   rt   r   rg   r   ro   rp   r	   rf   r   r   r   format)r   r   r   r   r   r   s         r   rx   zReader.getDetectorPath   s   T;;;"0D""g-@@$$3CC"#hii*D ,DGKGGLL)E)EtG\G\]a]p]pGqr|G}~Mww~~m,5,,+,OR_,_``  g h"4#8#89L9L#Me#TVZVkVklpll  WA  BL  WM  OS  Ok  Ok  mq  my  my  z$]3t7L7LTM`M`7abj7kkxmxxk/0  }-1F1FtGZGZ1[\d1ee,,+,X[h,hii{+		-(  g h"4#8#89L9L#Me#TVZVkVklpll  WA  BL  WM  OS  Ok  Ok  mq  my  my  z$]3t7L7LTM`M`7abj7kkxmxxk  U\\]a]f]fgk  hF  hF  ^G   H  I  I    c                 h    | j                  || j                  | j                  | j                        S )N)rd   re   rw   )r   rd   re   rw   )r   r   s     r   r   zReader.initDetector  s3      *.++,0MM373G3G ! # 	#r   c                 R    | j                  |      }| j                  |      | _        y )N)rx   r   r   )r   r   r   s      r   setDetectorzReader.setDetector  s$    ,,^<))-8r   c                     || _         t        |      t        |      z
  t               k7  r+|dk(  s|dk(  rd}t        |j                         dz   |z         y )Nr0   r3   chinesez0 is only compatible with English, try lang_list=)ry   rz   r|   
capitalize)r   languager[   	list_langlist_lang_strings        r   r}   zReader.setModelLanguage  sY    "y>C	N*ce38#x8';$X0025ggjzz{{ 4r   c                     t         j                  j                  t        d|      }t	        |dd      5 }|j                         j                         }dj                  |      }d d d        |S # 1 sw Y   S xY w)Nr   r	utf-8-sigrW    )r   rm   r   r   r   read
splitlines)r   fileName	char_file
input_filelistchars         r   getCharzReader.getChar   sf    GGLLKB	)S;7 	!:??$//1D774=D	! 	! s   0A..A8c                     g | _         |D ]t  }t        j                  j                  t        d|dz         }t        |dd      5 }|j                         j                         }d d d        | xj                   z  c_         v |j                  d      r|d   }n|j                  d      r|d   }nd}t        | j                         j                  t        |            | _         d	j                  | j                         | _         y # 1 sw Y   xY w)
Nr   z	_char.txtr   r   rW   symbolsr\   z+0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ r   )	lang_charr   rm   r   r   r   r   r   getrz   union)r   r[   r   r   r   r   	char_listsymbols           r   r   zReader.setLanguageList'  s     	(DYTK=OPIi= <'__.99;	<NNi'N		(
 99Y9%FYY'(+,FDFT^^,223v;?0< <s   DD	c                 P   |rt        |      \  }}| j                  | j                  ||||||d| j                  |||||      }g g }}|D ]  }t	        |||	|
|||d u       \  }}|r|D cg c]&  }t        |d   |d   z
  |d   |d   z
        |kD  s%|( }}|D cg c]H  }t        t        |D cg c]  }|d   	 c}      t        |D cg c]  }|d   	 c}            |kD  sG|J }}}|j                  |       |j                  |        ||fS c c}w c c}w c c}w c c}}w )NF)canvas_size	mag_ratiotext_thresholdlink_thresholdlow_textpolyrd   optimal_num_chars	thresholdbbox_min_scorebbox_min_sizemax_candidatesr   r      r   )r   r   r   rd   r   maxr   rn   )r   imgmin_sizer   r   r   r   r   	slope_thsycenter_ths
height_ths	width_ths
add_marginreformatr   r   r   r   r   img_cv_greytext_box_listhorizontal_list_aggfree_list_aggtext_boxhorizontal_list	free_listics                               r   detectzReader.detect7  s    -c2C(($'2=095C5C/7+0-1[[8I095C4A5C ) &  .0]% 	,H)7)8CZ8A:9Jd9R*U&OY .= #:aD1Q4K1!B.08B91 #: #:(1 R1S*1!A$*+T2CA1Q42C-D6FHP6QQ R	 R&&7  +	, #M11#: +2CRs6   )&DDD".D:D"	DD"$D"
D"c                    |rt        |      \  }}|r1dj                  t        | j                        t        |      z
        }nW|	rdj                  t        |	            }n:dj                  t        | j                        t        | j                        z
        }| j
                  dv rd}|d k(  r|d k(  r|j                  \  }}d|d|gg}g }|dk(  s| j                  dk(  r|sg }|D ]p  }|g}g }t        |||t              \  }}t        | j                  t        t        |      | j                  | j                  |||||||||| j                        }||z  }r |D ]p  }g }|g}t        |||t              \  }}t        | j                  t        t        |      | j                  | j                  |||||||||| j                        }||z  }r nt        |||t              \  }}t        |      }|r|rt        ||      }t!        |t              }t        | j                  t        t        |      | j                  | j                  |||||||||| j                        }|r?||z   r:t#        t%        t        |      dz         D  cg c]  } ||| z  || dz   z    c}       }| j
                  dk(  r3d	}!|D "cg c]  }"t'        |"       }}"|D ]  }"t)        |"d         |"d<    nd
}!|rt+        ||||!      }|
dk(  r|D "cg c]  }"|"d   	 c}"S |dk(  r8|r|D "cg c]  }"|"d   |"d   d c}"S |D "cg c]  }"|"d   |"d   |"d   d c}"S |dk(  r|rU|D "#cg c]G  }"t-        j.                  |"d   D #cg c]  }#t'        t1        t        |#             c}#|"d   dd      I c}#}"S |D "#cg c]K  }"t-        j.                  |"d   D #cg c]  }#t'        t1        t        |#             c}#|"d   |"d   dd      M c}#}"S |dk(  rt3        ||      S |S c c} w c c}"w c c}"w c c}"w c c}"w c c}#w c c}#}"w c c}#w c c}#}"w )Nr   )r1   r4   greedyr   r   r   )model_heightrG   rtlltr)x_thsy_thsmoder]   )boxestextr   )r   r   	confidentjsonF)ensure_ascii
free_merge)r   r   rz   r   r   ry   shaperd   r   rZ   r   intr   r   lenr   r   r   ranger   r   r   r   dumpsmapr   )$r   r   r   r   decoder	beamWidth
batch_sizeworkers	allowlist	blocklistdetailrotation_info	paragraphcontrast_thsadjust_contrast
filter_thsr   r   r   output_formatr   ignore_chary_maxx_maxresultbboxh_listf_list
image_list	max_widthresult0	image_lenr   direction_modeitemlsts$                                       r   	recognizezReader.recognizea  s~    -k:C''#dnn"5c)n"DEK''#i.1K''#dnn"5c$..6I"IJK??;;xWT!	4&,,LE5 !5!U34OI 1_$++"6F' "(6vv{cg(h%
I"4>>4YZ^ZhZhjt)7Iz<Yhjt%t{{4 '!" " "(6vv{cg(h%
I"4>>4YZ^ZhZhjt)7Iz<Yhjt%t{{4 '!" %3?I{ko$p!J	JI2=*M
	40	dnndC	NDOOUYUcUceo%w	:|Udfp!4;;0F /)"; 4BGMHZ]^H^B_`QVIaK	1Q38`b ??h&"N-34Td4j4F4 /%d1g.Q/ #N"6eN[FQ;(./DG//f$FLMd$q'a9MMV\]dd1gT!WaI]]f$ GM  N  C

DQRG,TST#c3--@,T\`ab\c#dsxy  N  N W]  ^  OSDJJQ(Pc#sm)<(PX\]^X_lpqrlst  DI  J  ^  ^l* 33M5 a 5 0 N] -U  N(P  ^sN   P5P>PP!1P&P01 P+P0+P; P6&P;+P06P;c                      t        |      \  } }!| j                  | |||||||||||d||||      \  }"}#|"d   |#d   }#}"| j                  |!|"|#||||||||	|
|||||d|      }$|$S )]
        Parameters:
        image: file path or numpy-array or a byte stream object
        Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r  )%r   imager   r   r   r   r  r  r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r   r   r   r   r  s%                                        r   readtextzReader.readtext  s     *%0[%)[[<DWe<DWe?JXa=FVa>HU^>HUZ=FYgANao &1 	&3" &5Q%71_i 'J 'Iv} )< *E5%	P r   c                    ,- t        |      \  } }!| j                  | |||||||||||d||||      \  }"}#|"d   |#d   }#}"| j                  |!|"|#||||||||	|
|||||d|      -g }$d}%t        t	        -            D ]  }&|$j                  -|&   d           d }',-fd}(t        j                  |%      D ]  ,,j                  d      st        d,z   d	d
      5 })t        |)j                         j                               j                  dd      }*t        t	        |$            D ]6  }& |'|*|$|&         }+|+dk7  s,dd dk(  s	,dd dk(  s&t         |(|&             8 	 ddd        y# 1 sw Y   xY w)r  Fr  r   zcharacters/r   c                 ^    d}t        t        |             D ]  }| |   |k(  sd} y |dk(  ryy )NFTr   )r   r   )arrxgr   s       r   searchz#Reader.readtextlang.<locals>.search  sB    A3s8_ q619A Ez r   c                 $    |    }|dd fz   }|S )Nr   r    )r   abrP   r  s      r   tupleaddz%Reader.readtextlang.<locals>.tupleadd  s$    q	AXa]$$AHr   r^   rtrV   rW   
r   r   r   r*   chN)r   r   r  r   r   rn   r   listdirendswithr   r   r   r   replaceprint).r   r  r   r   r   r   r  r  r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r   r   r   r   r   	directoryr   r$  r)  myfilechartrsresrP   r  s.                                               @@r   readtextlangzReader.readtextlang  s    *%0[%)[[<DWe<DWe?JXa=FVa>HU^>HUZ=FYgANao &1 	&3" &5Q%71_i 'J 'Iv} )< *E5%	P !	s6{# 	&AKKq	!%	&		
 

9- 	3H  (=(24H 3F!&++-":":"<=EEd2NG"3t9- 3$WT!W5"9'!}d2hqmT6I %hqk 2	33 3	33 3s   A E,<E,E,,E5	c"                 >   t        |||      \  }"}#| j                  |"|||||||||||d||||       \  }$}%g }&t        |#j                        dk(  r|#gn|#}#t	        |#|$|%      D ]8  \  }'}(})|&j                  | j                  |'|(|)||||||	|
|||||||d|!             : |&S )a6  
        Parameters:
        image: file path or numpy-array or a byte stream object
        When sending a list of images, they all must of the same size,
        the following parameters will automatically resize if they are not None
        n_width: int, new width
        n_height: int, new height
        Fr  r   )r   r   r   r   ziprn   r  )*r   r  n_widthn_heightr   r   r   r   r  r  r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r   r   r   r   
result_agggrey_imgr   r   s*                                             r   readtext_batchedzReader.readtext_batched  s    & 2%(K[-1[[<DWe<DWe?JXa=FVa>HU^>HUZ=FYgANao .9 	.3*] 
'*;+<+<'='B{m47EXZg4h 	]0HoydnnX	,3Y
,3Y	6S`,5|_,6ue]	\ ]	] r   )TNNr"   r$   TTTTTF)   ffffff?皙?r?   
        ?皙?      ?rC  rC  rB  TN皙?rD  r   r   )NNr      r   r   NNr   NFrB  rC  ~jth?rC  rA  Tr$   )r   rE  r   r   NNr   NFr=  rB  rC  rF  r>  r?  r?  r@  rA  rB  rC  rC  rC  rC  rA  rB  rD  rD  r   r   r$   ) NNr   rE  r   r   NNr   NFr=  rB  rC  rF  r>  r?  r?  r@  rA  rB  rC  rC  rC  rC  rA  rB  rD  rD  r   r   r$   )__name__
__module____qualname__r   rx   r   r   r}   r   r   r   r  r  r5  r<  r&  r   r   r   r      s    DH=D<@9=05	IyV!F#9|1  KNDF@CSWZ[	(2T FJABLM38INISUn NOKLEGHMHK13BEIL\])"H RSKLEGHMHK13BEIL\])<3| >BHISTMOPUPS9;JMQTde'1)r   r   ),recognitionr   r   utilsr   r   r   r   r	   r
   r   r   r   r   r   r   configbidir   numpynpcv2rq   r   rl   PILr   loggingr   r   r   version_infoior   six.moves.urllib.requestr   pathlib2r   urllib.requestpathlibrG  ro   objectr   r&  r   r   <module>rZ     s{    29 9 9 9    
  	 
    A!4*	8	eV er   