
    j
                    ^    d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	  G d de          Z
dS )    )annotationsN)BasePredictor)Results)DEFAULT_CFGopsc                  H     e Zd ZdZeddf fd	Zed
d            Zd	 Z xZ	S )SemanticSegmentationPredictora  Predictor for semantic segmentation models.

    This predictor processes model outputs to produce per-pixel class label maps.

    Examples:
        >>> from ultralytics.models.yolo.semantic import SemanticSegmentationPredictor
        >>> args = dict(model="yolo26n-sem.pt", source="path/to/image.jpg")
        >>> predictor = SemanticSegmentationPredictor(overrides=args)
        >>> predictor.predict_cli()
    Nc                f    t                                          |||           d| j        _        dS )zInitialize SemanticSegmentationPredictor.

        Args:
            cfg (dict): Configuration for the predictor.
            overrides (dict, optional): Configuration overrides.
            _callbacks (dict, optional): Callback functions.
        semanticN)super__init__argstask)selfcfg	overrides
_callbacks	__class__s       k/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/ultralytics/models/yolo/semantic/predict.pyr   z&SemanticSegmentationPredictor.__init__   s.     	i444#	    num_classesintreturntorch.dtypec                b    | dk    rt           j        n| dk    rt           j        nt           j        S )zCReturn the smallest practical integer dtype for semantic class IDs.   i   )torchuint8int16int32)r   s    r   _class_map_dtypez.SemanticSegmentationPredictor._class_map_dtype#   s/     *S00u{{[TYEYEYekk_d_jjr   c           	        t          |t          t          f          r|d         }t          |t                    st          j        |          ddddf         }g }t          t          ||                    D ]V\  }\  }}t          | j        d         t                    r| j        d         |         n| j        d         }t          j        |	                    d          |j
        dd                   d         }|                     t          |j
        d         d                    }	|j
        d         dk    r(|                    d                              |	          n:|                    d                              d                              |	          }
|                    t%          ||| j        j        |
                     X|S )ah  Convert model logits to semantic segmentation results.

        Args:
            preds (torch.Tensor | tuple): Model output logits.
            img (torch.Tensor): Preprocessed input image tensor.
            orig_imgs (list | torch.Tensor): Original images.

        Returns:
            (list[Results]): List of Results objects with semantic masks.
        r   .N      )pathnamessemantic_mask)
isinstancetuplelistr   convert_torch2numpy_batch	enumeratezipbatchscale_masks	unsqueezeshaper!   maxargmaxtogtsqueezeappendr   modelr'   )r   predsimg	orig_imgsresultsipredorig_imgimg_pathdtype	class_maps              r   postprocessz)SemanticSegmentationPredictor.postprocess(   s    eeT]++ 	!HE)T** 	L5i@@dddKI#,S	-B-B#C#C 	n 	nAh+5djmT+J+J]tz!}Q''PTPZ[\P]H?4>>!#4#4hnRaR6HII!LD))#djmQ*?*?@@E48JqMA4E4EA))%000477ST::K]K]^_K`K`KcKcdiKjKjINN78($*BRbklllmmmmr   )r   r   r   r   )
__name__
__module____qualname____doc__r   r   staticmethodr!   rD   __classcell__)r   s   @r   r	   r	      s        	 	 '$4 	$ 	$ 	$ 	$ 	$ 	$ k k k \k      r   r	   )
__future__r   r   ultralytics.engine.predictorr   ultralytics.engine.resultsr   ultralytics.utilsr   r   r	    r   r   <module>rP      s    # " " " " "  6 6 6 6 6 6 . . . . . . . . . . . . . .5 5 5 5 5M 5 5 5 5 5r   