a
    Cg                     @   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 n ty*   ddlm }  Y n0 | S )Nr   cv2)r   ImportErrorZcvr    r   T/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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   s   dS )N   r   r   r   r   r   get_frame_count!   s    zBaseOpenCVImage.get_frame_countc                 C   s   dS NFr   r   r   r   r   	has_alpha&   s    zBaseOpenCVImage.has_alphac                 C   s   dS r   r   r   r   r   r   has_animation+   s    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
        )Zdtyper   r      )	r   r	   Z
frombufferdataZuint8reshaper   cvtColorZCOLOR_RGB2BGR)r   Zimage_bufferr   r   r   r   r   r   from_buffer_rgb7   s    z OpenCVColorImage.from_buffer_rgb)
r   r   r   r    r   r   converter_fromr   r*   __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?)(   r.   c                 C   sB   t  }t }|| jddd}|du r*g S ||d}| S dS )zQ
        Find interesting features of an image suitable for cropping to.
           g{Gz?g      ?N)   )r   r	   ZgoodFeaturesToTrackr   r(   tolist)r   r   r   Z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 | ]0}|d  |d |d  |d  |d |d  fqS )r   r   r1   r&   r   ).0facer   r   r   
<listcomp>l   s   z5OpenCVGrayscaleImage.detect_faces.<locals>.<listcomp>)
r	   _find_cascadeZCascadeClassifierZequalizeHistr   ZdetectMultiScaleface_haar_scaleface_min_neighborsface_haar_flagsface_min_size)r   cascade_filenamer   ZcascadeZequalised_imageZ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   r=   r   r   r   r8   v   s    z"OpenCVGrayscaleImage._find_cascadec                 C   s"   t  }||j|j}| ||jS )zF
        Convert OpenCVColorImage to an OpenCVGrayscaleImage.
        )r	   r)   r   ZCOLOR_BGR2GRAYr   )r   Zcolour_imager   r   r   r   r   
from_color   s    zOpenCVGrayscaleImage.from_colorN)r4   )r   r   r   r;   r:   r9   r<   r   r!   r3   r>   r8   r    r+   r"   rE   r   r   r   r   r-   F   s   
r-   )
r?   Zwillow.imager   r   r	   r   r   r"   r-   Zwillow_image_classesr   r   r   r   <module>   s   G