Tesserocr — это оболочка Python для Tesseract C++ API. Принимая во внимание, что Pytesseract является оболочкой для CLI tesseract-ocr.

Поэтому с помощью Tesserocr вы можете загрузить модель в начале или свою программу и запустить модель отдельно (например, в циклах для обработки видео). С pytesseract каждый раз, когда вы вызываете функцию image_to_string, она загружает модель и обрабатывает изображение, поэтому обработка видео происходит медленнее.

Для моих заданий веб-скрейпинга Universal Commercial Code мне нужно преобразовать более 200 000 файлов tif в текст. Я использовал Pytesseract в течение многих лет, но мне нужно было что-то более быстрое. Я действительно не нуждался в этом до моего последнего клиента. После некоторых исследований я наткнулся на Tesserocr.

Однако я столкнулся с проблемой, у меня есть файлы изображений, содержащие несколько страниц. Я смог справиться с этой проблемой с помощью Pytesseract, но то же самое решение не удалось с Tesserocr. Если у кого-то есть лучшее решение, чем ImageMagick. Я использовал ImageMagick для создания отдельных файлов png для каждой страницы в файле tiff. Затем я заказываю файлы png и, наконец, обрабатываю каждую страницу и создаю один текстовый файл для каждого изображения в формате TIFF. Не забудьте использовать Image.MAX_IMAGE_PIXELS = None для обработки очень больших файлов изображений — в противном случае вы получите предупреждение. Вот и все.

import tesserocr
import os
import pandas as pd
from datetime import datetime
from PIL import Image
from glob import glob
Image.MAX_IMAGE_PIXELS = None
api = tesserocr.PyTessBaseAPI()

files = glob('*.tif')
filesProcessed = []

for f, file in enumerate(files):
    if f >= 0:
        try:
            start = datetime.now()
            text = ''
            os.system(f'magick convert -verbose {file[:-4]}.tif scratch/{file[:-4]}.png')
            pngs = glob('scratch/*.png')
            pngs = sorted(pngs)
            print(len(pngs))
            for png in pngs:
                 pil_image = Image.open(png)
                 api.SetImage(pil_image)
                 text = text + api.GetUTF8Text()
            filename = file[:-4] + '.txt'
            with open(filename, 'w') as n:
                 n.write(text)
            for png in pngs:
                 os.remove(png)
            end = datetime.now()
            filesProcessed.append([file, len(pngs), start, end, end - start])
        except:
            print(f'{file} is a corrupt file')
            pass

df = pd.DataFrame(filesProcessed, columns = ['File', 'Pages', 'Start', 'End', 'Elapsed'])
df.to_csv('Inventory.csv', index = False)

Дальнейшее чтение







Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.