a
    Š-gJ  ã                   @   sô   d dl Z d dlZd dl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mZ e ¡ Zej ed¡Zej ed¡Zej ed¡Zg d¢ZdZd	Zd
d„ Zddd„Zdd„ Zdd„ Zddd„Zdd„ Zdd„ Zedkrðee j!d ƒ dS )é    N)Údate)Ú
itemgetterÚ
attrgetterzdata/ID_CARD_KEYWORDS.csvzdata/RELIGIONS.csvzdata/JENIS_KELAMIN.csv)é   é   é   é   é
   é   é   é   é   é   é   é   é   é   é	   r   c                 C   s0   | | | }d||dk < d||dk< |  tj¡S )Nr   éÿ   )ÚastypeÚnpÚuint8)ÚimgÚalphaÚbetaZnew_img© r   ú&/var/www/html/ocr/e-KTP-OCR-CNN/ocr.pyÚconvertScale   s    r   r	   c                 C   sö   t  | t j¡}t  |gdgd dgddg¡}t|ƒ}g }| t|d ƒ¡ td|ƒD ]"}| ||d  t|| ƒ ¡ qR|d }||d 9 }|d }d}|| |k r¬|d7 }q–|d }	||	 || krÎ|	d8 }	q´d|	|  }
| |
 }t| |
|d}|S )	Nr   é   é   éÿÿÿÿg      Y@g       @r   )r   r   )	Úcv2ÚcvtColorÚCOLOR_BGR2GRAYÚcalcHistÚlenÚappendÚfloatÚranger   )ÚimageZclip_hist_percentÚgrayÚhistZ	hist_sizeZaccumulatorÚindexÚmaximumZminimum_grayZmaximum_grayr   r   Zauto_resultr   r   r   Ú!automatic_brightness_and_contrast   s(     


r.   c           
      C   sÈ   t  | d¡} t  | t j¡}t  t jd¡}t  t jd¡}t  |dd¡}t  |t j|¡}t	| |ƒ}|dkrnt
dƒ‚t j|t g d¢¡gd	d
 t  |ddt j¡\}}dtj_tj|ddd}	t|	ƒ |	|fS )N)i   iô  )é   é   )r   r   )r   r   r   Ú zKTP tidak terdeteksi))é&  é–   )r2   éó  )é  r4   )r5   r3   )r   r   r   )ZptsZcoloré‚   r   Z	tesseractÚindz--psm 4 --oem 3)ZlangÚconfig)r!   Úresizer"   ÚCOLOR_RGB2GRAYÚgetStructuringElementÚ
MORPH_RECTÚGaussianBlurÚmorphologyExÚMORPH_BLACKHATÚreturn_id_numberÚ	ExceptionÚfillPolyr   ÚasarrayÚ	thresholdÚTHRESH_TRUNCÚpytesseractZtesseract_cmdZimage_to_stringÚprint)
r)   Úimg_grayÚ
rectKernelZsqKernelr*   ZblackhatÚ	id_numberZthZthreshedÚ
result_rawr   r   r   Úocr_raw@   s    
rL   c                 C   s0   |   d¡}g }|D ]}| d¡r| |¡ q|S )NÚ
ú )ÚsplitÚstripr&   )rK   Úresult_listZnew_result_listZ
tmp_resultr   r   r   Ústrip_opc   s    

rR   úleft-to-rightc                    sj   d}d‰ |dks|dkrd}|dks,|dkr0d‰ dd	„ | D ƒ}t tt | |ƒ‡ fd
d„|dŽ \} }| |fS )NFr   zright-to-leftzbottom-to-topTztop-to-bottomr   c                 S   s   g | ]}t  |¡‘qS r   )r!   ÚboundingRect)Ú.0Úcr   r   r   Ú
<listcomp>w   ó    z!sort_contours.<locals>.<listcomp>c                    s   | d ˆ  S )Nr   r   )Úb©Úir   r   Ú<lambda>x   rX   zsort_contours.<locals>.<lambda>©ÚkeyÚreverse)ÚzipÚsorted)ÚcntsÚmethodr_   ZboundingBoxesr   rZ   r   Úsort_contoursm   s    $rd   c           0   
   C   sî  t  t jd¡}t  |t j|¡}t j|t jdddd}t |¡}t 	|¡t 
