Pytesseract не может распознавать символы в бинарных изображениях

Используя различные методы, я изменил капчу изображения, чтобы она выглядела примерно так.

Первое изображение с проверкой

Однако при использовании Pytesseract OCR пакет не может идентифицировать какой-либо символ, и я думаю, что это связано с линией над буквами.

script.py

 cv2.imwrite(filename, imgOP)
 text = pytesseract.image_to_string(Image.open(filename))

Вывод в консоли для изображения отсутствует

Однако при попытке с другим изображением (приведенным ниже) я получил результат как

Второе изображение Captcha

PGKQKf

Что опять не так из-за линии над буквой Т

Я использовал различные методы очистки изображений, такие как эрозия, расширение, а также вероятностное преобразование Хафа (результат приведен ниже).

#Hough Line Transform
img = cv2.imread('Output1.png')
edges = cv2.Canny(img, 1000, 1500)
minLineLength = 0
maxLineGap = 10000000000
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 15, minLineLength, maxLineGap)
for x in range(0, len(lines)):
    for x1, y1, x2, y2 in lines[x]:
        cv2.line(img, (x1, y1), (x2, y2), (255, 255, 255), 2)

cv2.imwrite('houghlines3.jpg', img)

где изображение после преобразования выглядит примерно так

введите здесь описание изображения

Любая другая комбинация значений minLineLength и maxLineGap не работает.

Как следует двигаться вперед? Я проверил различные методы, чтобы сделать Tesseract более точным, однако я не понимаю, какой из них мне следует использовать.

Помимо Tesseract, существуют ли какие-либо другие методы, которые можно было бы применить для получения желаемых результатов.

Я подумал о создании маски, где с помощью онлайн-инструмента я преобразовал изображение в 0 и 1, указанные ниже. Однако как это сделать и использовать для идентификации персонажей?

Двоичный текст


person rut_0_1    schedule 06.05.2018    source источник
comment
Я не понимаю, в чем проблема. Просто удалите строку над T и повторите попытку. После этого поста вы получите результат Tesseract. В некоторых случаях сделайте дополнительную предварительную обработку изображения, очистите его. Это просто..   -  person lucians    schedule 07.05.2018
comment
@ Ссылка, когда вы упоминаете о его очистке, что вы имеете в виду под этим, я использовал различные методы, упомянутые в вопросе выше, такие как эрозия и расширение (пробовали разные итерации и ядра), при этом линия идет, однако тогда pytesseract не может идентифицировать изображение . Мне нужен метод, который позволяет pytesseract полностью идентифицироваться со 100% эффективностью. Иногда 5 также ошибочно принимают за S, поэтому я спрашиваю, какие методы можно добавить.   -  person rut_0_1    schedule 10.05.2018
comment
Вы должны попробовать MNIST (ТОЛЬКО ДЛЯ ЧИСЕЛ) на этом этапе. Тессеракт не идеален. Другим решением может быть обучение Tesseract, но я не знаю, как это сделать. С набором данных MNIST вы можете добиться хорошей точности с числами. Кроме того, изображения, которые вы разместили, можно очистить на 100%, удалив линии и точки (проверьте удаление линий и пятен - посмотрите на некоторые из моих вопросов, которые я задал по этому поводу).   -  person lucians    schedule 10.05.2018
comment
@Link stackoverflow. com/questions/46472713/, я использовал этот ваш вопрос для справки, однако пока не получил желаемых результатов (просмотреть обновленный вопрос). Я поищу набор обучающих данных для pytesseract и MNIST.   -  person rut_0_1    schedule 13.05.2018