Как заполнить набросок текста PIL для использования тессеракта?

изображение ocr

Привет, я хочу, чтобы это изображение было создано с помощью PIL и tesseract, в целом оно работает нормально, несмотря на то, что на этом рисунке номер контура, например 1148, tesseract не смог его распознать. Поэтому я хочу использовать PIL, чтобы заполнить набросок текста 1148 сплошным текстом, но я не знаю, как это сделать. Любая помощь будет оценена. Пожалуйста.

И это мой код:

api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetVariable("tessedit_char_whitelist", "0123456789.")
api.SetPageSegMode(tesseract.PSM_AUTO
pic = ImageGrab.grab((120,90,180,650)) 
pic = pic.filter(ImageFilter.CONTOUR)
pic.save("321.png")
mImgFile = "321.png"
mBuffer=open(mImgFile,"rb").read()
result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api)
print result

1 ответ

Решение

Вы можете попробовать экспериментальный floodfill() функция в ImageDraw,

Если вы можете выяснить некоторые точки внутри цифр, используйте что-то вроде этого:

from PIL import ImageColor, ImageDraw
draw = ImageDraw.Draw(pic)

point_inside_digit = (some_x, some_y)

ImageDraw.floodfill(im, point_inside_digit, ImageColor.getrgb("black"))

del draw

В дополнение к белому есть несколько синих и желтых цифр, поэтому лучше заполнить их черной рамкой:

ImageDraw.floodfill(
    im, point_inside_digit, ImageColor.getrgb("black"),
    border=ImageColor.getrgb("black"))
Другие вопросы по тегам