
    9j&                     b    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Zda	d Z
defdZdefdZy)    N)Imagec                  ,   t         t        j                         } t        d       t        j                  j                         }t        d|        t        j                  ddg|      a t        dt        j                         | z
  dd       t         S )	z1Get or initialize the EasyOCR reader (Singleton).z*Warmup: Loading EasyOCR reader into RAM...zCUDA Available: vien)gpuzWarmup complete. Loaded in .2f	 seconds.)_readertimeprinttorchcudais_availableeasyocrReader)
start_timeuse_gpus     0/media/conek/DATA/Code/OCR/backend/ocr_engine.pyget_ocr_readerr      sx     YY[
:;**))+ 	*+..$7;+DIIK*,DS+ISTN    image_bytesc                 	   t        j                  | t         j                        }t        j                  |t        j
                        }|t        d      |j                  dd \  }}t        d| d|        d}||kD  rR||z  }|}t        ||z        }t        j                  |||ft        j                        }||}}t        d| d|        |j                         }		 t        j                  |t        j                        }
t        j                  |
d	d
      }t        j                   |dd      }t        j"                  |j                         t        j$                  t        j&                        \  }}t)        |t        j*                  d      dd }d}|D ]g  }t        j,                  |d      }t        j.                  |d|z  d      }t1        |      dk(  sBt        j*                  |      }||z  }|d|z  kD  se|} n |t        d       |j3                  dd      }t        j4                  dd      }|j7                  d      }|t        j8                  |         |d
<   |t        j:                  |         |d<   t        j<                  |d      }|t        j8                  |         |d<   |t        j:                  |         |d<   |\  }}}}t        j>                  |d
   |d
   z
  dz  |d   |d   z
  dz  z         }t        j>                  |d
   |d
   z
  dz  |d   |d   z
  dz  z         }tA        t        |      t        |            }t        j>                  |d
   |d
   z
  dz  |d   |d   z
  dz  z         }t        j>                  |d
   |d
   z
  dz  |d   |d   z
  dz  z         } tA        t        |      t        |             }!t        jB                  d
d
g|dz
  d
g|dz
  |!dz
  gd
|!dz
  ggd      }"t        jD                  ||"      }#t        jF                  ||#||!f      }$|!|kD  r/t        d       t        jH                  |$t        jJ                        }$|$j                  dd \  }%}&|&dkD  r9d|&z  }t        j                  |$dt        |%|z        ft        j                        }$|$dfS 	 |	dfS # tL        $ r}'t        d|' d       Y d}'~'|	dfS d}'~'ww xY w)z
    Read image bytes, resize if too large, and attempt to align/warp the document.
    Returns the processed OpenCV image and a boolean indicating if it was warped.
    Nz*Cannot decode image. Invalid image format.   zOriginal Image Size: xi  )interpolationzResized Image to: )   r   r   2      T)keyreverser   g{Gz?   g333333?z6Detected card contours! Performing Warp Perspective...)r!   r   float32)dtype   )axis   z,Rotating warped image to landscape format...i  zPerspective Warp failed: z). Falling back to original resized image.F)'np
frombufferuint8cv2imdecodeIMREAD_COLOR
ValueErrorshaper   intresize
INTER_AREAcopycvtColorCOLOR_BGR2GRAYGaussianBlurCannyfindContoursRETR_EXTERNALCHAIN_APPROX_SIMPLEsortedcontourArea	arcLengthapproxPolyDPlenreshapezerossumargminargmaxdiffsqrtmaxarraygetPerspectiveTransformwarpPerspectiverotateROTATE_90_CLOCKWISE	Exception)(r   nparrimghw	max_widthscalenew_wnew_horiginal_resizedgrayblurrededgedcontours_card_contourcperiapproxareaimg_areaptsrectsrD   tltrbrblwidth_awidth_bheight_aheight_b
max_heightdstMwarpedwarped_hwarped_wes(                                           r   preprocess_imagers      s    MM+rxx0E
,,uc..
/C
{EFF99Ra=DAq	!!AaS
)* I9}AAIjjuenCNNKe1"1#Qqc*+ xxzKX||C!3!34""43		'2s+ &&uzz|S5F5FH_H_`!(FrJ 	A==D)D%%ad;F 6{aq)q5$/)#)L	 #JK&&q!,C 88F)4DQA"))A,'DG"))A,'DG773Q'D"))D/*DG"))D/*DG#RR gg11!3AA18LMNGgg11!3AA18LMNGCL#g,7IwwAA1 4"Q%"Q%-A9MNOHwwAA1 4"Q%"Q%-A9MNOHS]CM:J ((AQ"Q
Q/JN#	
  C ++D#6A((a)Z1HIF I%DEFC,C,CD "(bq!1Hh$xFT3x%7G3H,IY\YgYgh4<c $l U""	  X)!,UVWW U""	Xs&   #C:S  "S  J9S   	S%	S  S%c                    t        |       \  }}t               }t        j                  |t        j                        }t        j
                         }t        d       |j                  |      }t        dt        j
                         |z
  dd       t        j                  d|      \  }}|j                         }	||	|fS )zN
    Takes image bytes, pre-processes, runs EasyOCR, and returns results.
    zRunning EasyOCR prediction...zEasyOCR completed in r   r	   z.jpg)
rs   r   r*   r3   COLOR_BGR2RGBr   r   readtextimencodetobytes)
r   processed_img	is_warpedreaderrgb_imgr   resultsrZ   encoded_imgprocessed_img_bytess
             r   run_ocr_on_imager      s    
  0<M9 F ll=#*;*;<GJ	
)*oog&G	!$))+
":3!?y
IJ
 \\&-8NA{%--/'22r   )r*   numpyr'   r   r   r   PILr   ior
   r   bytesrs   r    r   r   <module>r      sA    
      	 j#% j#X3% 3r   