a
    yf	                     @   sX   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	m
Z
 G dd deZdS )    N)Image)BasePredictor)Results)DEFAULT_CFGopsc                       s8   e Zd ZdZeddf fdd	Zdd Zdd Z  ZS )	ClassificationPredictora  
    A class extending the BasePredictor class for prediction based on a classification model.

    Notes:
        - Torchvision classification models can also be passed to the 'model' argument, i.e. model='resnet18'.

    Example:
        ```python
        from ultralytics.utils import ASSETS
        from ultralytics.models.yolo.classify import ClassificationPredictor

        args = dict(model="yolov8n-cls.pt", source=ASSETS)
        predictor = ClassificationPredictor(overrides=args)
        predictor.predict_cli()
        ```
    Nc                    s"   t  ||| d| j_d| _dS )zCInitializes ClassificationPredictor setting the task to 'classify'.Zclassifyz&ultralytics.yolo.data.augment.ToTensorN)super__init__argstask_legacy_transform_name)selfcfgZ	overrides
_callbacks	__class__ d/var/www/html/django/DPS/env/lib/python3.9/site-packages/ultralytics/models/yolo/classify/predict.pyr	      s    z ClassificationPredictor.__init__c                    s   t |tjsdt fdd jjD }|rHtj fdd|D dd}ntj fdd|D dd}t |tjrt|nt| jj	} jj
r| S | S )z3Converts input image to model-compatible data type.c                 3   s   | ]} j t|v V  qd S )N)r   str).0Z	transformr   r   r   	<genexpr>'   s   z5ClassificationPredictor.preprocess.<locals>.<genexpr>c                    s   g | ]}  |qS r   )
transformsr   Zimr   r   r   
<listcomp>+       z6ClassificationPredictor.preprocess.<locals>.<listcomp>r   )dimc              
      s&   g | ]}  tt|tjqS r   )r   r   Z	fromarraycv2ZcvtColorZCOLOR_BGR2RGBr   r   r   r   r   .   r   )
isinstancetorchZTensoranyr   stackZ
from_numpytomodelZdeviceZfp16Zhalffloat)r   imgZis_legacy_transformr   r   r   
preprocess$   s    $z"ClassificationPredictor.preprocessc                    s4   t |tst|} fddt|| jd D S )z5Post-processes predictions to return Results objects.c                    s&   g | ]\}}}t || jj|d qS ))pathnamesZprobs)r   r#   r(   )r   predZorig_imgZimg_pathr   r   r   r   8   s   z7ClassificationPredictor.postprocess.<locals>.<listcomp>r   )r   listr   Zconvert_torch2numpy_batchzipbatch)r   predsr%   Z	orig_imgsr   r   r   postprocess3   s
    


z#ClassificationPredictor.postprocess)	__name__
__module____qualname____doc__r   r	   r&   r.   __classcell__r   r   r   r   r      s   r   )r   r   ZPILr   Zultralytics.engine.predictorr   Zultralytics.engine.resultsr   Zultralytics.utilsr   r   r   r   r   r   r   <module>   s   