Example #1
0
    def execute(self, *args, **kwargs):
        """
        Execute the command line binary of tesseract
        """
        super(Tesseract, self).execute(*args, **kwargs)

        if self.command_tesseract:
            image = self.converter.get_page()

            try:
                temporary_image_file = TemporaryFile()
                shutil.copyfileobj(image, temporary_image_file)
                temporary_image_file.seek(0)

                arguments = ['-', '-']

                keyword_arguments = {
                    '_in': temporary_image_file,
                    '_timeout': self.command_timeout
                }

                if self.language:
                    keyword_arguments['l'] = self.language

                environment = os.environ.copy()
                environment.update(self.environment)
                keyword_arguments['_env'] = environment

                try:
                    result = self.command_tesseract(*arguments,
                                                    **keyword_arguments)
                    return force_text(result.stdout)
                except Exception as exception:
                    error_message = (
                        'Exception calling Tesseract with language option: {}; {}'
                    ).format(self.language, exception)

                    if self.language not in self.languages:
                        error_message = (
                            '{}\nThe requested OCR language "{}" is not '
                            'available and needs to be installed.\n').format(
                                error_message, self.language)

                    logger.error(error_message)
                    raise OCRError(error_message)
                else:
                    return result
            finally:
                temporary_image_file.close()