winOCRでポケモンの名前認識してみる

はじめに

ポケモンの認識で、Tesseractやgoogle cloud vision APIを使ってる人は見たことあるのですが、winOCRを使っている人はあまりいなかったのでまとめておきます。

ざっくり比較


Tesseract→認識精度普通、別でインストールが必要。
winOCR→英語、日本語なら別でインストール不要。認識精度普通。
google cloud visionAPI →認識精度神。一定枚数超えると有料に。

コード

import time
from PIL import Image, ImageChops, ImageFont, ImageDraw
import winocr
from winrt.windows.globalization import Language
from winrt.windows.media.ocr import OcrEngine
img = Image.open('buru.jpg')
result=winocr.recognize_pil(img,'ko')
time.sleep(0.5)
print(result.get_results().text)

recognize_pilメソッドで画像を認識して、認識結果をget_resultsメソッドで取得するだけ。案外簡単。
読み込みに多少時間がかかるのとおそらく並列処理になっているのか、多少時を止めないとget_resultsメソッドでバグる。
'ko'のとこを’ja’にすると日本語、'en'にすると英語など決まっている。
なぜか中国語のコードは分からなかったが、韓国語の'ko'で認識できた。

光学認識のインストール

上記にも記載の通り、日本語英語以外はインストールが必要だった。
powershellに以下を入力。(例は韓国語)
言語によって-Nameの後を変える。
Add-WindowsCapability -Online -Name "Language.OCR~~~ko-KR~0.0.1.0"


おそらく、コードでインストールも可能な気がしたが、自分の力ではできなかったので今回はとりあえず保留。

認識結果


認識元
認識結果


認識元
結果

日本語以外は精度高め。日本語は濁点半濁点小文字等は高頻度で認識をミスする。

参考


https://qiita.com/relu/items/94e35a85c9c64f86f738

感想とか

tesseractよりは使いやすいのかなーって感じはあるけど、どうなのかはよくわからない。
ポケモン名認識して、相手の選出だしたりしたいなーと思ったけど、色々大変そうなのでしばらくは保留かなと。

この記事が気に入ったらサポートをしてみませんか?