a
    g#?                     @   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
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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/Loudeac.pygetTime   s    r   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	g Z
g Zi Zg ZdZdZdZdZdZ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dddZdd Z dS )Loudeactoosmartr	   i5Hf7MSHKkPN1hyi^  z,/home/serge/www/toosmart_digicoche/data/tmp/FzCOCHE L[R]?[B]?C VPFr   g           c                 C   s   zf|| _ || _tj| j| j| j| j d| _| j | _|| _|| _	|| _
| d | dt|  W n   | d Y n0 d S )N)hostuserpasswddbu#   Connexion à la base de données OKz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__9   s    
zLoudeac.__init__c                 C   s    | j d | | _ trt| d S )Nz<br />)	_debugOCRdebugprint)r"   pTxtr
   r
   r   r    K   s    zLoudeac.printDebugc                 C   s  t | j| j}d}g }|D ]}zdt| d }|| j| d t| j| }| }| 	|d}t
| jd t| d | t| jd t| d }| dt   tjt|dd	d
}	||	 | dt   |d }W q ty6 }
 z0| d|
dt|
 | d W Y d }
~
qd }
~
0 0 qtd|d }t|dkrt|d | _| j|d  | d| j  td|d }t|dkrt|d | _| j|d  | d| j  td|d }t|dkrd| _zJtd|d }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 t | j!|d }|d ur|" | _#| jd | d| j#  nTt d|d }|d ur|" | _#| jd | d| j#  nt$d d| _%dS | d |d   z8td!|d tj&}t|dkrl|D ]}|| _'q^W nP ty }
 z6d| _'| d|
dt|
 | d W Y d }
~
n
d }
~
0 0 | j'dkr| ( rt$d" | | j' d| _%dS |D ]}t)d#d$t|d }| j#dkrtd%|}t|dkrt|| _*|D ]&}| j|d  | j|d  qF| d&tt|  | d't|  | j+,| qtj-t|tj.j/d(}z| 0| W n,   t$d)|
dt|
 t$d* Y n0 d S )+N   Page_z.jpgJPEG   z_result.jpgz%s - Lecture OCRfra )langconfigu   %s - Lecture OCR TerminéezUnexpected err=, type(err)=ERRORz)[0-9]{5} ([0-9]{1,2}/[0-9]{1,2}/[0-9]{2})r   zDate de livraison : z1DATE ABATTAG\D+([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2})zDate de la tuerie : zYDATE ABATTAG\D+([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2})[,. ]*([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2})Tz*TOTAL[\W]+GENERAL\D+([\d]+)\D+([\d\,\. ]+).r	   zUnexpected1 err=ERROR1zCOCHE LBC VPFzType de livraison : zPOCHP LDC VPFz{"blNonIntegrable":1}Fz1 : u#   BON LIVRAISON[ ]?N°[\D]+([0-9]{5})z{"blEnDoublon":1}z	, ([0-9])z,\1z([0-9]{4,5})[ -.]([0-9.,]{5})u   Nombre de coches detectées : u   Détail des poids : )output_typezUnexpected2 err=ERROR2)1r   r   ocrDpir!   saver   cv2imreadcopyincrease_brightnessimwriter   openr    r   pytesseractimage_to_stringnparrayappend	ExceptiontyperefindalllendateLivraisonmotsASurligner
dateTueriedateAbattageMultiplereplacepoidsTotalDetecteqttCocheDetectesearchcleCochegrouptypeLivraisonr(   nonIntegrable
IGNORECASE_numBlblExistsubqttCocheCalcule
linesPoidsextendimage_to_datar   DICTsurlignerZones)r"   pagesPdfiPageocrReturnArraypage
image_nameimgimageAmelioreeimageAmelioreeSurligneedferrmelementSfilepoidtesseract_outputr
   r
   r   readQ   s    

" 



 

zLoudeac.readc                    s  | j r
dS | jD ]"}|d d|d d| j|d < qzt| jdd| _W n   d| _Y n0 zt| jdd| _W n   d| _Y n0 t| j| _	z>| jD ]2}t
| jt
t| j| d d	d
d d| _qW nF ty  } z,td|dt| td W Y d }~n
d }~0 0 t d}| jr>d}n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 t| d }z| j| W nN ty@ } z4td|dt| td t| W Y d }~n
d }~0 0 | jj}tdt| d  i  | jD ]Z}z0 t| j| d  d  t| j| d < W n"   d t| j| d < Y n0 qht  fdd d!}| jD ]}t| j| d }	d}
t|	|kr
d"}
d#t| d$ t|	 d t| j| d  d t| j d t|
 d | j d% }z| j| W nF ty } z,td&|dt| td' W Y d }~n