|¡ }}d|| ||   }| d¡}t  |t j|¡}t  |ddt jt jB ¡d }t  |t j|¡}t  | ¡ t jt j¡\}}	|}
|  ¡ }t  ||
ddd	¡ |  ¡ }g }t|
ƒD ]l\}}t  |¡\}}}}|d
krú|dkrú|dk rút  |||f|| || fdd¡}| |||||| f¡ qút|tdƒdd}d}zd| |d d d |d d |d d	  d …|d d d |d d |d d  d …f }d}W n0 ty } zt|ƒ W Y d }~dS d }~0 0 |dkræt  d¡}t  |t j¡}t  |ddt j ¡d }t  | ¡ t jt j¡\}}	t!|ddd }i }t|ƒD ]L\}}t  |¡\}}}}|||| …||| …f }t  "|d¡}|||< q‚t  |t j¡}t  |ddt j ¡d }t  | ¡ t jt j¡\}} | ¡ }!t  |!|ddd	¡ |d d }"|d d }#|d d }$|d d	 }%t!|ddd }&g }'t|&ƒD ]d\}}t  |¡\}}}}|d
krt|d
krtt  |!||f|| || fdd¡}|' ||||f¡ qtg }(g })|'D ]’}|\}}}}|||| …||| …f }t  "|d¡}g }*| #¡ D ]6\}+},t  $||,t j%¡}-t  &|-¡\}.}/}.}.|* |/¡ q*|) t't (|*¡ƒ¡ qæt  | |"d |#d f|"|$ d |#|% d fdd¡ t  )| d *|)¡|"|#d ft j+ddd¡ |( ,|)¡ d *|(¡S dS d S )N)r   r   r   r   r    )ZddepthÚdxÚdyZksizer   r   )r   r   r   r   r	   éd   i,  )r   r   r   é   Fr]   r   Tr1   zdata/module2.pngéB   rS   )rc   )é9   éX   é   é   )-r!   r;   r<   r>   ÚMORPH_TOPHATÚSobelÚCV_32Fr   ÚabsoluteÚminÚmaxr   ÚMORPH_CLOSErD   ÚTHRESH_BINARYÚTHRESH_OTSUÚfindContoursÚcopyÚRETR_EXTERNALÚCHAIN_APPROX_SIMPLEÚdrawContoursÚ	enumeraterT   Ú	rectangler&   ra   r   rA   rG   Úimreadr"   r#   ÚTHRESH_BINARY_INVrd   r9   ÚitemsÚmatchTemplateÚ	TM_CCOEFFÚ	minMaxLocÚstrÚargmaxÚputTextÚjoinÚFONT_HERSHEY_SIMPLEXÚextend)0r)   rH   rI   ZtophatZgradXÚminValÚmaxValZthreshZ
threshCntsZ	hierarchyrb   Zcur_imgrx   Zlocsr[   rV   ÚxÚyÚwÚhr   Z	check_nikÚnikÚeZimg_modÚrefZrefCntsÚdigitsÚroiZgray_nikÚgroupZ	digitCntsZhierarchy_nikZnik_rZgXZgYZgWZgHÚctxZlocs_xÚoutputZgroupOutputZscoresZdigitZdigitROIÚresultÚ_Zscorer   r   r   r@   |   s”    

"\

"2&

r@   c           )         sð
  t jtd d}t jtd d}t jtd d}t| ƒ\}}t|ƒ}d}d}d}	d}
