codingutf8 2021 the huggingface inc team 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 orglicenseslicense2 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 processor class for trocr attributes imageprocessor tokenizer imageprocessorclass autoimageprocessor tokenizerclass autotokenizer def initself imageprocessornone tokenizernone kwargs featureextractor none if featureextractor in kwargs warnings warn the featureextractor argument is deprecated and will be removed in v5 use imageprocessor instead futurewarning featureextractor kwargs popfeatureextractor imageprocessor imageprocessor if imageprocessor is not none else featureextractor if imageprocessor is none raise valueerroryou need to specify an imageprocessor if tokenizer is none raise valueerroryou need to specify a tokenizer super initimageprocessor tokenizer self currentprocessor self imageprocessor self intargetcontextmanager false def callself args kwargs for backward compatibility if self intargetcontextmanager return self currentprocessorargs kwargs images kwargs popimages none text kwargs poptext none if lenargs 0 images args0 args args1 if images is none and text is none raise valueerroryou need to specify either an images or text input to process if images is not none inputs self imageprocessorimages args kwargs if text is not none encodings self tokenizertext kwargs if text is none return inputs elif images is none return encodings else inputslabels encodingsinputids return inputs def batchdecodeself args kwargs return self tokenizer batchdecodeargs kwargs def decodeself args kwargs return self tokenizer decodeargs kwargs contextmanager def astargetprocessorself warnings warn astargetprocessor is deprecated and will be removed in v5 of transformers you can process your labels by using the argument text of the regular call method either in the same call as your images inputs or in a separate call self intargetcontextmanager true self currentprocessor self tokenizer yield self currentprocessor self imageprocessor self intargetcontextmanager false property def featureextractorclassself warnings warn featureextractorclass is deprecated and will be removed in v5 use imageprocessorclass instead futurewarning return self imageprocessorclass property def featureextractorself warnings warn featureextractor is deprecated and will be removed in v5 use imageprocessor instead futurewarning return self imageprocessor coding utf 8 2021 the huggingface inc team 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 processor class for trocr constructs a trocr processor which wraps a vision image processor and a trocr tokenizer into a single processor trocrprocessor offers all the functionalities of vitimageprocessor deitimageprocessor and robertatokenizer xlmrobertatokenizer see the trocrprocessor __call__ and trocrprocessor decode for more information args image_processor vitimageprocessor deitimageprocessor optional an instance of vitimageprocessor deitimageprocessor the image processor is a required input tokenizer robertatokenizer xlmrobertatokenizer optional an instance of robertatokenizer xlmrobertatokenizer the tokenizer is a required input when used in normal mode this method forwards all its arguments to autoimageprocessor s autoimageprocessor __call__ and returns its output if used in the context trocrprocessor as_target_processor this method forwards all its arguments to trocrtokenizer s trocrtokenizer __call__ please refer to the doctsring of the above two methods for more information for backward compatibility this method forwards all its arguments to trocrtokenizer s pretrainedtokenizer batch_decode please refer to the docstring of this method for more information this method forwards all its arguments to trocrtokenizer s pretrainedtokenizer decode please refer to the docstring of this method for more information temporarily sets the tokenizer for processing the input useful for encoding the labels when fine tuning trocr
import warnings
from contextlib import contextmanager

from ...processing_utils import ProcessorMixin


class TrOCRProcessor(ProcessorMixin):
    r

    attributes = ["image_processor", "tokenizer"]
    image_processor_class = "AutoImageProcessor"
    tokenizer_class = "AutoTokenizer"

    def __init__(self, image_processor=None, tokenizer=None, **kwargs):
        feature_extractor = None
        if "feature_extractor" in kwargs:
            warnings.warn(
                "The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`"
                " instead.",
                FutureWarning,
            )
            feature_extractor = kwargs.pop("feature_extractor")

        image_processor = image_processor if image_processor is not None else feature_extractor
        if image_processor is None:
            raise ValueError("You need to specify an `image_processor`.")
        if tokenizer is None:
            raise ValueError("You need to specify a `tokenizer`.")

        super().__init__(image_processor, tokenizer)
        self.current_processor = self.image_processor
        self._in_target_context_manager = False

    def __call__(self, *args, **kwargs):
        
        
        if self._in_target_context_manager:
            return self.current_processor(*args, **kwargs)

        images = kwargs.pop("images", None)
        text = kwargs.pop("text", None)
        if len(args) > 0:
            images = args[0]
            args = args[1:]

        if images is None and text is None:
            raise ValueError("You need to specify either an `images` or `text` input to process.")

        if images is not None:
            inputs = self.image_processor(images, *args, **kwargs)
        if text is not None:
            encodings = self.tokenizer(text, **kwargs)

        if text is None:
            return inputs
        elif images is None:
            return encodings
        else:
            inputs["labels"] = encodings["input_ids"]
            return inputs

    def batch_decode(self, *args, **kwargs):
        
        return self.tokenizer.batch_decode(*args, **kwargs)

    def decode(self, *args, **kwargs):
        
        return self.tokenizer.decode(*args, **kwargs)

    @contextmanager
    def as_target_processor(self):
        
        warnings.warn(
            "`as_target_processor` is deprecated and will be removed in v5 of Transformers. You can process your "
            "labels by using the argument `text` of the regular `__call__` method (either in the same call as "
            "your images inputs, or in a separate call."
        )
        self._in_target_context_manager = True
        self.current_processor = self.tokenizer
        yield
        self.current_processor = self.image_processor
        self._in_target_context_manager = False

    @property
    def feature_extractor_class(self):
        warnings.warn(
            "`feature_extractor_class` is deprecated and will be removed in v5. Use `image_processor_class` instead.",
            FutureWarning,
        )
        return self.image_processor_class

    @property
    def feature_extractor(self):
        warnings.warn(
            "`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead.",
            FutureWarning,
        )
        return self.image_processor