a
    .g                     @   s   d dl Z d dlZdddZdS )    Nd                  c                 C   s  | du rt d dS t| tj}t|||}t|tjtj\}}|rt|tj	d}t
|}t|}	t|	}	t|	dd d}	t|	dd dd d}
t|	dd dd d}tj|
d	 |
d
 |d
 |d	 gdd}t|d
 d	 }t|d
 d
 }||k r|| }}tjd	d	g|d
 d	g|d
 |d
 gd	|d
 ggdd}t||}t| |||f}t|tj}t|dtjtjdd}|S t d dS dS )a  
    Detects, crops, aligns, and enhances an ID card from an input image for OCR.
    
    Parameters:
    - image: np.ndarray, input image as an array
    - lower_bound: tuple, lower HSV bound for color filtering
    - upper_bound: tuple, upper HSV bound for color filtering
    
    Returns:
    - enhanced_id_card: np.ndarray, processed image ready for OCR, or None if no ID card is detected
    Nz"Error: Image not loaded correctly.)keyc                 S   s   | d | d fS )N   r    xr   r   '/var/www/html/ocr/e-KTP-OCR-CNN/prep.py<lambda>)       z!process_id_card.<locals>.<lambda>   c                 S   s   | d S Nr   r   r   r   r   r   r   *   r   c                 S   s   | d S r   r   r   r   r   r   r   +   r   r   r   float32)dtype      z!No matching ID card region found.)printcv2cvtColorCOLOR_BGR2HSVinRangefindContoursRETR_EXTERNALCHAIN_APPROX_SIMPLEmaxcontourAreaminAreaRect	boxPointsnpint0sortedarrayintgetPerspectiveTransformwarpPerspectiveCOLOR_BGR2GRAYadaptiveThresholdADAPTIVE_THRESH_GAUSSIAN_CTHRESH_BINARY)imagelower_boundupper_boundZ	hsv_imagemaskcontours_Zlargest_contourrectboxZ
top_pointsZbottom_pointsZsrc_ptswidthheightZdst_ptsMZaligned_id_cardZgray_id_cardZenhanced_id_cardr   r   r   process_id_card   s6    


&

6r:   )r   r   )r   numpyr$   r:   r   r   r   r   <module>   s   
@