DRYな備忘録

Don't Repeat Yourself.

Pythonで画像をOCRする【pyocr】【Tesseract】【Python2.6.6】【pyenv】【艦これウィジェット】

艦これウィジェットというChromeExtensionを開発(オープンソース)しているのだけど、画像のOCRをする要件が出て来た。今週末PyConだし、最近PythonさわってないのでせっかくだしPythonOCRをやってみようかという記録。

具体的な問題

艦これで遠征リマインダの自動登録はできたけど、入渠のリマインダ自動登録はいっこうにできない。その理由はいくつかあって、

  • Chrome Extension が提供する webRequest モジュールはリクエストの取得はできるがレスポンスの取得ができない
  • 遠征の終了時刻はリクエストに含まれる遠征idから静的に判明させることができる(ハードコーディング)
  • 入渠や建造の時間はリクエストに含まれる情報からは判明させることができない動的な情報

という前提で入渠完了リマインダ自動化をどうにかして実現したい。

ちなみにChrome Extensionで解決するならchrome.proxyというのが非常に良さそうな匂いするけどまだ熟読してない(TODO!)

今回はこれを、画像のOCRでテキスト情報取得というアプローチで検討してみた。

今回立てた方針

  • 入渠を実行する際に艦これクライアントswfがサーバに送っているリクエストをトリガーにして、画面のキャプチャを撮る
  • バックグラウンドのJavaScriptで自前のサーバに画像のPOSTを行う
  • サーバはそれを受け取って画像OCR化を施し、テキストをレスポンスとして送る
  • バックグラウンドのJavaScriptOCRサーバからのレスポンス文字列の適切な場所を抽出して「入渠時間」として扱う

記録

command by command なログを残そうと思ったんですけど、ちょっとしんどかった

まとめ

  • Tesseractをapt-getでインストールします
  • Tesseractを使う、pipで入るPythonOCRモジュールはtesserwrapってのとpyocrってのがありそうだ
  • どっちもPython3系で入らないのでpyenv使って2.6.6まで落とした
  • pyocr使ってると「使用できるlanguageが無ぇよ」と言われ落ち込む
  • pyocrのソースコード読んでデバグすると、Tesseractのソースディレクトリにeng.traineddataというファイルが無い
  • もちろんjpn.traineddataも無い
  • code.googleから落としてくる https://code.google.com/p/tesseract-ocr/downloads/list
  • Tesseractのソースディレクトリに配置してpyocrをengで動かすと動く
  • しかしjpnでは動かない。どうやらunicharsetというファイルも必要のようだ
  • とりあえずengOCRかけてみるぜ!!

これが

f:id:otiai10:20130910211901p:plain

こうだぜ!

f:id:otiai10:20130910211935p:plain










||||||

orz

奇跡的に01:40は綺麗に取れてるな....あとは....ぇー....


追記

pyocrのレポジトリオーナーに「unicharsetってどうやって入手すんのー?」ってgmailでメール送ってみた。そしたら「apt-getで入るよー。当方でテストするから日本語書かれた画像くれー」と言われた。

ええ、こんなのでよければどうぞ。

f:id:otiai10:20130910212457j:plain

いやぁオープンソース楽しいれす







DRYな備忘録として