a
    gK                     @   s   z$d dl mZ d dlmZ d dlZW n ey>   d dlZY n0 d dlZd dlmZ d dlZd dl	Z	d dl
Z
d dlmZ d dlT d dlZd dlZd dlZd dlT d dlZd dlmZ d dlmZ d	Zd
d ZG dd dZG dd deZdS )    )Image)uuid4N)Output)convert_from_path)*)datetime)CounterFc                   C   s   dS )N  r
   r
   r
   ^/mnt/bigdisk/leo/remi/toosmart/soft/v2017b/4_specific/TOOSMART_DIGICOCHE/2_tools/ocr/Holvia.pygetTime   s    r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )bcolorsz[95mz[94mz[96mz[92mz[93mz[91mz[0mz[1mz[4mN)__name__
__module____qualname__HEADEROKBLUEOKCYANOKGREENWARNINGFAILENDCBOLD	UNDERLINEr
   r
   r
   r   r      s   r   c                   @   s   e Zd ZdZdZdZdZdZg Zg Z	i Z
dZdZdZdZdZdZd	ZdZg ZdZdZdZdZdZd
Zg Zdd Zdd Zdd Zdd Zdd Zdd Z dS )Holviatoosmartr	   i5Hf7MSHKkPN1hy   r   g        z#COCHE[ ]?FILIE[ ]?RE[ ]?LBC[ ]?[Vv]i  z,/home/serge/www/toosmart_digicoche/data/tmp/Fc                 C   sl   zP|| _ || _tj| j| j| j| j d| _| j | _|| _|| _	|| _
|| _W n   | d Y n0 d S )N)hostuserpasswddbu*   Erreur de connexion à la base de données)sqlDbsqlHostMySQLdbconnectsqlUser	sqlPasswdconncursorpdfoutputFileName	ocrFolderdebug
printDebug)selfr*   r+   ocrDirectorydbNamer#   r-   r
   r
   r   __init__D   s    
zHolvia.__init__c                 C   s"   | j d | | _ | jrt| d S )Nz<br />)	_debugOCRr-   print)r/   pTxtr
   r
   r   r.   T   s    zHolvia.printDebugc                 C   sp  zzg }t | j| j}d}g }W nH tyj } z0| d|dt| | d W Y d }~n
d }~0 0 |D ]}zZdt| d }|| jd t| d d t	
| jd t| d }| }	t	|t	j}
t	|
dd	t	jt	j d
 }t	t	jd}t	j|t	j|d
d}t	|t	jt	j}t|dkr@|d n|d
 }|D ]}t	|	|gddd
 qLtjt|	ddd}t	| jd t| d |	 || |t !| jd t| d  |d
 }W qp tyX } zlt"# \}}}|j$j%j&}|j'}t(d| t(d| t(d| | d|dt| | d W Y d }~qpd }~0 0 qpt)*| j+|d }|d ur|, | _-nDt)*d|d }|d urd| _-n"t(d d| _.| |d  W dS t)/d|d }t|dkrt|d | _0| |d  z8t)/d|d t)j1}t|dkr8|D ]}|| _2q*W nP ty } z6d | _2| d!|dt| | d" W Y d }~n
d }~0 0 | j2d kr| 3 rt(d# d| _.W dS d}|D ]Z}| | t)/d$|}t|dkr8| j45| t|| j6 | _6|D ].}t7| j8t7t9|d :d%d&d' d'| _8qzNt)/d(|d t)j1}t|dkr|D ]"}|d :d&d | _;|d | _<q`W nJ ty } z0| d!|dt| | d" W Y d }~n
d }~0 0 z&tj=|| tj>j?d)}| @|| W n   | d Y n0 |d
 }qz>t !| j| jA d* Bd+}|j| j| jA d, d| jCd- W n ty } zlt"# \}}}|j$j%j&}|j'}t(d| t(d| t(d| | d|dt| | d W Y d }~n
d }~0 0 W n tyj } zlt"# \}}}|j$j%j&}|j'}t(d| t(d| t(d| | d|dt| | d W Y d }~n
d }~0 0 d S ).Nr   zUnexpected err=, type(err)=ERRORPage_.jpgJPEG         )(   r=   )
iterations   )r<   r<   r<   fraz --oem 0 --psm 4)langconfig_result.jpgException type: File name: Line number: Unexpected e=
, type(e)=z-COCHE[ ]?FIL[ \/]?([IE])[BR]E[ ]?LBC[ ]?[Vv]?zCOCHE FILIERE LBC VPFz{"blNonIntegrable":1}TFu*   Livré le ([0-9]{1,2}\/[0-9]{2}\/[0-9]{4})z2Bon de livraison[\n]+[0-9]{3}[a-zA-Z ]+ ([0-9]{8})r	   zUnexpected1 err=ERROR1z{"blEnDoublon":1}z'([0-9]{1,3}[.,][0-9]{1,2}).*([0-9]{10}),.   z3TOTAL MARCHANDISES\D+(([0-9])+)\D+(([0-9.,])+)\D+KG)output_typez-color-0.jpgRGBz-BL.pdf)save_allappend_images)Dr   r*   ocrDpi	Exceptionr.   typestrsaver,   cv2imreadcopycvtColorCOLOR_BGR2GRAY	thresholdTHRESH_BINARY_INVTHRESH_OTSUgetStructuringElement
MORPH_RECTmorphologyEx
MORPH_OPENfindContoursRETR_EXTERNALCHAIN_APPROX_SIMPLElendrawContourspytesseractimage_to_stringnparrayimwriteappendr   opensysexc_infotb_framef_codeco_filename	tb_linenor4   researchcleCochegrouptypeLivraisonnonIntegrablefindalldateLivraison	MULTILINE_numBlblExist
linesPoidsextendqttCocheCalculeroundpoidsTotalCalculefloatreplacepoidsTotalDetecteqttCocheDetecteimage_to_datar   DICTsurlignerZonesr+   convertmergedImage)r/   imageAmelioreeSurligneepagesPdfiPageocrReturnArrayerrpage
image_nameimgresultgraythreshhorizontal_kernelremove_horizontalcntscdfeexception_typeexception_objectexception_tracebackfilenameline_numbermelementjSfilepoidtesseract_outputimr
   r
   r   readZ   s     




