#python #python-tesseract
#python #python-tesseract
Вопрос:
Как упоминалось в названии, у меня возникли проблемы с распознаванием символа, скрипт распознает ‘ ‘ как ‘4’. как я могу улучшить точность. Пример приведенных ниже изображений вместе с кодом.
Я попытался оптимизировать, используя коды в #. Но я не добился успеха
img = cv2.imread("imgbug.png")
img = cv2.resize(img, None, fx=1.98, fy=1.98, interpolation=cv2.INTER_CUBIC)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((1, 1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)
#img=cv2.threshold(cv2.GaussianBlur(img, (1, 1), 0), 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)[1]
#img=cv2.threshold(cv2.bilateralFilter(img, 5, 75, 75), 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)[1]
cmd = pytesseract.image_to_string(img)
xx = pytesseract.image_to_boxes(img)
cv2.imshow('',img)
print(cmd)
print(xx)
My output is:
34 3=8
9 4=16
2 2=4
3 15 67 28 84 0
4 26 67 35 84 0
29 67 44 82 0
3 45 67 58 84 0
= 59 71 73 80 0
8 75 67 88 84 0
9 16 39 28 56 0
30 39 44 54 0
4 45 39 57 56 0
= 59 43 73 52 0
1 75 39 83 56 0
6 85 39 97 56 0
2 16 12 28 28 0
30 12 44 26 0
2 45 12 58 28 0
= 59 15 73 24 0
4 75 12 87 28 0
Комментарии:
1. Взгляните на: Улучшение качества выходных данных. Все распознавание текста требует предварительной обработки, в tesseract в качестве бесплатного варианта вам нужно сделать это самостоятельно.
Ответ №1:
Попробуйте изменить его на оттенки серого, затем установите пороговое значение.
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
Что-то вроде этого
Это увеличит скорость распознавания, но я подозреваю, что проблема кроется в самой библиотеке. Если это не сработает, я рекомендую использовать другую библиотеку или, возможно, попробовать что-то вроде Google vision
Комментарии:
1. Большое вам спасибо за код, он мне очень помог. Однако у меня все еще есть проблема, но на других изображениях у вас есть какие-либо предложения?
2. imgur.com/a/Pz5O4Mr — Это изображение вызывает у меня ту же проблему
3. Посмотрите. Я использовал pytesserect, и это ОТСТОЙ. Просто используйте другую библиотеку, основанную на машинном обучении. Поиск на github действительно поможет.
Ответ №2:
Одним из решений является применение threshold
к входному изображению.
У вас есть три входных изображения:
img_lst = ["pfB7MnL.png", "0amEBuu.png", "6FHilyj.png"]
Если вы применяете пороговое значение для каждого входного изображения:
for img_nm in img_lst:
img = cv2.imread(img_nm)
img = cv2.resize(img, None, fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.threshold(gry, 127, 255, cv2.THRESH_BINARY_INV)[1]
Результаты будут:
Когда вы читаете:
txt = pytesseract.image_to_string(thr)
print(txt)
Результат будет:
2 9=14
9 1=6
9 2=11
3 3=8
9 4=16
2 2=4
1 5=10
7 7=14
9 6=16
Код:
import pytesseract
import cv2
img_lst = ["pfB7MnL.png", "0amEBuu.png", "6FHilyj.png"]
for img_nm in img_lst:
img = cv2.imread(img_nm)
img = cv2.resize(img, None, fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.threshold(gry, 127, 255, cv2.THRESH_BINARY_INV)[1]
txt = pytesseract.image_to_string(thr)
print(txt)
Комментарии:
1. Большое вам спасибо за код, он мне очень помог. Однако у меня все еще есть проблема, но на других изображениях у вас есть какие-либо предложения?
2. imgur.com/a/Pz5O4Mr — Это изображение вызывает у меня ту же проблему
3. Может быть, или позвольте мне спросить вас, вы пробовали код с разными параметрами? К сожалению, универсального кода для решения проблем распознавания не существует. Мое предложение — 1. Попробуйте threahold с разными значениями, т.Е. 0, 255 или 0, 128 2. Если опция 1 не работает, попробуйте adaptive-threshold
4. Я попробую этот способ. однако изображения с числами всегда случайны, мне кажется, что когда я изменяю код, я могу решить некоторые и не могу решить другие.
5. я внес некоторые изменения в пороговые входные данные и вижу, что они работают для меня. Я проведу несколько тестов. Большое вам спасибо.