Вы должны попробовать разные режимы psm вместо значений по умолчанию, например:
target = pytesseract.image_to_string(im,config='--psm 4',lang='vie')
Извлечь из документов:
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
Так, например, для /Untitled3.jpg
вы можете попробовать --psm 4
, а если вы не сможете попробовать --psm 11
для обоих.
В зависимости от вашей версии tesseract вы также можете попробовать разные режимы oem:
Используйте --oem 1 для LSTM, --oem 0 для Legacy Tesseract. Обратите внимание, что модели Legacy Tesseract включены только в файлы обученных данных из репозитория tessdata.
EDIT
Также, как видно на ваших изображениях, есть два языка, поэтому, если вы хотите использовать параметр lang
, вам нужно вручную разделить изображение на два, чтобы не перепутать движок tesseract и использовать для них разные значения lang
.
РЕДАКТИРОВАТЬ 2
Ниже приведен полный рабочий пример с Unitiled3. То, что я заметил, было твоим неправильным использованием порога. Вы должны установить maxval
на что-то большее, чем значение, на которое вы устанавливаете порог Как и в моем примере, я установил thresh
177, но maxval
на 255, поэтому все значения выше 177 будут черными. Мне даже не пришлось делать бинаризацию.
import cv2
import pytesseract
from cv2.cv2 import imread, cvtColor, COLOR_BGR2GRAY, threshold, THRESH_BINARY
image = imread("./Untitled3.jpg")
image = cvtColor(image,COLOR_BGR2GRAY)
_,image = threshold(image,177,255,THRESH_BINARY)
cv2.namedWindow("TEST")
cv2.imshow("TEST",image)
cv2.waitKey()
text = pytesseract.image_to_string(image, lang='eng')
print(text)
Выход:
New York, New York
Salzburg, Austria
Hollywood, California