艦これウィジェットというChromeExtensionを開発(オープンソース)しているのだけど、画像のOCRをする要件が出て来た。今週末PyConだし、最近PythonさわってないのでせっかくだしPythonでOCRをやってみようかという記録。
具体的な問題
艦これで遠征リマインダの自動登録はできたけど、入渠のリマインダ自動登録はいっこうにできない。その理由はいくつかあって、
- Chrome Extension が提供する webRequest モジュールはリクエストの取得はできるがレスポンスの取得ができない
- 遠征の終了時刻はリクエストに含まれる遠征idから静的に判明させることができる(ハードコーディング)
- 入渠や建造の時間はリクエストに含まれる情報からは判明させることができない動的な情報
という前提で入渠完了リマインダ自動化をどうにかして実現したい。
ちなみにChrome Extensionで解決するならchrome.proxy
というのが非常に良さそうな匂いするけどまだ熟読してない(TODO!)
今回はこれを、画像のOCRでテキスト情報取得というアプローチで検討してみた。
今回立てた方針
- 入渠を実行する際に艦これクライアントswfがサーバに送っているリクエストをトリガーにして、画面のキャプチャを撮る
- バックグラウンドのJavaScriptで自前のサーバに画像のPOSTを行う
- サーバはそれを受け取って画像OCR化を施し、テキストをレスポンスとして送る
- バックグラウンドのJavaScriptでOCRサーバからのレスポンス文字列の適切な場所を抽出して「入渠時間」として扱う
記録
command by command なログを残そうと思ったんですけど、ちょっとしんどかった
まとめ
- Tesseractをapt-getでインストールします
- Tesseractを使う、pipで入るPythonのOCRモジュールは
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
というファイルも必要のようだ - とりあえず
eng
でOCRかけてみるぜ!!
これが
こうだぜ!
||||||
orz
奇跡的に01:40は綺麗に取れてるな....あとは....ぇー....
追記
pyocrのレポジトリオーナーに「unicharsetってどうやって入手すんのー?」ってgmailでメール送ってみた。そしたら「apt-getで入るよー。当方でテストするから日本語書かれた画像くれー」と言われた。
ええ、こんなのでよければどうぞ。
いやぁオープンソース楽しいれす
DRYな備忘録として