o
    h                     @   sd   d dl Z d dlmZmZ dd Zdd ZG dd deZG d	d
 d
eZG dd deZeegZ	dS )    N)ImageRGBImageBufferc                  C   s0   zdd l } W | S  ty   ddlm }  Y | S w )Nr   cv2)r   ImportErrorcvr    r   U/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/willow/plugins/opencv.py_cv2   s   
r
   c                  C   s   dd l } | S )Nr   numpyr   r   r   r	   _numpy   s   r   c                   @   sX   e Zd Zdd Zedd Zejdd Zejdd Z	ejd	d
 Z
ejdd ZdS )BaseOpenCVImagec                 C   s   || _ || _d S N)imagesize)selfr   r   r   r   r	   __init__   s   
zBaseOpenCVImage.__init__c                 C   s
   t   d S r   )r
   clsr   r   r	   check   s   
zBaseOpenCVImage.checkc                 C   s   | j S r   )r   r   r   r   r	   get_size   s   zBaseOpenCVImage.get_sizec                 C      dS )N   r   r   r   r   r	   get_frame_count!      zBaseOpenCVImage.get_frame_countc                 C   r   NFr   r   r   r   r	   	has_alpha&   r   zBaseOpenCVImage.has_alphac                 C   r   r   r   r   r   r   r	   has_animation+   r   zBaseOpenCVImage.has_animationN)__name__
__module____qualname__r   classmethodr   r   	operationr   r   r   r   r   r   r   r	   r      s    



r   c                       s6   e Zd Ze fddZeeedd Z  Z	S )OpenCVColorImagec                    s   t    t  d S r   )superr   r   r   	__class__r   r	   r   2   s   

zOpenCVColorImage.checkc                 C   sR   t  }t }|j|j|jd}||jd |jd d}|||j}| ||jS )z_
        Converts a Color Image buffer into a numpy array suitable for use with OpenCV
        )dtyper   r      )	r   r
   
frombufferdatauint8reshaper   cvtColorCOLOR_RGB2BGR)r   image_bufferr   r   r   r   r   r	   from_buffer_rgb7   s   z OpenCVColorImage.from_buffer_rgb)
r    r!   r"   r#   r   r   converter_fromr   r2   __classcell__r   r   r'   r	   r%   1   s    r%   c                   @   sX   e Zd ZdZdZdZdZejdd Z	ejddd	Z
d
d Zeeedd ZdS )OpenCVGrayscaleImager   r*   g?)(   r6   c                 C   s>   t  }t }|| jddd}|du rg S ||d}| S )zQ
        Find interesting features of an image suitable for cropping to.
           g{Gz?g      ?N)   )r   r
   goodFeaturesToTrackr   r.   tolist)r   r   r   pointsr   r   r	   detect_featuresL   s   z$OpenCVGrayscaleImage.detect_features haarcascade_frontalface_alt2.xmlc                 C   sN   t  }| |}||}|| j}||| j| j| j| j	}dd |D S )z|
        Run OpenCV face detection on the image. Returns a list of coordinates representing a box around each face.
        c                 S   s8   g | ]}|d  |d |d  |d  |d |d  fqS )r   r   r9   r*   r   ).0facer   r   r	   
<listcomp>l   s    z5OpenCVGrayscaleImage.detect_faces.<locals>.<listcomp>)
r
   _find_cascadeCascadeClassifierequalizeHistr   detectMultiScaleface_haar_scaleface_min_neighborsface_haar_flagsface_min_size)r   cascade_filenamer   cascadeequalised_imagefacesr   r   r	   detect_faces\   s   

z!OpenCVGrayscaleImage.detect_facesc                 C   s0   t j|st jt jt jtd|}|S )z{
        Find the requested OpenCV cascade file.  If a relative path was provided, check local cascades directory.
        zdata/cascades)ospathisabsjoindirname__file__)r   rJ   r   r   r	   rB   v   s   z"OpenCVGrayscaleImage._find_cascadec                 C   s"   t  }||j|j}| ||jS )zF
        Convert OpenCVColorImage to an OpenCVGrayscaleImage.
        )r
   r/   r   COLOR_BGR2GRAYr   )r   colour_imager   r   r   r   r	   
from_color   s   zOpenCVGrayscaleImage.from_colorN)r>   )r    r!   r"   rH   rG   rF   rI   r   r$   r=   rN   rB   r#   r3   r%   rW   r   r   r   r	   r5   F   s    
r5   )
rO   willow.imager   r   r
   r   r   r%   r5   willow_image_classesr   r   r   r	   <module>   s    G