PRML Hackathon
http://sites.google.com/site/ikomadokushokai/prml/hackathon01
場違いながら行ってきた。なんかみんな学習器の方を作っててえらいなぁと思った。遅れて来ていきなり写真撮影とかしてる感じだった。
僕は以前超適当に書いたトランプ画像認識をベースに、以前は Ruby 部分多かったのをほぼ C++ で SVM 使ってやる感じに大幅改造というか書き直していました。
学習データはこいう綺麗なの13枚: http://shinh.skr.jp/tmp/prml_queen.jpg
評価はこいうので: http://shinh.skr.jp/tmp/prml_before.jpg
実際こうなる(小さく A とか 2 とか書いてある): http://shinh.skr.jp/tmp/prml_after.png
なにかしら 100% にしたいなーと思います。 6 と 9 はこのトランプの場合ほぼ同じなのでほぼ無理、 689 あたりの誤認識はなんとかしたい、って感じです。もうちょいあってる印象あったのですが意外とあってない。スートとかも適当に guess するのですがそのへんは当然なんとかしたい。スートはどうせ色情報もあるだろうし簡単だと思われる。
やったことはほとんど画像処理で特徴量作ってる感じで、
- まずエッジ検出を OpenCV にやらせる
- 4ドットくらいの隙間は許して点の連続を適当に拾ってきて、それがある程度大きければオブジェクトとする
- 回転してみて横幅が一番小さくなるものを選ぶ
- その回転したものに対して、縦横比、中心からの距離でヒストグラム、一定互いに重なっているメッシュを作ってそのヒストグラム、という感じで特徴量抽出
- svm-tools に喰わせる(今回は API 使わず適当に popen で)
という感じ。
ヒストグラムを全体との比率じゃなくて単純なピクセルのカウントで取ってて全然認識しなかったのにはまったのが情けなかった。 svm-scale とかしてみたりもしたけどそれよりちゃんと比率でやった方が良かった。
あとは回転に強くするために中心からの距離だけでやってたのだけど、 A と 4 とかどうしようもなかったので、回転してみて幅が小さくなる…のロジックを入れてみてだいぶよくなった。
689 はちゃんと画像の中の線とかをきちんと判別しないときついかなぁ。