画面上で表示される文字の位置が固定されている場合のみ有効なソフトだが、作ってみた。
表示される位置は固定だが、時間やマウスの操作によって表示される文字が変わるため、読んで文字をデータとして手に入れたいと思った。
Python歴1週間程度なので、間違った内容があるかもしれないけど、自分の備忘録として。
OS:Windows10 64bit
どうしても、画像から文字を認識するソフトが欲しくて、いろいろ調べてみた。
そしたら、C言語やC++、C#などのC関係、あとはVisual Basicなどはできるみたいだ。
まぁこれは当然だろう。
ただ、これらは開発にお金がかかりそうである。
無料でも開発できるかもしれないが、調べた範囲だとお金がかかる印象を受けた。
そこで、もうちょっと調べてみたら、最近人工知能などで一躍有名になったPythonという言語でも文字を認識することができ、かつメモ帳だけあれば開発可能ということで1週間挑戦してみた。
ちなみに、Python勉強前に自分が使えた言語はExcelのVBAのみであり、あと自分では書けないがちょっとだけPHPとPerlを読むことができる程度である。
ご参考までに。
最初考えていたのは、どうやらtesseract-OCRというライブラリで文字を読むことができるみたいだ。しかし、フォントが限られていたり、画像の大きさに制約があったりするみたいだ。
識字率を上げるために機械学習という方法もあるらしいが、情報が少なくて難しいので、違う方法を考えてみた。
自分がしたいのは、画像から文字を読むことであり、tesseract-OCRを使うことではないからである。
ではどうしたか。
自分の場合、読みたい文字はそれほど多くなく(数十程度)、かつ表示される位置が決まっている。
そこで、numpyという数字に強い(?)ライブラリが画像を位置と色の配列として読み込み、比較できるというのである。
numpy.array_equal(比較したいもの1, 比較したいもの2) で一致ならTrue、一致しないならFalseとして返してくれる。
そのため、1ドットでも違ったらTrueにならないが、まぁ自分の場合表示される位置は決まっているので問題ないだろう。
使うライブラリは
ImageGrab・・・デスクトップのスクリーンショットを撮る
numpy・・・画像の比較
OpenCV・・・画像の処理
である。
OpenCVでもスクリーンショットが撮れるかもしれないが、よくわからないのでググって簡単そうだったImageGrabを使うことにした。