a
    yf=	                     @   s@   d dl mZ d dlmZ d dlmZmZmZ G dd deZdS )    )Results)DetectionPredictor)DEFAULT_CFGLOGGERopsc                       s0   e Zd ZdZeddf fdd	Zdd Z  ZS )PosePredictora  
    A class extending the DetectionPredictor class for prediction based on a pose model.

    Example:
        ```python
        from ultralytics.utils import ASSETS
        from ultralytics.models.yolo.pose import PosePredictor

        args = dict(model="yolov8n-pose.pt", source=ASSETS)
        predictor = PosePredictor(overrides=args)
        predictor.predict_cli()
        ```
    Nc                    sD   t  ||| d| j_t| jjtr@| jj dkr@t	d dS )z\Initializes PosePredictor, sets task to 'pose' and logs a warning for using 'mps' as device.ZposeZmpsu   WARNING ⚠️ Apple MPS known Pose bug. Recommend 'device=cpu' for Pose models. See https://github.com/ultralytics/ultralytics/issues/4031.N)
super__init__argstask
isinstanceZdevicestrlowerr   warning)selfcfgZ	overrides
_callbacks	__class__ `/var/www/html/django/DPS/env/lib/python3.9/site-packages/ultralytics/models/yolo/pose/predict.pyr	      s    zPosePredictor.__init__c           	      C   s8  t j|| jj| jj| jj| jj| jjt| j	j
d}t|tsHt |}g }t||| jd D ]\}}}t |jdd |ddddf |j |ddddf< t|r|ddddf jt|g| j	jR  n|ddddf }t |jdd ||j}|t||| j	j
|ddddf |d q^|S )zCReturn detection results for a given input image or list of images.)Zagnosticmax_detclassesncr      N      )pathnamesZboxesZ	keypoints)r   Znon_max_suppressionr
   confZiouZagnostic_nmsr   r   lenmodelr   r   listZconvert_torch2numpy_batchzipbatchZscale_boxesshaperoundviewZ	kpt_shapeZscale_coordsappendr   )	r   predsZimgZ	orig_imgsresultspredZorig_imgZimg_pathZ	pred_kptsr   r   r   postprocess!   s(    



>F$zPosePredictor.postprocess)__name__
__module____qualname____doc__r   r	   r,   __classcell__r   r   r   r   r      s   
r   N)	Zultralytics.engine.resultsr   Z&ultralytics.models.yolo.detect.predictr   Zultralytics.utilsr   r   r   r   r   r   r   r   <module>   s   