
    Z j&                        S SK JrJrJr  S SKrSSKJrJrJ	r	J
r
Jr  SSKJrJr  \	" 5       (       a  S SKJr  SSKJr  \" 5       (       a  SS	KJrJrJrJr  \
R0                  " \5      r\" \" S
S95       " S S\5      5       rg)    )AnyUnionoverloadN   )add_end_docstringsis_torch_availableis_vision_availableloggingrequires_backends   )Pipelinebuild_pipeline_init_args)Image)
load_image)*MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES-MODEL_FOR_INSTANCE_SEGMENTATION_MAPPING_NAMES-MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES.MODEL_FOR_UNIVERSAL_SEGMENTATION_MAPPING_NAMEST)has_image_processorc                   B  ^  \ rS rSrSrSrSrSrSrU 4S jr	S r
\S\\S	4   S
\S\\\\4      4S j5       r\S\\   \S	   -  S
\S\\\\\4         4S j5       rS\\S	\\   \S	   4   S
\S\\\\4      \\\\\4         -  4U 4S jjrSS jrS r SS jrSrU =r$ )ImageSegmentationPipeline   at  
Image segmentation pipeline using any `AutoModelForXXXSegmentation`. This pipeline predicts masks of objects and
their classes.

Example:

```python
>>> from transformers import pipeline

>>> segmenter = pipeline(model="facebook/detr-resnet-50-panoptic")
>>> segments = segmenter("https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png")
>>> len(segments)
2

>>> segments[0]["label"]
'bird'

>>> segments[1]["label"]
'bird'

>>> type(segments[0]["mask"])  # This is a black and white mask showing where is the bird on the original image.
<class 'PIL.Image.Image'>

>>> segments[0]["mask"].size
(768, 512)
```


This image segmentation pipeline can currently be loaded from [`pipeline`] using the following task identifier:
`"image-segmentation"`.

See the list of available models on
[huggingface.co/models](https://huggingface.co/models?filter=image-segmentation).
FTNc                   > [         TU ]  " U0 UD6  [        U S5        [        R                  " 5       nUR                  [        5        UR                  [        5        UR                  [        5        U R                  U5        g )Nvision)
super__init__r   r   copyupdater   r   r   check_model_type)selfargskwargsmapping	__class__s       z/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/pipelines/image_segmentation.pyr   "ImageSegmentationPipeline.__init__D   sb    $)&)$)<AACDEDEEFg&    c                     0 n0 nSU;   a  US   US'   US   US'   SU;   a  US   US'   SU;   a  US   US'   SU;   a  US   US'   SU;   a  US   US'   U0 U4$ )Nsubtask	thresholdmask_thresholdoverlap_mask_area_thresholdtimeout )r    r"   preprocess_kwargspostprocess_kwargss       r%   _sanitize_parameters.ImageSegmentationPipeline._sanitize_parametersN   s    ,29,=y)+1)+<i(& .4[.A{+v%39:J3K/0(F2@FGd@e<=+1)+<i( "&888r'   inputszImage.Imager"   returnc                     g Nr.   r    r3   r"   s      r%   __call__"ImageSegmentationPipeline.__call___   s    ber'   c                     g r6   r.   r7   s      r%   r8   r9   b   s    nqr'   c                 p   > SU;   a  UR                  S5      nUc  [        S5      e[        TU ]  " U40 UD6$ )a  
Perform segmentation (detect masks & classes) in the image(s) passed as inputs.

Args:
    inputs (`str`, `list[str]`, `PIL.Image` or `list[PIL.Image]`):
        The pipeline handles three types of images:

        - A string containing an HTTP(S) link pointing to an image
        - A string containing a local path to an image
        - An image loaded in PIL directly

        The pipeline accepts either a single image or a batch of images. Images in a batch must all be in the
        same format: all as HTTP(S) links, all as local paths, or all as PIL images.
    subtask (`str`, *optional*):
        Segmentation task to be performed, choose [`semantic`, `instance` and `panoptic`] depending on model
        capabilities. If not set, the pipeline will attempt tp resolve in the following order:
          `panoptic`, `instance`, `semantic`.
    threshold (`float`, *optional*, defaults to 0.9):
        Probability threshold to filter out predicted masks.
    mask_threshold (`float`, *optional*, defaults to 0.5):
        Threshold to use when turning the predicted masks into binary values.
    overlap_mask_area_threshold (`float`, *optional*, defaults to 0.5):
        Mask overlap threshold to eliminate small, disconnected segments.
    timeout (`float`, *optional*, defaults to None):
        The maximum time in seconds to wait for fetching images from the web. If None, no timeout is set and
        the call may block forever.

Return:
    If the input is a single image, will return a list of dictionaries, if the input is a list of several images,
    will return a list of list of dictionaries corresponding to each image.

    The dictionaries contain the mask, label and score (where applicable) of each detected object and contains
    the following keys:

    - **label** (`str`) -- The class label identified by the model.
    - **mask** (`PIL.Image`) -- A binary mask of the detected object as a Pil Image of shape (width, height) of
      the original image. Returns a mask filled with zeros if no object is found.
    - **score** (*optional* `float`) -- Optionally, when the model is capable of estimating a confidence of the
      "object" described by the label and the mask.
imageszICannot call the image-classification pipeline without an inputs argument!)pop
ValueErrorr   r8   )r    r3   r"   r$   s      r%   r8   r9   e   sB    X vZZ)F>hiiw1&11r'   c                    [        XS9nUR                  UR                  4/nU R                  R                  R
                  R                  S:X  av  Uc  0 nOSU/0nU R                  " S
U/SS.UD6nUR                  U R                  5      nU R                  US   SU R                  R                  R                  SS9S   US'   O,U R                  U/SS9nUR                  U R                  5      nXFS	'   U$ )N)r-   OneFormerConfigtask_inputspt)r<   return_tensors
max_length)paddingrD   rC   	input_idstarget_sizer.   )r   heightwidthmodelconfigr$   __name__image_processortodtype	tokenizertask_seq_len)r    imager)   r-   rG   r"   r3   s          r%   
preprocess$ImageSegmentationPipeline.preprocess   s    52ekk23::&&//3DD''3))X%XQWXFYYtzz*F$(NN}%$::,,99#	 %3 %
 %F=! ))%)NFYYtzz*F +}r'   c                 T    UR                  S5      nU R                  " S0 UD6nX#S'   U$ )NrG   r.   )r=   rJ   )r    model_inputsrG   model_outputss       r%   _forward"ImageSegmentationPipeline._forward   s1    "&&}5

