a
    gKE                     @   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/SBA.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__ZHEADERZOKBLUEZOKCYANZOKGREENWARNINGZFAILZENDCZBOLDZ	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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 )SBAZtoosmartr	   Zi5Hf7MSHKkPN1hy   r   g        u$   2 [CÇ]O[CÇ]HE FILIE[RP.]+E LBC VPFi  z,/home/serge/www/toosmart_digicoche/data/tmp/Fc                 C   s   zx|| _ || _tj| j| j| j| j d| _| j | _|| _|| _	|| _
| d | dt|  | dt|  W n   | d Y n0 d S )N)hostuserpasswddbu#   Connexion à la base de données OKzpdfs = zoutputFileName = u*   Erreur de connexion à la base de données)sqlDbsqlHostMySQLdbconnectsqlUser	sqlPasswdconncursorpdfoutputFileName	ocrFolder
printDebugstr)selfr    r!   ocrDirectorydbNamer   r
   r
   r   __init__G   s    
zSBA.__init__c                 C   s    | j d | | _ trt| d S )Nz<br />)	_debugOCRdebugprint)r%   pTxtr
   r
   r   r#   Z   s    zSBA.printDebugc                 C   s   zg }t | j| j}d}g }W nH tyf } z0| d|dt| | d W Y d }~n
d }~0 0 |D ]}zd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
 qHt	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
 qtjt|	ddd}t	| jd t| d |	 || |t !| jd t| d  |d
 }W ql ty } z0| d|dt| | d W Y d }~qld }~0 0 qlzt"#d|d }|d urt$%|& d'd| _(t$%|& d'd| _)t"#| j*|d }|d ur|& | _+n t,d|d  d  d| _-W dS W nJ tyn } z0| d|dt| | d W Y d }~n
d }~0 0 z.t".d|d t"j/}|D ]}|d
 | _0qW nP ty } z6d| _0| d |dt| | d! W Y d }~n
d }~0 0 | j0dkr| 1 rt,d" d| _-dS d}|D ]}| d#t|d
  d$  | | | j+dkrt".d%|}t|dkr| j23| t|| j4 | _4|D ].}t5| j6t5t7|d 8d&d'd( d(| _6qzVt".d)|t"j/}t|dkr|D ].}|d 8d'd| _9t5t:|d d | _;qW 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
 }q z8t !| j| j@ d, }|j| j| j@ d- d| jAd. W n   | d Y n0 d S )/Nr   zUnexpected Aerr=, type(err)=ERRORPage_.jpgJPEG         )(   r4      )Z
iterations)r3   r3   r3   )r4   r5   fraz --oem 0 --psm 4)langconfig_result.jpgzUnexpected Berr=z?\b(0[1-9]|[12]\d|3[01])[-/](0[1-9]|1[0-2])[-/](19\d\d|20\d\d)\bz%d/%m/%Yz%Y%m%dz%Yz({"blNonIntegrable":1,"cleCocheDetectee":}TFz7Bon de livraison\n+([\w\W])+APE[\D]+[\d ]+Z? ([0-9]{8})r	   zUnexpected1 err=ZERROR1z{"blEnDoublon":1}zPage  z3[^.0-9]([0-9]{1,3}[.,][0-9]*) Kg P[B38]([0-9?]{10}),.   z2TOTAL MARCHANDISES\D+(([0-9])+)\D+(([0-9.,])+)\D+KzUnexpected2 err=)output_typez-color-0.jpgz-BL.pdf)save_allZappend_images)Br   r    ocrDpi	Exceptionr#   typer$   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researchr   strptimegroupstrftimedateLivraisonanneeLivraisoncleCochetypeLivraisonr+   nonIntegrablefindall	MULTILINE_numBlZblExist
linesPoidsextendqttCocheCalculeroundpoidsTotalCalculefloatreplacepoidsTotalDetecteintqttCocheDetecteimage_to_datar   DICTsurlignerZonesr!   mergedImage)r%   ZimageAmelioreeSurligneeZpagesPdfiPageocrReturnArrayerrZpage
image_nameimgresultZgrayZthreshZhorizontal_kernelZremove_horizontalZcntscZvertical_kernelZremove_verticaldfmelementjZSfileZpoidtesseract_outputimr
   r
   r   read`   s     





""


  


, 
"zSBA.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 qvzzt |t j}t|d}|j\}}|d |d f}||}|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 )"Nr/   r;   zUnexpectedC err=r-   ZERRORClevel   r4   lefttopwidthheightr   Zconftext)xyr   r   Zrotation
confidencer   U   )*         2   )r      r3   )r   r   r3   r   r   g      ?zUnexpectedD err=ZERRORDRGB   z-color-r0   ZerreurzUnexpectedE err=T)rG   rH   r"   r$   rD   r+   rE   	enumeratert   rI   	rectangleFILLEDaddWeightedr]   rJ   COLOR_BGR2RGBr   	fromarraysizeresizery   rF   r!   )r%   r   rz   ZimageASurlignerZblockASurlignerr|   iZ	level_idxZbboxcoloroverlayalphar~   r   r   new_sizeZresized_imager
   r
   r   rx     sZ    


$ 


&.zSBA.surlignerZonesc              
   C   s  zV| j rW dS | jD ]H}|d t| t|d dd | j|d ddd| j|d < qt	 
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yX } 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 d S )"NFr   r4   r   ?7)poidsdatelotz
%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');zUnexpectedF err=r-   zERROR A2z{"blId":r<   r   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   Exception type: File name: Line number: Unexpected e=
, type(e)=r.   )%rh   rl   r$   quantiemeVersDatert   re   rr   
lineMergedr   nowrc   
idAbattoirrg   rp   rs   ru   rn   rd   rk   r)   r   executerD   r+   rE   Z	lastrowid
enAnomalieZdateLivraisonLigner   closesysexc_infotb_framef_codeco_filename	tb_linenor#   )r%   Z	linePoidsZcurrentDateZsqlr|   ZblIdkeyZnumeroTuerieeexception_typeexception_objectexception_tracebackfilenameline_numberr
   r
   r   	mergeDataG  s    
 
n



zSBA.mergeDatac              
   C   s  zt |}|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 qD|d }|d dkr|d dks|d dkrd}nd}tddD ]F}|| |krt|td	| td	|||d      W S qW n ty } z|t \}}}|jjj	}	|j
}
td
| td|	 td|
 | d|dt| | 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  r4      z{:02d}r   r   r   r   r   r.   z<br /> )rt   ranger$   formatrD   r   r   r   r   r   r   r+   r#   rE   )r%   nre   Zjmr   r   r   r   r   r   r   r
   r
   r   r     s4    $8$<




zSBA.quantiemeVersDateN)"r   r   r   r   r   r   r   r   rl   Z	linesLotsr   rd   re   rg   r   Z
poidsTotalrf   rC   r"   r!   motsASurlignerZ
dateTuerierp   rs   rn   ru   rh   ry   r(   r#   r   rx   r   r   r
   r
   r
   r   r   +   s@    08Cr   )PILr   uuidr   ZjsonImportErrorrX   r   rG   r   r_   	pdf2imager   TSLibOCRtimeosnumpyrZ   ZTS_OCRr   r   collectionsr   r*   r   r   r   r
   r
   r
   r   <module>   s.   