[Python] 307 pyocr 文字認識によるブラウザの文字読み取り 余白増しによる精度向上

前回の続きです。

Google Chromeのurl欄で読み取れない文字列に出くわしたので、精度向上の検討を行いました。

url欄はスラッシュと文字がかなり近いため、スラッシュを避けて切り取った画像の端と文字が接近してしまいます。そこで背景と同色で一回り大きい画像に貼り付けてみました。

結果は成功でした。これで完成としたいところです。

あとは文字のフォントをサンセリフ体(日本語フォントのゴシック体に相当)ではなくセリフ体(明朝体と同種)にしたら読み取り精度がさらに向上するのでしょうが、url欄のフォントを変える方法が分かりません。

import pyautogui as gui
import pyocr
import pyocr.builders
from PIL import Image
from PIL import ImageEnhance

tools = pyocr.get_available_tools()
tool = tools[0]
print(f"tool {tool.get_name()}")

ret = gui.locateCenterOnScreen("url.png", confidence=.8)
gui.moveTo(ret) # urlへのカーソル移動を確認

# スクリーンショットの左上座標を算出
x1 = ret.x + 34
y1 = ret.y - 10
print(f"x1:{x1} y1:{y1}")

# スクリーンショットのサイズを設定
width = 200
height = 20

img = 'url_temp.png'
img2 = 'url_temp2.png'

sc = gui.screenshot(region=(x1, y1, width, height))
sc.save(img)

# 得られた画像のコントラストを1.5倍にして、縦5倍横5.5倍に拡大する
img_open = Image.open(img)
img_con = ImageEnhance.Contrast(img_open)
img_con_enh = img_con.enhance(1.5)
img_con_enh2 = img_con_enh.resize((1100,100))

# 1200*150の同色背景画像に貼り付ける
img_back = Image.open("back.png")
img_back2 = img_back.copy()
img_back2.paste(img_con_enh2,(50,25))
img_back2.save(img2)

# 画像から設定6で文字認識し文字データへ変換
txt = tool.image_to_string(
        Image.open(img2),
        lang="eng",
        builder=pyocr.builders.TextBuilder(tesseract_layout=6))

print(txt)