d}d}d}d}d}d}d}d}d}d}d}tƒ }t|ƒD ]d\}}t| 	d¡ƒD ]L\}‰ ‡ fdd„|d j
D ƒ}t |¡}t |¡}|| dkrž||||f< qžqˆg }d}t|ƒD ]ö\}}g }t| 	d¡ƒD ]¤\}‰ ˆ  d	¡‰ ||f|v r–d
}|||f tkr\| |¡ g }| |d j
|||f  ¡ |||f tv rº| d	¡ n$ˆ d	ksˆ dkr°qn
| ˆ ¡ q|rþt|ƒdkrêd	|vrê|d  |¡ qþ| |¡ qþ|D ]Ð} d| v r|  d¡ d| v r^d | dd … ¡}t dd|¡}t| 	¡ ƒdkr^t dd|¡}d| v srd| v r²d | dd … ¡}t dd|¡}t| 	¡ ƒdkr²t dd|¡}d| v rüd | dd … ¡}
t dd|
¡}
t|
 	¡ ƒdkrüt dd|
¡}
d| v r¶t|ƒdkr|d|v r*| dd¡}d|v r@| dd¡}d|v rV| dd¡}t| ƒdkrp|  ¡  qV|  |¡ n:t| ƒdkr–|  ¡  q|t| ƒdk r®|  |¡ || d< d| v rDt| dd … ƒD ]r\}!‰ ‡ fdd„|d j
D ƒ}t |¡}t |¡}t|| ƒ || dkrÐ|d j
| | |!d < | |!d  }qÐd | v sXd!| v r–z,d | dd … ¡}t d"|¡}d |¡}W n   d}Y n0 d#| v rbtt| ƒƒD ]´}!d$| |! v rÒ| |!  d$d%¡| |!< d| |! v rô| |!  dd%¡| |!< d&| |! v r| |!  d&d%¡| |!< d | dd … ¡}t d'd|¡ ¡ }t| 	¡ ƒdkr¬t d(d|¡ ¡ }q¬d)| v rætt| ƒƒD ]l}!d$| |! v rž| |!  d$d¡| |!< d&| |! v rÀ| |!  d&d¡| |!< d | dd … ¡}t d*|¡ ¡ }qxd+| v r²tt| ƒƒD ]´}!d$| |! v r"| |!  d$d%¡| |!< d| |! v rD| |!  dd%¡| |!< d&| |! v rf| |!  d&d%¡| |!< d | dd … ¡}t d'd|¡ ¡ }t| 	¡ ƒdkrüt d(d|¡ ¡ }qüd,| v r~tt| ƒƒD ]´}!d$| |! v rî| |!  d$d%¡| |!< d| |! v r| |!  dd%¡| |!< d&| |! v r2| |!  d&d%¡| |!< d | dd … ¡}t d'd|¡ ¡ }t| 	¡ ƒdkrÈt d(d|¡ ¡ }qÈd-| v s’d.| v r
t| dd … ƒD ]f\}!‰ ‡ fd/d„|d j
D ƒ}t |¡}t |¡}|| dkr¢|d j
| | |!d < | |!d  }q¢d0| v rTd | dd … ¡}t d1d|¡}t| 	¡ ƒdkrTt d2d|¡}d3| v ržd | dd … ¡}t dd|¡}t| 	¡ ƒdkržt dd|¡}d4| v s¼d5| v s¼d6| v rúd | ¡}"t d7|"¡}#t d8|"¡}$t d9|"¡}%t d:|"¡}&t d;|"¡}'t d<|"¡}(|#	rNz$tj  |# ¡ d=¡ !¡ }| "d>¡}W n   d}Y n0 n:|$	rŒz$tj  |$ ¡ d?¡ !¡ }| "d>¡}W n   d}Y n0 nü|%	rÊz$tj  |% ¡ d@¡ !¡ }| "d>¡}W n   d}Y n0 n¾|&
rz$tj  |& ¡ dA¡ !¡ }| "d>¡}W n   d}Y n0 n€|'
rFz$tj  |' ¡ d>¡ !¡ }| "d>¡}W n   d}Y n0 nB|(
r„z$tj  |( ¡ d>¡ !¡ }| "d>¡}W n   d}Y n0 nd}z0d | dd … ¡}t dB|¡}d |¡ ¡ }W n   d}Y n0 qú||
|||||||||||||fS )CN)Úheaderr1   rN   c                    s    g | ]}t j |ˆ  d ¡¡‘qS )ú:)ÚtextdistanceÚdamerau_levenshteinÚnormalized_similarityrP   ©rU   Z	tmp_word_©Ztmp_wordr   r   rW     rX   zmain.<locals>.<listcomp>r   g333333ã?Fr›   Trh   r    u   â€”ZPROVINSIr   z[^A-Z. ]z[^A-Z.]Z	KABUPATENZKOTAZNamaZNIKé   ÚDÚ0Ú?Ú7ÚLÚ1r   ZAgamac                    s   g | ]}t j ˆ |¡‘qS r   ©rœ   r   rž   rŸ   r    r   r   rW   V  rX   ZStatusZ
Perkawinanz\s+([A-Za-z]+)ZAlamatú!ÚIr[   z[^A-Z0-9. ]z
[^A-Z0-9.]zRT/RWz\d{3}/\d{3}zKel/DesaZ	KecamatanZJenisZKelaminc                    s   g | ]}t j ˆ |¡‘qS r   r¨   rŸ   r    r   r   rW   ž  rX   Z	Pekerjaanz[^A-Za-z./ ]z[^A-Za-z./]ZKewarganegaraanZTempatZTglZLahiru    ([0-9]{2}â€”[0-9]{2}â€”[0-9]{4})z([0-9]{2}\ [0-9]{2}\ [0-9]{4})z([0-9]{2}\-[0-9]{2}\ [0-9]{4})z([0-9]{2}\ [0-9]{2}\-[0-9]{4})z([0-9]{2}-[0-9]{2}-[0-9]{4})z([0-9]{2}\-[0-9]{2}\-[0-9]{4})u   %dâ€”%mâ€”%Yz%d-%m-%Yz%d %m %Yz%d-%m %Yz%d %m-%Yz[A-Z\s])#ÚpdZread_csvÚLINE_REC_PATHÚRELIGION_REC_PATHÚJENIS_KELAMIN_REC_PATHrL   rR   Údictr|   rO   Úvaluesr   rC   r…   rP   Ú	NEXT_LINEr&   Ú
NEED_COLONr%   r‰   Úremover‡   ÚreÚsubÚreplaceÚpoprG   Úfindallr(   Úsearchr•   ÚdatetimeÚstrptimer   Ústrftime))r)   Zraw_dfZreligion_dfZjenis_kelamin_dfrK   rJ   rQ   ÚprovinsiÚ	kabupatenr   ÚnamaÚtempat_lahirÚ	tgl_lahirÚjenis_kelaminÚalamatÚstatus_perkawinanÚagamaÚrt_rwÚkel_desaÚ	kecamatanÚ	pekerjaanÚkewarganegaraanZ	loc2indexr[   Ztmp_lineÚjZtmp_sim_listZ
tmp_sim_npZarg_maxZlast_result_listZuseful_infoZtmp_listZtmp_dataZ	tmp_indexZjoin_tmpZ
match_tgl1Z
match_tgl2Z
match_tgl3Z
match_tgl4Z
match_tgl5Z
match_tgl6r   r    r   Úmainç   s°   



























þrÌ   Ú__main__r   )r	   )rS   )"r!   Únumpyr   ÚosZpandasr«   rF   r´   rœ   rº   r   Úoperatorr   r   ÚgetcwdZ	ROOT_PATHÚpathr‡   r¬   r­   r®   r²   r±   Z	ID_NUMBERr   r.   rL   rR   rd   r@   rÌ   Ú__name__ÚsysÚargvr   r   r   r   Ú<module>   s6   
&#

k  