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 . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.