d }~0 0 q| j  d S )(NFr*   r	   r   )poidsdatelotz%d/%m/%yz%Y%m%drp   ,r4      zUnexpectedA err=r2   zERROR A1z
%Y%m%d%H%M      zINSERT INTO tier_att(id_base, id_type, id_tier,attdatcre, id_work, actif, newobj, att1, att2, att3,att6,att7,att8,att9,attf100,att17,att90,att15) VALUES (1, 10, NULL,'z', 16, 1, 0, z, 'z', 'z',''z\'z',z);zERROR A2z{"blId":}rr   c                    s    |  S )Nr
   )kZtuerieLongueurr
   r   <lambda>#      z#Loudeac.mergeData.<locals>.<lambda>)keyZanomaliezINSERT INTO prod_att(id_base, id_type, id_prod, id_work, actif, newobj, fid_prod, type, name, revision, `desc`, att1, att2, att3, att4, attf100, att8,attf104) VALUES (1, 11, NULL, 11, 1, 0, null, null, null, null, null, 'z','', 'z');zUnexpectedB err=ZERRORB) rU   r[   
lineMergedr   strptimerJ   strftimerL   rI   rZ   roundpoidsTotalCalculefloatrN   rE   r(   rF   now
enAnomalier!   
idAbattoirrT   rO   rP   rW   r&   r   execute	lastrowidmaxr   close)r"   	linePoidsr}   ri   currentDateZstatutBLsqlblIdZlongueurNumTueriePlusUtilisenumeroTuerieZanomalieLigner
   rz   r   	mergeData   s    
 
4(
0 
"zLoudeac.mergeDatac                 C   s@  zt | jd }g }W nD ty\ } z,td|dt| td W Y d }~n
d }~0 0 t|d D ]R\}}|dkrjd|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 qj ty } z,td|dt| td W Y d }~qjd }~0 0 qjz4t |t j}t|d}|| j| j d  W nF ty: } z,td td|dt| W Y d }~n
d }~0 0 dS )NzPage_1_result.jpgzUnexpectedC err=r2   ERRORClevel   r*   lefttopwidthheightr   conftext)xyr   r   rotation
confidencer   U   )*         2   )r         )r   r   r   r   r   g      ?zUnexpectedD err=ERRORDRGBz-BL.pdferreurzUnexpectedE err=T)r:   r;   r   rE   r(   rF   	enumerateintr<   	rectangleFILLEDaddWeightedrD   cvtColorCOLOR_BGR2RGBr   	fromarrayr9   r   )r"   rn   imageASurlignerblockASurlignerri   i	level_idxbboxcoloroverlayalphare   r
   r
   r   r_   ;  sL    


< .zLoudeac.surlignerZonesr-   c           	      C   s   t |t j}t |\}}}d| }d|||k< |||k  |7  < t |||f}t |t j}t |dt|j	|j
dd}|S )Nr   g333333?r   r   )r:   r   COLOR_BGR2HSVsplitmergeCOLOR_HSV2BGRr   rB   zerosshapedtype)	r"   re   valueZhsvhsvZlimZ	final_hsvr
   r
   r   r=   m  s    zLoudeac.increase_brightnessc              
   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 n ty } zvt \}}}|j	j
j}	|j}
td
| td|	 td|
 td| | d|dt| | d W Y d }~n
d }~0 0 d S )N   r   d   i  )r      <   [   y               i  i1  iO  in  )r   r   ;   Z   x   r            i  i0  iN  im  r*      z{:02d}zException type: zFile name: zLine number: zn: zUnexpected e=z
, type(e)=r3   )r   r   yearranger!   formatrE   sysexc_infotb_framef_codeco_filename	tb_linenor(   r    rF   )r"   najmrj   eexception_typeexception_objectexception_tracebackfilenameline_numberr
   r
   r   quantiemeVersDate|  s$    
$<




zLoudeac.quantiemeVersDateN)r-   )!__name__
__module____qualname__r   r   r   r   r8   r   r   r[   	linesLotsr~   rK   rJ   rL   rM   rR   rT   r   r   rO   rZ   r   rP   rU   r%   r    ro   r   r_   r=   r   r
   r
   r
   r   r       s>    Y2
r   )PILr   uuidr   jsonImportErrorr@   r   r:   rG   	pdf2imager   TSLibOCRtimeosnumpyrB   TS_OCRr   r   collectionsr   r'   r   r   r
   r
   r
   r   <module>   s*   