o
    *j6                     @   s   d dl Z d dlmZmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ e ZejejejdG dd deZdS )    N)AnyDict)Image)	Pipelines)HRNetCrowdCounting)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Tasks)
get_logger)module_namec                       s   e Zd Zdef fddZdd Zdd Zded	eee	f fd
dZ
deee	f d	eee	f fddZe dd Zdeee	f d	eee	f fddZ  ZS )CrowdCountingPipelinemodelc                    sd   t |ts	J dt jd|dd| td|  t|| j| _	| j	
  td dS )z8
            model: model id on modelscope hub.
        zmodel must be a single strF)r   Zauto_collatezloading model from dir zload model doneN )
isinstancestrsuper__init__loggerinfor   todeviceinfer_modeleval)selfr   kwargs	__class__r   p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/crowd_counting_pipeline.pyr      s   
zCrowdCountingPipeline.__init__c                 C   s   |j d }|j d }|}|}|dkr|}d}|| | }|dkr*|}d}|| | }|dkr8|}d}|| | }|dkrF|}d}|| | }||k rU|| dkrTd}d}n
|| dkr_d}d}t|d d }t|d d }t||g|}|S )N   r   i   i  g;;@    )sizemathceil
transformsZResize)r   imgheightwidthZresize_heightZresize_widthtmpr   r   r    resize%   s@   

zCrowdCountingPipeline.resizec                 C   s  t dD ]}t dD ]}t|d d t|d d }}|d d |d d }}	td|d  d |d d |d   }
td|d  d |d d |d   }|dkrjtd|d  d }d}d}
n|dkrytd|d  d }|dkrtd|d  d }	d}d}n|dkrtd|d  d }	|d d d d |
|
| |||	 f  ||d | |d | d d d ||| |||	 f 7  < q
q|S )N         r!   r   )ranger$   floorr%   )r   Z
eval_shapeZeval_pZpred_mijstart_hstart_wZvalid_hZvalid_wZpred_hZpred_wr   r   r    merge_cropsL   sT   



"

z!CrowdCountingPipeline.merge_cropsinputreturnc              
   C   s
  t |}| |}t |}|j}tdd|}|d d |d d }}g }tdD ]*}tdD ]#}	|d | |d |	 }
}||d d |
|
| ||| f  q4q.t	
|}|| j}t	|}t	dd|d d |d d f| j}||d}|S )N)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?r!   r-   r,   )r'   map)r   Zconvert_to_imgr+   r&   ZToTensorshapeZ	Normalizer/   appendtorchstackr   r   ZsqueezeZzeros)r   r6   r'   Zimg_ori_tensorZ	img_shapeZpatch_heightZpatch_widthZimgsr1   r2   r3   r4   Zeval_imgeval_patchsprediction_mapresultr   r   r    
preprocessk   sD   





z CrowdCountingPipeline.preprocessc                 C   s   |  |\}}tj|tj|iS N)perform_inferencer   ZSCORESZ
OUTPUT_IMG)r   r6   countsZimg_datar   r   r    forward   s   zCrowdCountingPipeline.forwardc                 C   sb   |d }|d }|  |\}}}|j}| |||}tj|ddj  |j  d d fS )Nr'   r8   )r!   r-   r,   )dimr   )r   r9   r5   r;   sumdatacpunumpy)r   rG   r=   r>   Zeval_prediction_Zeval_patchs_shaper   r   r    rB      s   z'CrowdCountingPipeline.perform_inferenceinputsc                 C   s   |S rA   r   )r   rK   r   r   r    postprocess   s   z!CrowdCountingPipeline.postprocess)__name__
__module____qualname__r   r   r+   r5   r   r   r   r@   rD   r;   Zno_gradrB   rL   __classcell__r   r   r   r    r      s    '"
*r   ) r$   typingr   r   rI   npr;   Ztorchvision.transformsr&   ZPILr   Zmodelscope.metainfor   Z#modelscope.models.cv.crowd_countingr   Zmodelscope.outputsr   Zmodelscope.pipelines.baser   r	   Zmodelscope.pipelines.builderr
   Zmodelscope.preprocessors.imager   Zmodelscope.utils.constantr   Zmodelscope.utils.loggerr   r   Zregister_moduleZcrowd_countingr   r   r   r   r    <module>   s&   