pytesseract
| Введение | |
| Скачать | |
| Установить | |
| Добавить в PATH | |
| Узнать версию | |
| Похожие статьи |
Введение
Скачать
Версии для
Windows
можно скачать с сайта университета Маннхейма
uni-mannheim.de
Github
репозиторий находится
здесь
Установка
Рассмотрим установку на примере tesseract-ocr-w64-setup-v5.3.0.20221214.exe
Выберите язык
https://devhops.ru
Нажмите Next >
https://devhops.ru
Нажмите I Agree
https://devhops.ru
Нажмите Next >
https://devhops.ru
Нажмите Next >
https://devhops.ru
Нажмите Next >
https://devhops.ru
Нажмите Install
https://devhops.ru
Нажмите Next >
https://devhops.ru
Нажмите Finish
https://devhops.ru
Добавить в PATH
Добавить путь до Tesseract в системную переменную PATH можно командой PowerShell
$Env:Path += ';C:/Program Files/Tesseract-OCR'
В Git Bash
export PATH="/c/Program Files/Tesseract-OCR:$PATH"
Узнать версию
Узнать версию Tesseract можно командой PowerShell
tesseract --version
tesseract v5.3.0.20221214 leptonica-1.78.0 libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.3) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0 Found AVX2 Found AVX Found FMA Found SSE4.1 Found libarchive 3.5.0 zlib/1.2.11 liblzma/5.2.3 bz2lib/1.0.6 liblz4/1.7.5 libzstd/1.4.5 Found libcurl/7.77.0-DEV Schannel zlib/1.2.11 zstd/1.4.5 libidn2/2.0.4 nghttp2/1.31.0
image_to_string()
tesseract ├── demo.py ├── img.png └── venv
# demo.py import pytesseract from PIL import Image img = Image.open("img.png") text = pytesseract.image_to_string(img, lang='eng') print(text)
HeiHei.ru
HeiHei.ru HeiHei.ru TestSetup.ru
Размывание
Проверим насколько хорошо Tesseract справляется с размытыми изображениями.
import pytesseract from PIL import Image, ImageFilter img = Image.open("img.png") for i in range(1, 4): print("blur: ", i) img_blur = img.filter(ImageFilter.GaussianBlur(i)) img_blur.show() text_blur = pytesseract.image_to_string(img_blur, lang='eng') print(text_blur)
blur: 1 HeiHei.ru HeiHei.ru TestSetup.ru
blur: 2 HeiHei.ru HeiHei.ru
blur: 3
blur 1 ещё распознаётся правильно. blur 2 уже находит только верхнюю строку. blur 3 уже ничего не находит.
В моём сетапе вторая строка ещё видна при blur 1.8 и уже не видна при blur 1.9.
Интересный результат получился при blur 2.1 первое слово распознано верно, второе уже с ошибкой
blur: 2.1 HeiHei.ru Heitteiru
Шум
Проверим насколько хорошо Tesseract справляется с шумом.
import pytesseract import matplotlib.pyplot as plt from PIL import Image import numpy as np from skimage import color img = Image.open("img.png") img_array = np.array(img.convert("RGB")) img_grey = color.rgb2gray(img_array) noise = np.ones_like(img_grey) * 0.2 * (img_grey.max() - img_grey.min()) noise[np.random.random(size=noise.shape) > 0.5] *= -1 img_noisy = img_grey + noise img_noisy_uint8 = (np.clip(img_noisy, 0, 1) * 255).astype(np.uint8) img_noisy_pil = Image.fromarray(img_noisy_uint8, mode="L") plt.imshow(img_noisy_pil, cmap="gray") plt.axis("off") plt.show() text_noisy = pytesseract.image_to_string(img_noisy_pil, lang="eng") print(text_noisy)
HeiHei.ru HeiHei.ru TestSetup.ru
Если увеличить амплитуду шума до 0.3 а процент отражений до 70 Tesseract в моём сетапе потеряет точку в первом слове.
# Увеличим амплитуду шума с 0.2 до 0.3 noise = np.ones_like(img_grey) * 0.3 * (img_grey.max() - img_grey.min()) # Увеличим процент значений которые мы заменяем на противоположные с 50 до 70 noise[np.random.random(size=noise.shape) > 0.3] *= -1
HeiHeiru HeiHei.ru TestSetup.ru
Если увеличить амплитуду шума до 0.5 а процент отражений до 80 Tesseract в моём сетапе уже ничего не найдёт.
Отражение
Проверим как Tesseract будет читать отзеркаленное сверху вниз изображение.
import pytesseract from PIL import Image img = Image.open("img.png") img_flipped = img.transpose(Image.FLIP_TOP_BOTTOM) img_flipped.show() text_flipped = pytesseract.image_to_string(img_flipped, lang='eng') print(text_flipped)
Isefe6gnb-in HSIH6Ikn HEIHEI Ln
Снова хочу обратить внимание на то, что с первым словом HeiHei.ru Tesseract справился хуже чем со вторым таким же словом.
С помощью Tesseract можно конвертировать изображени в формат, готовый для сохранения в .pdf
import pytesseract from PIL import Image img = Image.open("img.png") pdf_bytes = pytesseract.image_to_pdf_or_hocr("img.png", extension="pdf") with open("output.pdf", "wb") as pdf_file: pdf_file.write(bytearray(pdf_bytes))
Автор статьи: Андрей Олегович
| OCR | |
| OCR в Python |