




"""simple docstring"""







# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import numpy as np
import torch

from ..models.clipseg import CLIPSegForImageSegmentation
from ..utils import is_vision_available, requires_backends
from .base import PipelineTool


if is_vision_available():
  from PIL import Image

class 				snake_case_			(					lowerCamelCase_			):







   """simple docstring"""




   A_				      =       (
       '''This is a tool that creates a segmentation mask of an image according to a label. It cannot create an image.'''
       '''It takes two arguments named `image` which should be the original image, and `label` which should be a text '''
       '''describing the elements what should be identified in the segmentation mask. The tool returns the mask.'''
   )
   A_				      =       '''CIDAS/clipseg-rd64-refined'''
   A_				      =       '''image_segmenter'''
   A_				      =       CLIPSegForImageSegmentation

   A_				      =       ['''image''', '''text''']
   A_				      =       ['''image''']







   def __init__(		self       ,					*lowerCamelCase_       ,					**lowerCamelCase_)				->   Union[str, Any]:
       requires_backends(self       ,					['''vision'''])
       super().__init__(*lowerCamelCase_       ,					**lowerCamelCase_)







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_       ,					lowerCamelCase_)				->   str:
       return self.pre_processor(text=[label]       ,					images=[image]       ,					padding=lowerCamelCase_       ,					return_tensors='''pt''')







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_)				->   Optional[Any]:
       with torch.no_grad():
           UpperCamelCase              =	self.model(**lowerCamelCase_).logits
       return logits







   def   UpperCAmelCase__			(		self       ,					lowerCamelCase_)				->   Union[str, Any]:
       UpperCamelCase              =	outputs.cpu().detach().numpy()
       UpperCamelCase              =	0
       UpperCamelCase              =	1
       return Image.fromarray((array * 2_5_5).astype(np.uinta))




from ..utils import DummyObject, requires_backends





class  lowerCamelCase__	(    metaclass=UpperCAmelCase_):
     """simple docstring"""



     _A      =      ['transformers', 'torch', 'note_seq']







     def __init__(self					,      *__a					,      **__a     ):






           '''simple docstring'''



           requires_backends(self					,      ["transformers", "torch", "note_seq"]     )







     @classmethod
     def     _a   (cls					,      *__a					,      **__a     ):






           '''simple docstring'''



           requires_backends(cls					,      ["transformers", "torch", "note_seq"]     )







     @classmethod
     def     _a   (cls					,      *__a					,      **__a     ):






           '''simple docstring'''



           requires_backends(cls					,      ["transformers", "torch", "note_seq"]     )