python #numpy #opencv #ocr
#python #numpy #opencv #распознавание
Вопрос:
Я пытаюсь подготовить изображения для распознавания с помощью Tesseract. Однако некоторые последовательности символов касаются (из-за засечек на глифах шрифта), и это сбивает его с толку.
Например I/U
:
Я замечаю яркий контур для каждого символа. Если бы это можно было заменить темным цветом, буквы получили бы некоторое пространство для дыхания.
img_grey[img_grey > 100] = 0
… Но я не могу заставить это работать.
Кто-нибудь знает о лучшей технике?
Комментарии:
1. OCR не должен нуждаться в этом
Ответ №1:
Используя OpenCV, вы можете преобразовать его в оттенки серого, затем применить порог Otsu для получения двоичного изображения, а затем стереть его:
import cv2
import numpy as np
im = cv2.imread('image.png')
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
_, th = cv2.threshold(im, 120, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)
kernel = np.ones((5,5), np.uint8)
# Increase iterations if you want it thinner
eroded = cv2.erode(th, kernel, iterations=2)
cv2.imwrite('eroded.png', eroded)
Ответ №2:
Вы можете попытаться стереть изображение, в opencv есть операция, называемая eroding, в этом случае она в основном уменьшает толщину символа. Это должно оставить некоторое пространство между символами, но будьте осторожны, чтобы не переусердствовать, иначе tesseract может не распознать символ. Методом проб и ошибок можно получить нужное количество ошибок.
Для получения более подробной информации перейдите по этой ссылке.