o
    *jm                     @   s$  d dl Z d dlZd dlmZmZ d dlZd dlZd dlZd dl	m
  mZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d d	lm Z  d d
l!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( dd Z)dd Z*dd Z+dd Z,ej-e#j.ej/dG dd deZ0dS )    N)AnyDict)Image)
transforms)Preprocessors)CannyDetectorHEDdetectorMidasDetectorMLSDdetectorOpenposeDetectorSegformerDetectornms)Preprocessor)PREPROCESSORS)
load_image)DEFAULT_MODEL_REVISIONFieldsInvokeModeKeysTasks)type_assertc                 C   s  | j tjksJ | jdkr| d d d d d f } | jdksJ | j\}}}|dks3|dks3|dks3J |dkr9| S |dkrGtj| | | gddS |dkr| d d d d ddf tj}| d d d d ddf tjd }|| dd|   }|dd	tj}|S d S )
N            Zaxisr   g     o@g      ?   )	dtypenpuint8ndimshapeZconcatenateZastypeZfloat32Zclip)xHWCcoloralphay r)   z/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/preprocessors/cv/controllable_image_generation.pyHWC3   s"   
"&r+   c                 C   s   | j \}}}t|}t|}t|t|| }||9 }||9 }tt|d d }tt|d d }tj| ||f|dkrBtjntj	d}|S )Ng      P@@   r   interpolation)
r!   floatminintr   roundcv2resizeZINTER_LANCZOS4Z
INTER_AREA)Zinput_image
resolutionr#   r$   r%   kimgr)   r)   r*   resize_image.   s   r8   c                 C   s   | dkrd }|S | dkrt  }|S | dkrt||}|S | dkr't||}|S | dkr2t||}|S | dkr=t||}|S | dkrHt||}|S | dkrSt||}|S | d	kr^t||}|S t||}|S )
Nscribblecannyhoughheddepthnormalposesegfake_scribble)r   r
   r   r	   r   r   )control_type
model_pathdevicedetectorr)   r)   r*   build_detector=   s:   



	



rF   c           
      K   s  |dkrt j|t jd}d|t j|dddk < |S |dkr-| ||d |d	 }t|}|S |d
krA| ||d |d }t|}|S |dkrO| |}t|}|S |dkru|j\}}}t|d}| |\}}	t|}tj|||ftj	d}|S |dkr|j\}}}t|d}| ||d d\}	}t|}tj|||ftj	d}|d d d d d d df }|S |dkr| |\}}	t|}|S |dkr| |}|S |dkr| |}t|}t
|dd}t|dd}d||dk< d||dk < |S )Nr9   )r   r   r   r      r:   low_thresholdhigh_thresholdr;   value_thresholddistance_thresholdr<   r=   i  r-   r>   bg_threshold)Zbg_thr?   r@   rA   g      @)r   r   r   r   )r   Z
zeros_liker   r0   r+   r!   r8   r3   r4   ZINTER_LINEARr   ZGaussianBlur)
rE   rB   r7   kwargsdetected_mapr#   r$   r%   Zdet_img_r)   r)   r*   get_detected_mapU   sl   (
$
 

	rQ   )module_namec                       sF   e Zd Zejf fdd	Zeeedede	e
ef fddZ  ZS )'ControllableImageGenerationPreprocessorc                    sB   t  j|dtji| t|dd|dd |dd| _d S )NmoderB   r<   rC   rD   cuda)super__init__r   	INFERENCErF   getrE   )selfrT   argsrN   	__class__r)   r*   rW      s
   

z0ControllableImageGenerationPreprocessor.__init__datareturnc                 K   s  | d|d }tt|d }tt||}td|  | dd}d| v r0|d }n| dd}td|  | d	d
}td|  | dd}|dkr\t| j	||}	n^|dkrw|d j
j}
|d j
j}t| j	|||
|d}	nC|dkr|d jj}|d jj}t| j	||||d}	n(|dv rt| j	||}	n|dkr|d jj}t| j	|||d}	nt| j	d
|d}	|||	||d}| D ]}|| vr|| ||< q|S )Nimage_resolutionimagezTest with image resolution: 
is_cat_imgTprompt zTest with prompt: rB   r<   zTest with input type: save_memoryFr9   r:   Zmodelsetting)rH   rI   r;   )rJ   rK   )r<   r=   r?   r@   rA   r>   )rL   )rB   r7   )ra   rc   rO   re   rb   )rY   r   arrayr   r8   r+   printkeysrQ   rE   r:   rH   rI   r;   rJ   rK   r>   rL   )rZ   r^   rN   r`   ra   rb   Zmodel_promptrB   re   rO   rH   rI   rJ   rK   rL   Z
input_dictr6   r)   r)   r*   __call__   sz   

z0ControllableImageGenerationPreprocessor.__call__)__name__
__module____qualname__r   rX   rW   r   objectinputr   strr   ri   __classcell__r)   r)   r\   r*   rS      s    $rS   )1mathostypingr   r   r3   numpyr   ZtorchZtorch.nn.functionalnnZ
functionalFZPILr   Ztorchvisionr   Zmodelscope.metainfor   ZFmodelscope.models.cv.controllable_image_generation.annotator.annotatorr   r   r	   r
   r   r   r   Zmodelscope.preprocessors.baser   Z modelscope.preprocessors.builderr   Zmodelscope.preprocessors.imager   Zmodelscope.utils.constantr   r   r   r   r   Zmodelscope.utils.type_assertr   r+   r8   rF   rQ   Zregister_moduleZcvZ*controllable_image_generation_preprocessorrS   r)   r)   r)   r*   <module>   s2   $.