"



"

 


, "



$



zHolvia.readc                 C   s  z$t | jd t| d }g }W nD tyh } z,td|dt| td W Y d }~n
d }~0 0 t|d D ]R\}}|dkrvd|d	 |  d|d
 |  d|d |  d|d |  d|d | |d | d}t|d | dkrd}	n t|d | dkrd}	nd}	zl|	 }
t 
|
|d |d f|d |d  |d |d  f|	t j d}t |
||d| d}|| W qv ty } z,td|dt| td W Y d }~qvd }~0 0 qvzt |t j}t|d}|j\}}|d |d f}||d}|dkr(| j| || j| j d t| d  W nF ty } z,td td |dt| W Y d }~n
d }~0 0 d!S )"Nr8   rE   zUnexpectedC err=r6   ERRORClevel   r=   lefttopwidthheightr   conftext)xyr   r   rotation
confidencer   U   )*         2   )r      r<   )r   r   r<   r   r   g      ?zUnexpectedD err=ERRORDrP      z-color-r9   erreurzUnexpectedE err=T)rX   rY   r,   rV   rT   r4   rU   	enumerateintrZ   	rectangleFILLEDaddWeightedrn   r[   COLOR_BGR2RGBr   	fromarraysizeresizer   r   rW   r+   )r/   r   r   imageASurlignerblockASurlignerr   i	level_idxbboxcoloroverlayalphar   r   r   new_sizeresized_imager
   r
   r   r     sZ    


$ 

&.zHolvia.surlignerZonesc              
   C   s  z| j rW dS | jD ]T}|d t| t|d dd d|d dd  |d d| j|d dd  < qzt| jd		d
| _W n   d| _Y n0 zt
 	d}dt| d t| j d | j d t| j d t| j d t| j d t| j d t| j d | j d | j d | jdd d }z| j| W nF ty } z,td|dt| td W Y d }~n
d }~0 0 | jj}tdt| d  | jD ]}d| _z| j| d | _W n   d| _d| _Y n0 t| j| d dd  }dt| d t| j| d  d t| d t| j| d  d t| j d t| j d | j d }| j| q| j  W n ty } zlt \}	}
}|j j!j"}|j#}td|	 td| td | | $d!|d"t| | $d# W Y d }~n
d }~0 0 W n ty } zlt \}	}
}|j j!j"}|j#}td|	 td| td | | $d!|d"t| | $d# W Y d }~n
d }~0 0 d S )$NFr   r=   r@   r   r	   )poidsdateZeleveurZtuerielotz%d/%m/%Yz%Y%m%dz
%Y%m%d%H%MzINSERT INTO tier_att(id_base, id_type, id_tier,attdatcre, id_work, actif, newobj, att1, att2, att3,att6,att7,att8,att9,attf100,att17,att90) VALUES (1, 10, NULL,'z', 16, 1, 0,z, 'z', 'z',''z\'z');UnexpectedA err=r6   zERROR A2z{"blId":}r   r   zINSERT INTO prod_att(id_base, id_type, id_prod, id_work, actif, newobj, fid_prod, type, name, revision, `desc`, att1, att2, att3, att4, attf100, attf101,attf104) VALUES (1, 11, NULL, 11, 1, 0, null, null, null, null, null, 'r   rF   rG   rH   rI   rJ   r7   )%r{   r   rV   quantiemeVersDater   
lineMergedr   strptimer}   strftimenow
idAbattoirrz   r   r   r   r   r   r3   r   r)   executerT   r4   rU   	lastrowid
enAnomaliedateLivraisonLigner(   closerp   rq   rr   rs   rt   ru   r.   )r/   	linePoidscurrentDatesqlr   blIdkeynumeroTuerier   r   r   r   r   r   r
   r
   r   	mergeDataO  s   
R





$



zHolvia.mergeDatac              
   C   s   zt  j}|d dkr$|d dks0|d dkr6d}nd}tddD ]F}|| |krDt|td	| td	|||d      W S qDW nD ty } z,td
|dt| td W Y d }~n
d }~0 0 d S )Nr   r   d   i  )r      <   [   y               i  i1  iO  in  )r   r   ;   Z   x   r            i  i0  iN  im  r=      z{:02d}r   r6   z	ERROR A4 )	r   r   yearrangerV   formatrT   r4   rU   )r/   najmr   r   r
   r
   r   r     s    
$<zHolvia.quantiemeVersDateN)!r   r   r   r&   r#   r'   r"   r   r   	linesLotsr   r}   rz   r   
poidsTotalrx   rS   r,   r+   motsASurligner
dateTuerier   r   r   r   r{   r   r2   r.   r   r   r   r   r
   r
   r
   r   r   )   s>    >8`r   )PILr   uuidr   jsonImportErrorri   r   rX   rp   rv   	pdf2imager   TSLibOCRtimeosnumpyrk   TS_OCRr$   r   collectionsr   r-   r   r   r   r
   r
   r
   r   <module>   s.   