2\2'2m$r'   c                 T   S nUS;   a2  [        U R                  S5      (       a  U R                  R                  nO7US;   a1  [        U R                  S5      (       a  U R                  R                  nUb  U" UUUUUS   S9S   n/ nUS   n	US	    H  n
XS
   :H  S-  n[        R
                  " UR                  5       R                  [        R                  5      SS9nU R                  R                  R                  U
S      nU
S   nUR                  XUS.5        M     U$ US;   a  [        U R                  S5      (       a  U R                  R                  XS   S9S   n/ nUR                  5       n	[        R                  " U	5      nU Hs  nX:H  S-  n[        R
                  " UR                  [        R                  5      SS9nU R                  R                  R                  U   nUR                  S XS.5        Mu     U$ [!        SU S[#        U R                  5       35      e)N>   Npanoptic"post_process_panoptic_segmentation>   Ninstance"post_process_instance_segmentationrG   )r*   r+   r,   target_sizesr   segmentationsegments_infoid   L)modelabel_idscore)rg   labelmask>   Nsemantic"post_process_semantic_segmentation)r_   zSubtask z is not supported for model )hasattrrM   r\   r^   r   	fromarraynumpyastypenpuint8rJ   rK   id2labelappendrk   uniquer>   type)r    rW   r)   r*   r+   r,   fnoutputs
annotationr`   segmentri   rh   rg   labelss                  r%   postprocess%ImageSegmentationPipeline.postprocess   s%    ((WT5I5IKo-p-p%%HHB**wt7K7KMq/r/r%%HHB>#-,G*=9 G J">2L"?3$5<tzz|':':288'D3O

))227:3FG(!!E4"PQ 4. ! **wt7K7KMq/r/r**MM-,H N G J"==?LYY|,F$-4t{{288'<3G

))2259!!D5"OP	    xy0LTRVR\R\M]L^_``r'   r.   )NN)Ng?      ?r}   )rL   
__module____qualname____firstlineno____doc___load_processor_load_image_processor_load_feature_extractor_load_tokenizerr   r1   r   r   strr   listdictr8   rS   rX   r{   __static_attributes____classcell__)r$   s   @r%   r   r      s   !F O #O'9" euS-%78eCeDQUVY[^V^Q_L`e eqtCy4+>>q#qRVW[\`adfiai\jWkRlq q02CS	4;NNO02[^02	d38n	T$sCx.%9 :	:02d, kn, ,r'   r   )typingr   r   r   rn   rp   utilsr   r   r	   r
   r   baser   r   PILr   image_utilsr   models.auto.modeling_autor   r   r   r   
get_loggerrL   loggerr   r.   r'   r%   <module>r      sw    ' '  k k 4 (  
		H	% ,FGD D HDr'   