我が家の写真は子供の写真が大半で、それに
妻が撮っている弁当の写真、風景などが混じります。
弁当が明らかに異質なので別フォルダに分けたい
のですが、そういう整理をずっとサボってきたので、
まじめにやるなら8000枚ほどある写真から手動で
分けないといけません。
いい機会なので(?)前からやってみたかった機械学習をちょっと調べました。OpenCVの顔認識はサポートベクターマシーン(libsvm)らしいので、今回はOpenCVではなくlibsvmを直接使いました。pythonなど各言語のインターフェイスが充実していて相当敷居は低いです。
機械学習で重要なのは特徴量をどう選ぶかですが、妻が撮影時にレイアウトを
決めて撮っており、だいたい上半分にご飯があるので、
上・下半分のRGBごとのヒストグラムを特徴量に選びました。要は上半分に白っぽいのが大量にあって下半分には無い、という画像を探して来いと。このあたりの作業はPILでわりと簡単にできます。
検出結果を学習用データに入れて再学習、という手続きを何回か繰り返すうちに、300枚ぐらいが抽出できました。
ターゲットに相当特徴があったとはいえ、ヒストグラムだけで
ここまで使えるとは思ってませんでした。スパムフィルタ
なんかもそうですが、手作業が楽になるだけでもずいぶん価値があるものです。あと、学習器を成長させるのは何気に楽しいですよね。
コードはこちら。
それぐらいの量なら、プログラム組んでる間に手動でやるほうが早いじゃん!とか、弁当なんだから撮影時刻で見れば一発じゃん!とかいうツッコミはなしで。テクノロジーは無駄に使ってナンボですよ。
最後に、いつも弁当ありがとう>妻。
大学(院)から最初の会社でもパターン認識やってたのでSVMは知ってます。今回の勝因はlibsvmなんてのがあったってのと、比較的特徴量が明瞭だった事につきるのではないでしょうか。それにしても便利な世の中よのぉ〜。
どもー。いやはやまったくそのとおり。中身分からなくても動かせるってのはイイですよね。