Ë
    ­9j–
  ã                   ó<  — d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlZ eddd¬	«      Zej                  ed
gdd
gd
g¬«       ej!                  d«      d„ «       Zej%                  d«      d„ «       Zej)                  d«       ed«      fdefd„«       Zy)é    N)ÚFastAPIÚFileÚ
UploadFileÚHTTPException)ÚCORSMiddleware)Úget_ocr_readerÚrun_ocr_on_image)Úextract_cccd_infozVietnamese Card OCR APIzUAPI for reading and parsing information from Vietnamese Citizen Identity Cards (CCCD)z1.0.0)ÚtitleÚdescriptionÚversionÚ*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersÚstartupc               ƒ   ó–   K  — t        d«       	 t        «        t        d«       y# t        $ r} t        d| › «       Y d} ~ yd} ~ ww xY w­w)zHWarm up the OCR model on app startup to reduce latency on first request.z"FastAPI application starting up...z9Warmup complete. Application is ready to accept requests.zError during model warmup: N)Úprintr   Ú	Exception)Úes    ú*/media/conek/DATA/Code/OCR/backend/main.pyÚstartup_eventr      sG   è ø€ ô 
Ð
.Ô/ð1ÜÔÜÐIÕJøÜò 1ÜÐ+¨A¨3Ð/×0Ñ0ûð1üs)   ‚A	% ¤A	¥	A®A¼A	ÁAÁA	ú/c                  ó   — ddddœS )NÚonlinezPVietnamese Identity Card OCR API is running. Send POST requests to /api/ocr/cccdz/docs)ÚstatusÚmessageÚdocs© r    ó    r   Ú	read_rootr"   !   s   € ð ØeØñð r!   z/api/ocr/cccd.Úfilec              ƒ   óp  K  — | j                   j                  d«      st        dd¬«      ‚t        j                  «       }	 | j	                  «       ƒ d {  –—† }t        |«      \  }}}t        |«      }t        j                  |«      j                  d«      }d|› }t        j                  «       |z
  }	t        d|	d›d	«       d
t        |	d«      |||dœS 7 Œ€# t        $ r}
t        dt        |
«      ¬«      ‚d }
~
wt        $ r2}dd l}|j!                  «        t        ddt        |«      › ¬«      ‚d }~ww xY w­w)Nzimage/i  zUploaded file must be an image.)Ústatus_codeÚdetailzutf-8zdata:image/jpeg;base64,zRequest processed in z.2fz	 seconds.Té   )ÚsuccessÚprocessing_time_secÚ	is_warpedÚdataÚprocessed_imager   iô  zInternal Server Error: )Úcontent_typeÚ
startswithr   ÚtimeÚreadr	   r
   Úbase64Ú	b64encodeÚdecoder   ÚroundÚ
ValueErrorÚstrr   Ú	tracebackÚ	print_exc)r#   Ú
start_timeÚcontentsÚraw_resultsÚprocessed_img_bytesr*   Úparsed_infoÚ
base64_imgÚimg_data_uriÚprocessing_timeÚval_errr   r7   s                r   Úocr_cccdrB   )   s7  è ø€ ð ×Ñ×'Ñ'¨Ô1Ü¨Ð4UÔVÐVä—‘“€JðXàŸ™›×$ˆô 7GÀxÓ6PÑ3ˆÐ(¨)ô (¨Ó4ˆô ×%Ñ%Ð&9Ó:×AÑAÀ'ÓJˆ
Ø0°°Ð=ˆäŸ)™)›+¨
Ñ2ˆÜÐ% o°cÐ%:¸)ÐDÔEð Ü#(¨¸!Ó#<Ø"ØØ+ñ
ð 	
ð %ùô. ò BÜ¨´C¸³LÔAÐAûÜò XÛØ×ÑÔÜ¨Ð6MÌcÐRSËfÈXÐ4VÔWÐWûðXüsH   ‚=D6Á C ÁCÁA?C ÃD6ÃC Ã	D3ÃC5Ã5D3Ä-D.Ä.D3Ä3D6)r1   Úfastapir   r   r   r   Úfastapi.middleware.corsr   Úbackend.ocr_enginer   r	   Úbackend.parserr
   r/   ÚappÚadd_middlewareÚon_eventr   Úgetr"   ÚpostrB   r    r!   r   ú<module>rL      s¾   ðÛ ß <Ó <Ý 2ß ?Ý ,Û áØ
#ØgØô€ð × Ñ ØØ%ØØ%Ø%ð ô ð ‡ˆiÓñ1ó ð1ð ‡ˆƒñó ðð ‡ˆ/ÓÙ&*¨3£iñ %X˜ò %Xó ñ%Xr!   