質問: お世話になってます。 現在大学3年生で最近プログラミングの勉強を始めた者です。 OpenCV3、haarcascade_mcs_nose.xmlを使って鼻検出をしたのですが、検出精度が悪く、精度は40%ほどです。 detectMultiScaleのパラメーターを変える他に、精度の向上を図る手段はないのか、サイトで調べたのですが 鼻検出についての記事が少なくて困っています。 もし、何か別のアプローチの仕方があれば教えてもらいたいです。 どうぞよろしくお願いします。
回答: 鼻は顔の中で隆起している部分で 目や口に比べて色自体の変化は乏しいです つまり目に見える部分は ほとんどが凹凸によって生じる影で 影であるが故に見た目が変化しやすいです したがって 光のあたる方向によって 見かけが大きく変わります また光の方向だけでなく 晴天と曇天 直接照明と間接照明などの 光の拡散の仕方でも変わります 鼻の形状については 遺伝的な人種がしぼられる場合は 似たり寄ったりですが 日本人のように遺伝的に多様な環境で しかも顔の凹凸が緩やかだと 認識はより困難になると思います 鼻よりも目や口の方の認識精度が高いなら 顔に対する目や口の座標や大きさから 鼻の座標や大きさを限定する関数を作成し その範囲に対してのみ認識処理を行う という方法がまず考えられます 分類器を作成する上で 一番手っ取り早い方法としては 下記のようなものが良いと思います 1.鼻を認識できなかった顔部分の画像を切り出し多数保存する 2.検出してほしい鼻部分を手作業で指定し切り出し正解画像とする 3.それ以外の部分を大きさ形状ランダムで切り出し不正解画像とする (この不正解画像に正解画像の一部が含まれないように注意) 4.正解・不正解画像を元に分類器を作成し合わせて使用する データセットを自前で用意する場合は 「光源の方向や種類が特定できるもの」 「多数の人を撮影したもの」を用意し 最終的には手作業で鼻部分を指定していく必要があります