Ë
    T^(h²2  ã                   óô   — d Z ddlmZ ddlmZmZmZ ddlZddl	m
Z
mZ ddlmZmZmZ ddlmZmZmZmZ dd	lmZmZ  e«       rddlZ e«       rddlZ G d
„ de«      Z G d„ ded¬«      Z G d„ de«      ZdgZy)z
Processor class for SAM.
é    )Údeepcopy)ÚListÚOptionalÚUnionNé   )Ú
ImageInputÚ
VideoInput)ÚImagesKwargsÚProcessingKwargsÚProcessorMixin)Ú
AudioInputÚBatchEncodingÚPreTokenizedInputÚ	TextInput)Úis_tf_availableÚis_torch_availablec                   óˆ   — e Zd ZU ee   ed<   eeee         ed<   eeee         ed<   eeeee            ed<   ee   ed<   y)ÚSamImagesKwargsÚsegmentation_mapsÚinput_pointsÚinput_labelsÚinput_boxesÚpoint_pad_valueN)	Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   ÚfloatÚint© ó    úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/sam/processing_sam.pyr   r   %   sW   … Ø 
Ñ+Ó+Ø˜4  U¡Ñ,Ñ-Ó-Ø˜4  S¡	™?Ñ+Ó+Ø˜$˜t D¨¡KÑ0Ñ1Ñ2Ó2Ø˜c‘]Ô"r!   r   c                   ó$   — e Zd ZU eed<   dddiiZy)ÚSamProcessorKwargsÚimages_kwargsr   éöÿÿÿN)r   r   r   r   r   Ú	_defaultsr    r!   r"   r$   r$   -   s   … Ø"Ó"àØ˜sð
ð�Ir!   r$   F)Útotalc                   ó  ‡ — e Zd ZdZdgZdZg d¢Zˆ fd„Z	 dddddœdee	   d	ee
eeee   ee   f      d
ee   dee   def
d„Z	 	 	 	 	 dd„Zd„ Z	 ddedej,                  dej,                  fd„Z	 	 	 dd„Zed„ «       Zd„ Zˆ xZS )ÚSamProcessoraÂ  
    Constructs a SAM processor which wraps a SAM image processor and an 2D points & Bounding boxes processor into a
    single processor.

    [`SamProcessor`] offers all the functionalities of [`SamImageProcessor`]. See the docstring of
    [`~SamImageProcessor.__call__`] for more information.

    Args:
        image_processor (`SamImageProcessor`):
            An instance of [`SamImageProcessor`]. The image processor is a required input.
    Úimage_processorÚSamImageProcessor)r   r   r   r   c                 ó`   •— t         ‰| �  |«       | j                  j                  d   | _        y )NÚlongest_edge)ÚsuperÚ__init__r+   ÚsizeÚtarget_size)Úselfr+   Ú	__class__s     €r"   r0   zSamProcessor.__init__M   s)   ø€ Ü‰Ñ˜Ô)Ø×/Ñ/×4Ñ4°^ÑDˆÕr!   N)ÚtextÚaudioÚvideoÚimagesr5   r6   r7   Úreturnc          
      óð  —  | j                   t        fdi i|¤ | j                  |Ž ¤Ž}|d   j                  dd«      }|d   j                  dd«      }	|d   j                  dd«      }
|d   j                  dd«      } | j                  |fi |d   ¤Ž}|d   }t        |d	«      r|j                  «       }| j                  ||	|
¬
«      \  }}	}
| j                  ||||	|
|d   j                  d«      |¬«      }|S )zÅ
        This method uses [`SamImageProcessor.__call__`] method to prepare image(s) for the model. It also prepares 2D
        points and bounding boxes for the model if they are provided.
        Útokenizer_init_kwargsr%   r   Nr   r   r   Úoriginal_sizesÚnumpy)r   r   r   Úcommon_kwargsÚreturn_tensors)r   r   r   r?   r   )
Ú_merge_kwargsr$   Ú'prepare_and_validate_optional_call_argsÚpopr+   Úhasattrr=   Ú_check_and_preprocess_pointsÚ_normalize_and_convertÚget)r3   r8   r5   r6   r7   ÚargsÚkwargsÚoutput_kwargsr   r   r   r   Úencoding_image_processorr<   s                 r"   Ú__call__zSamProcessor.__call__Q   sV  € ð& +˜×*Ñ*Üñ
à"$ð
ð ð
ð ;ˆd×:Ñ:¸DÐAñ	
ˆð % _Ñ5×9Ñ9¸.È$ÓOˆØ$ _Ñ5×9Ñ9¸.È$ÓOˆØ# OÑ4×8Ñ8¸ÈÓMˆØ'¨Ñ8×<Ñ<Ð=NÐPTÓUˆà#7 4×#7Ñ#7Øñ$
à˜OÑ,ñ$
Ð ð 2Ð2BÑCˆä�> 7Ô+Ø+×1Ñ1Ó3ˆNà26×2SÑ2SØ%Ø%Ø#ð 3Tó 3
Ñ/ˆ�l Kð $(×#>Ñ#>Ø$ØØ%Ø%Ø#Ø(¨Ñ9×=Ñ=Ð>NÓOØ+ð $?ó $
Ð ð (Ð'r!   c           
      óø  ‡— ‰�Át        |«      t        ‰«      k7  r/‰D �cg c]"  }| j                  | j                  ||d   «      ‘Œ$ c}Šn:t        ‰|«      D ��	cg c]"  \  }}	| j                  | j                  ||	«      ‘Œ$ c}	}Št	        ˆfd„‰D «       «      s|�| j                  ‰||«      \  Š}t        j                  ‰«      Š|�t        j                  |«      }|�—t        |«      t        |«      k7  r0|D �
cg c]$  }
| j                  | j                  |
|d   d¬«      ‘Œ& }}
n;t        ||«      D �
�	cg c]$  \  }
}	| j                  | j                  |
|	d¬«      ‘Œ& }}
}	t        j                  |«      }|�£|dk(  rAt        j                  |«      }t        |j                  «      dk7  r|j                  d«      n|}nJ|dk(  rEt        j                  |«      }t        |j                  «      dk7  rt        j                  |d«      n|}|j                  d	|i«       ‰�£|dk(  rAt        j                  ‰«      Št        ‰j                  «      d
k7  r‰j                  d«      n‰ŠnJ|dk(  rEt        j                  ‰«      Št        ‰j                  «      d
k7  rt        j                  ‰d«      n‰Š|j                  d‰i«       |�£|dk(  rAt        j                  |«      }t        |j                  «      dk7  r|j                  d«      n|}nJ|dk(  rEt        j                  |«      }t        |j                  «      dk7  rt        j                  |d«      n|}|j                  d|i«       |S c c}w c c}	}w c c}
w c c}	}
w )Nr   c              3   óV   •K  — | ]   }|j                   ‰d    j                   k(  –— Œ" y­w)r   N)Úshape)Ú.0Úpointr   s     €r"   ú	<genexpr>z6SamProcessor._normalize_and_convert.<locals>.<genexpr>¡   s$   øè ø€ ÒVÀ�u—{‘{ l°1¡o×&;Ñ&;Õ;ÑVùs   ƒ&)T)Úis_bounding_boxÚptr   é   Útfr   é   r   r   )ÚlenÚ_normalize_coordinatesr2   ÚzipÚallÚ_pad_points_and_labelsÚnpÚarrayÚtorchÚ
from_numpyrN   Ú	unsqueezerU   Úconvert_to_tensorÚexpand_dimsÚupdate)r3   rJ   r<   r   r   r   r?   r   rP   Úoriginal_sizeÚboxs      `       r"   rE   z#SamProcessor._normalize_and_convertŒ   sd  ø€ ð Ð#Ü�>Ó"¤c¨,Ó&7Ò7àiuö Ø`e�D×/Ñ/°×0@Ñ0@À%ÈÐXYÑIZÕ[ò ‘ô 14°LÀ.Ó0Q÷ á,˜˜}ð ×/Ñ/°×0@Ñ0@À%ÈÕWó �ô
 ÓVÈÔVÔVØÐ+Ø15×1LÑ1LØ$ l°Oó2Ñ.�L ,ô Ÿ8™8 LÓ1ˆLàÐ#ÜŸ8™8 LÓ1ˆLàÐ"Ü�>Ó"¤c¨+Ó&6Ò6ð  +öàð ×/Ñ/°×0@Ñ0@À#À~ÐVWÑGXÐjnÐ/Õoð�ñ ô /2°+¸~Ó.N÷á*˜˜]ð ×/Ñ/°×0@Ñ0@À#À}ÐfjÐ/Õkð�ñ ô Ÿ(™( ;Ó/ˆKàÐ"Ø Ò%Ü#×.Ñ.¨{Ó;�ä:=¸k×>OÑ>OÓ:PÐTUÒ:U˜k×3Ñ3°AÔ6Ð[f‘Ø 4Ò'Ü ×2Ñ2°;Ó?�ä@CÀK×DUÑDUÓ@VÐZ[Ò@[œbŸn™n¨[¸!Ô<Ðal�Ø$×+Ñ+¨]¸KÐ,HÔIØÐ#Ø Ò%Ü$×/Ñ/°Ó=�ä<?À×@RÑ@RÓ<SÐWXÒ<X˜|×5Ñ5°aÔ8Ð^j‘Ø 4Ò'Ü!×3Ñ3°LÓA�äBEÀl×FXÑFXÓBYÐ]^ÒB^œrŸ~™~¨l¸AÔ>Ðdp�Ø$×+Ñ+¨^¸\Ð,JÔKØÐ#Ø Ò%Ü$×/Ñ/°Ó=�ä<?À×@RÑ@RÓ<SÐWXÒ<X˜|×5Ñ5°aÔ8Ð^j‘Ø 4Ò'Ü!×3Ñ3°LÓA�äBEÀl×FXÑFXÓBYÐ]^ÒB^œrŸ~™~¨l¸AÔ>Ðdp�Ø$×+Ñ+¨^¸\Ð,JÔKà'Ð'ùòA ùó ùò$ùó
s   Ÿ'M&Á'M+Ã9)M1Ä4)M6c           	      ó�  — t        |D �cg c]  }|j                  d   ‘Œ c}«      }g }t        |«      D ]†  \  }}|j                  d   |k7  r^t        j                  |t        j
                  ||j                  d   z
  df«      |z   gd¬«      }t        j                  ||   |g«      ||<   |j                  |«       Œˆ |}||fS c c}w )zh
        The method pads the 2D points and labels to the maximum number of points in the batch.
        r   é   )Úaxis)ÚmaxrN   Ú	enumerater\   ÚconcatenateÚzerosÚappend)r3   r   r   r   rP   Úexpected_nb_pointsÚprocessed_input_pointsÚis           r"   r[   z#SamProcessor._pad_points_and_labelsÚ   sÏ   € ô !¸lÖ!K°U %§+¡+¨a£.Ò!KÓLÐØ!#ÐÜ! ,Ó/ò 	1‰HˆAˆuØ�{‰{˜1‰~Ð!3Ò3ÜŸ™ØœBŸH™HÐ&8¸5¿;¹;Àq¹>Ñ&IÈ1Ð%MÓNÐQ`Ñ`ÐaÐhiô�ô #%§)¡)¨L¸©O¸oÐ=NÓ"O�˜Q‘Ø"×)Ñ)¨%Õ0ð	1ð .ˆØ˜\Ð)Ð)ùò "Ls   ŠCr2   Úcoordsc                 ó  — |\  }}| j                   j                  ||¬«      \  }}t        |«      j                  t        «      }|r|j                  ddd«      }|d   ||z  z  |d<   |d   ||z  z  |d<   |r|j                  dd«      }|S )z~
        Expects a numpy array of length 2 in the final dimension. Requires the original image size in (H, W) format.
        )r.   éÿÿÿÿrg   ).r   ).rT   rV   )r+   Ú_get_preprocess_shaper   Úastyper   Úreshape)	r3   r2   rq   rd   rR   Úold_hÚold_wÚnew_hÚnew_ws	            r"   rX   z#SamProcessor._normalize_coordinatesê   s›   € ð %‰ˆˆuØ×+Ñ+×AÑAÀ-Ð^iÐAÓj‰ˆˆuÜ˜&Ó!×(Ñ(¬Ó/ˆáØ—^‘^ B¨¨1Ó-ˆFà ™¨5°5©=Ñ9ˆˆv‰Ø ™¨5°5©=Ñ9ˆˆv‰áØ—^‘^ B¨Ó*ˆFàˆr!   c                 óŠ  — |�{t        |d«      r|j                  «       j                  «       }t        |t        «      rt        |d   t        «      st        d«      ‚|D �cg c]  }t        j                  |«      ‘Œ }}nd}|�{t        |d«      r|j                  «       j                  «       }t        |t        «      rt        |d   t        «      st        d«      ‚|D �cg c]  }t        j                  |«      ‘Œ }}nd}|�®t        |d«      r|j                  «       j                  «       }t        |t        «      r)t        |d   t        «      rt        |d   d   t        «      st        d«      ‚|D �cg c]4  }t        j                  |«      j                  t        j                  «      ‘Œ6 }}nd}|||fS c c}w c c}w c c}w )a8  
        Check and preprocesses the 2D points, labels and bounding boxes. It checks if the input is valid and if they
        are, it converts the coordinates of the points and bounding boxes. If a user passes directly a `torch.Tensor`,
        it is converted to a `numpy.ndarray` and then to a `list`.
        Nr=   r   z7Input points must be a list of list of floating points.z-Input labels must be a list of list integers.z>Input boxes must be a list of list of list of floating points.)
rC   r=   ÚtolistÚ
isinstanceÚlistÚ
ValueErrorr\   r]   ru   Úfloat32)r3   r   r   r   Úinput_pointÚlabelre   s          r"   rD   z)SamProcessor._check_and_preprocess_pointsÿ   s‹  € ð Ð#Ü�| WÔ-Ø+×1Ñ1Ó3×:Ñ:Ó<�ä˜l¬DÔ1¼ÀLÐQRÁOÔUYÔ9ZÜ Ð!ZÓ[Ð[ØEQÖR°kœBŸH™H [Õ1ÐRˆLÑRàˆLàÐ#Ü�| WÔ-Ø+×1Ñ1Ó3×:Ñ:Ó<�ä˜l¬DÔ1¼ÀLÐQRÁOÔUYÔ9ZÜ Ð!PÓQÐQØ9EÖF°œBŸH™H U�OÐFˆLÑFàˆLàÐ"Ü�{ GÔ,Ø)×/Ñ/Ó1×8Ñ8Ó:�ô ˜{¬DÔ1Ü! +¨a¡.´$Ô7Ü! +¨a¡.°Ñ"3´TÔ:ä Ð!aÓbÐbØGRÖSÀœ2Ÿ8™8 C›=×/Ñ/´·
±
Õ;ÐSˆKÑSàˆKà˜\¨;Ð6Ð6ùò9 Sùò Gùò Ts   ÁF6ÃF;Å39G c                 ój   — | j                   j                  }t        t        j	                  |«      «      S ©N)r+   Úmodel_input_namesr~   ÚdictÚfromkeys)r3   Úimage_processor_input_namess     r"   r…   zSamProcessor.model_input_names.  s)   € à&*×&:Ñ&:×&LÑ&LÐ#Ü”D—M‘MÐ"=Ó>Ó?Ð?r!   c                 ó:   —  | j                   j                  |i |¤ŽS r„   )r+   Úpost_process_masks)r3   rG   rH   s      r"   rŠ   zSamProcessor.post_process_masks3  s    € Ø6ˆt×#Ñ#×6Ñ6¸ÐGÀÑGÐGr!   r„   )NNNrS   r&   )F)NNN)r   r   r   Ú__doc__Ú
attributesÚimage_processor_classÚoptional_call_argsr0   r   r   r   r   r   r   r   r	   r   rK   rE   r[   r   r\   ÚndarrayrX   rD   Úpropertyr…   rŠ   Ú__classcell__)r4   s   @r"   r*   r*   6   s  ø„ ñ
ð $Ð$€JØ/ÐòÐôEð (,ð9(ð imØ&*Ø&*ò9(à˜Ñ$ð9(ð �u˜YÐ(9¸4À	¹?ÈDÐQbÑLcÐcÑdÑeð9(ð ˜
Ñ#ð9(ð ˜
Ñ#ð9(ð 
ó9(ð~ ØØØØóL(ò\*ð" TYñØðØ(*¯
©
ðà	�‰óð. ØØó	-7ð^ ñ@ó ð@öHr!   r*   )r‹   Úcopyr   Útypingr   r   r   r=   r\   Úimage_utilsr   r	   Úprocessing_utilsr
   r   r   Útokenization_utils_baser   r   r   r   Úutilsr   r   r^   Ú
tensorflowrU   r   r$   r*   Ú__all__r    r!   r"   ú<module>rš      st   ðñõ ß (Ñ (ã ç 1ß NÑ Nß ^Ó ^ß 8ñ ÔÛáÔÛô#�lô #ôÐ)°õ ô~H�>ô ~HðB Ð
�r!   