
    9 ri)                     ~   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rS SK	r
S SKrS SKJr  S SKJr  S SKrS SKJrJr  \" 5       r\R*                  " S/5      r " S S	\5      rS
\4S jrS rS rS\S\4S jrS rS rS rS r S rS\S\!4S jr"S r#S r$S\S\4S jr%\RM                  S5      S\S\4S j5       r'g)    )FastAPIResponse)	BaseModelN)fuzz)convert_from_path)ImageImageOpsenc                   *    \ rS rSr% \\S'   \\S'   Srg)	InputData   
input_namefile N)__name__
__module____qualname____firstlineno__str__annotations____static_attributes__r       &/var/www/html/aadhar_voter_ocr/main.pyr   r      s    O
Ir   r   urlc                 h    [         R                  " U 5      nUR                  S:w  a  g UR                  $ )N   )requestsgetstatus_codecontent)r   resps     r   download_filer"      s+    <<D3<<r   c                     [        SS5       nUR                  U 5        S S S 5        [        SSS9n[        R                  " 5       nUS   R                  USS9  UR                  5       $ ! , (       d  f       NP= f)Nztemp.pdfwbi,  )dpir   JPEG)format)openwriter   ioBytesIOsavegetvalue)	pdf_bytesfpages	img_bytess       r   convert_pdf_to_imager2      sb    	j$	1		 
 jc2E

I	!HMM)FM+ 
 	s   A))
A7c                     U R                   S S u  pU [        US-  5      [        US-  5      2[        US-  5      [        US-  5      24   n[        R                  " SU5        U$ )N   gQ?gzG?gQ?g)\(?zdebug_roi.jpg)shapeintcv2imwrite)imghwrois       r   crop_aadhaar_regionr=   '   sa    99Ra=DA c!D&k#af+%s1T6{3qv;'>>
?CKK%Jr   textreturnc                 X    U R                  5       nSU;   d  SU;   a  gSU;   d  SU;   a  gg)Ngovernment of indiavidaadhaarzelection commission of indiaelectorvoterauto)lower)r>   
text_lowers     r   detect_card_typerI   /   s4    J
*ez.A%3yJ7Nr   c                    US:X  a%  [         R                  " U [         R                  5      $ US:X  a%  [         R                  " U [         R                  5      $ US:X  a%  [         R                  " U [         R                  5      $ U $ NZ        r7   rotateROTATE_90_CLOCKWISE
ROTATE_180ROTATE_90_COUNTERCLOCKWISEr9   angles     r   rotate_imagerV   7   _    {zz#s6677|zz#s~~..|zz#s==>>Jr   c           
          / nU  HU  nUS   nUS   US   su  pEu  pgUR                  [        R                  " [        R                  " Xu-
  Xd-
  5      5      5        MW     U(       a  [        R
                  " U5      $ S$ )Nr      )appendmathdegreesatan2npmedian)resultsanglesrboxx1y1x2y2s           r   estimate_text_anglerh   @   sn    Fd VSV(2dll4::bgrw#?@A  !'299V-A-r   c                    U R                   S S u  p[        X5      nUS:  aB  SU-  n[        R                  " U [	        X$-  5      [	        X-  5      4[        R
                  S9nOU n[        R                  USSS9nU(       d  U $ [        U5      nSUs=::  a  S::  a  O  OS	nO(SUs=:  a  S
::  a  O  OSnOSUs=::  a  S:  a  O  OSnOSn[        X5      $ )Nr4   i  )interpolationrY   F)detail	paragraph-   r      rN   iyrL   rM   )
r5   maxr7   resizer6   
INTER_AREAreaderreadtextrh   rV   )	r9   r:   r;   max_dimscalesmallr`   rU   	rotate_bys	            r   auto_correct_rotationry   H   s    99Ra=DA!iG }g

^S^,..
  ooeAo?G
(E er		e	s							''r   c                     [         R                  " [        R                  " U 5      5      n[        R
                  " U5      n[        R                  " [        R                  " U5      [        R                  5      $ ! [         a     g f = f)N)r   r(   r*   r+   r	   exif_transposer7   cvtColorr^   arrayCOLOR_RGB2BGR	Exception)image_bytesr9   s     r   fix_exif_orientationr   k   s_    jjK01%%c*||BHHSM3+<+<== s   A8A; ;
BBc                    US:X  a%  [         R                  " U [         R                  5      $ US:X  a%  [         R                  " U [         R                  5      $ US:X  a%  [         R                  " U [         R                  5      $ U $ rK   rO   rT   s     r   rV   rV   s   rW   r   c                 ~    U R                  5       n[        S U 5       5      =(       a    [        S U  5       5      S:  $ )Nc              3   >   #    U  H  n[        U5      S :  v   M     g7f)   N)len).0r;   s     r   	<genexpr>'looks_like_real_name.<locals>.<genexpr>   s     'ACFaKs   c              3   4   #    U  H  oS ;   d  M
  Sv   M     g7f)
aeiouAEIOUrY   Nr   )r   cs     r   r   r      s     1t!L0AAts   		r   )splitallsum)r>   wordss     r   looks_like_real_namer   |   s8    JJLE''' 	71t11Q6r   c                    [         R                  " U [         R                  5      n[         R                  " U5      n[         R                  " USS[         R
                  [         R                  -  5      S   n[        R                  " [        R                  " US:  5      5      n[        U5      S:  a  U $ [         R                  " U5      S   nUS:  a  SU-   * nOU* n[        U5      S:  a  U $ U R                  S S	 u  pV[         R                  " US	-  US	-  4US
5      n[         R                  " XXe4[         R                   [         R"                  S9$ )Nr      rY   d   rm   rL      r4   g      ?)flags
borderMode)r7   r|   COLOR_BGR2GRAYbitwise_not	thresholdTHRESH_BINARYTHRESH_OTSUr^   column_stackwherer   minAreaRectabsr5   getRotationMatrix2D
warpAffineINTER_CUBICBORDER_REPLICATE)r9   graythreshcoordsrU   r:   r;   Ms           r   deskew_imager      s   <<S//0D??4 D]]aCOO+ 	F
 __RXXfqj12F
6{S
OOF#B'Es{u*
5zB
YYr]FQaa 0%=A>>oo'' r   c           	         [        U 5      nUcJ  [        R                  " U [        R                  5      n[        R
                  " U[        R                  5      n[        U5      nS GHU  n[        X5      n[        U5      n[        R                  USS9 VVVs/ s H  u  pVowS:  d  M  UPM     nnnnSR                  U5      n	[        U	5      n
U
S:X  aN  [        U5      n[        R                  USS9n[        SR                  U5      R!                  5       5      S	:  a  UnOUnSR                  U5      n["        R$                  " S
U["        R&                  5      nU(       a7  UR)                  S5      R+                  5       nUR-                  5       S;  a  Us  $ ["        R$                  " SU["        R&                  5      nU(       a!  UR)                  S5      R+                  5       s  $ U H  nUR+                  5       n["        R.                  " SU5      (       d  M1  [        UR!                  5       5      S:  d  MP  [1        U5      (       d  Mb  UR-                  5       S;  d  Mx  ["        R2                  " SSU["        R&                  S9R+                  5       n[        UR!                  5       5      S:  d  M  Us  s  $    GMX     g s  snnnf )N)r   rL   rM   rN   rY   )rk   g      ?
rC   r    r   zName[^A-Za-z]*([A-Za-z\s]+))malefemaletransgenderrA   z&Elector'?s Name[^A-Za-z]*([A-Za-z\s]+)z^[A-Za-z\s]+$r4   z\b(MALE|FEMALE|Transgender)\b )r   )r   r^   
frombufferuint8r7   imdecodeIMREAD_COLORry   rV   r   rs   rt   joinrI   r=   r   r   research
IGNORECASEgroupstriprG   matchr   sub)r   base_imgnp_arrrU   r9   bboxr>   confresults_full	text_full	card_typer<   r`   r   	candidatelines                   r   extract_name_from_imager      s%   #K0H{BHH5<<(8(89 %X.H #8+3 8>sST7Ud7U!3$d`cYc7UdIIl+	$Y/	
 	!"3'??3q?1!'')*Q."G"Gyy!		8$NA,,.I (``  		CT2==Y;;q>''))D::<D)400&!+)$//::<'__66"BBTVTaTabhhjD4::<(A-# E #Z O es   K
(K
namec                 0   U (       d  g U R                  SS5      R                  5       n [        R                  " SSU 5      n U R	                  5        Vs/ s H#  n[        R
                  " SU5      (       d  M!  UPM%     nnSR                  US S 5      $ s  snf )Nr   r   z\s+z^[A-Za-z]+$r   )replacer   r   r   r   r   r   )r   ttokenss      r   
clean_namer     su    <<c"((*D66&#t$DEA.!)DaFE88F2AJ Fs    B7Bz/extract_namedataresponsec                   #    [        U R                  5      nU(       d  SUl        U R                  S SSS.$ [	        U5      n[        U5      nU(       d  SUl        U R                  S SSS.$ [        R                  " U R                  R                  5       R                  5       UR                  5       R                  5       5      nUS:  a  S	Ul        S
nSnOSUl        SnSnU R                  UUUUS.$ 7f)Ni  errorzCould not download file)r   extracted_namestatusmessagei  not_detectedzName could not be detectedP   r   matchedMatchednot_matchedzNot matched)r   r   r   
similarityr   )
r"   r   r   r   r   r   r   ratior   rG   )r   r   
file_bytesextracted_rawcleaned_namer   r   r   s           r   extract_namer     s     tyy)J"//"0	
 	
 ,J7Mm,L"//"$3	
 	
 DOO11399;\=O=O=Q=W=W=YZJR"" oo&  s   C2C4)(fastapir   r   pydanticr   easyocrr   r   r7   numpyr^   r[   	rapidfuzzr   	pdf2imager   r*   PILr   r	   appReaderrs   r   r   r"   r2   r=   rI   rV   rh   ry   r   boolr   r   r   r   postr   r   r   r   <module>r      s    %    	 
    ' 	  i 
		 
s  3 3 .!(Fs t f8v S  S   /,Y ,( , ,r   