本記事ではpythonでの画像処理を紹介します。OpenCVライブラリを使った画像内の顔検出処理について、ソースコード付きで解説します。出力としては上のような画像が得られます。画像処理における顔検出は王道ですので、OpenCVの勉強を始めた方は是非本記事を参考にして、次へのステップアップに活かしてください。以下、実験環境の準備、顔検出のソースコード、簡単な解説を示します。OpenCVとは以前の記事にも書いたのですが、画像処理のライブラリです。世界で一番有名なのではないでしょうか。私はいろいろな国で画像処理関係の仕事をしたり、国際会議に出てきましたが、利用率はかなり高いです。いうのも、かなり多くの、そして高度な画像処理がライブラリ内に揃っているからです。ノイズ除去、特徴抽出から、機械学習ベースの認識処理、そしてディープラーニングまで、コンピュータヴィジョン全般を網羅しています。近年、pythonでも使えるようになり、簡単にライブラリを利用することができるようになりました(以前は設定が結構面倒だった)。実験環境の準備(OpenCVのインストール)これは本ブログの前回の記事を参考にしていただけたらと思います。以下のリンクからOpenCVのインストール手順を見ることができます。以下、OpenCVを用いた顔検出処理のソースコードを示します。アルゴリズムとしてはHaar-like特徴量をカスケード型分類器に入力して画像内の各領域を「顔/顔以外」で分類するというようなことをしています。本記事では詳しくは説明しませんが、興味のある方はググればたくさん論文や解説ページが出てきます。image)各処理はソースコード内のコメントを見ていただければわかると思います。"cascade_path"、これはOpenCVをインストールすると一緒にダウンロードされる「学習済みの識別器」が記述されたxmlファイルを指定しています。ファイルが保存されている場所は環境によって違うのですが、私はAnacondaで"OpenCV"という仮想環境を作成し、そこにOpenCVをインストールしたので、ソースコードに書いてある場所に保存されています(hogehogeはユーザ名です)。xmlファイルを違う場所に移動して、そこを指定してもいいです。幾つかパラメータがあると思います。検出する顔の大きさの最小サイズ(ピクセルサイズなので解像度によって調整しましょう)です。最初の画像にも示しましたが、こんな感じです。"thickness"を「-1」に設定していますが、これによって、検出した顔を含む四角は塗りつぶされます。このパラメータを、例えば3などに設定すると、太さが3ピクセルの四角(内側はオリジナル画像のまま)になります。本記事ではプライバシー保護のため、塗りつぶしました。水色の丸で囲んだところは誤検出です。パラメータによってはこういうこともあります。おけるminSizeの値を大きくしてあげれば、この画像の中の誤検出は消せるでしょう。他の画像に適用した場合、小さく写った顔は検出されなくなります。その他の物体の検出それからxmlファイルについてもう一つ、今回用いた"haarcascade_frontalface_alt.xml"は人間の顔(正面)を検出する識別器です。これを他のファイルに置き換えれば、例えば猫の顔や眼鏡の検出なども行えます。以下のようなものがあります。眼鏡検出その他にもいろいろあるので試してみましょう。まとめとにかく豊富で高度な処理が簡単に使えるOpenCV、是非使ってみてください。書籍もたくさん出ています。最近はpython+OpenCVの本も出ているようです。単行本(ソフトカバー)この商品を含むブログを見るまた、C++になってしまいますが、OpenCVについて詳細に解説されている本がこちら。Studioでの設定が書かれています。見る興味のある方は是非上の書籍も参照してみてください。それにしても、こんなに簡単に実装できるなんて、長年画像処理の研究をしていた私は涙目です。今後も本ブログで実装例を示していくので(画像処理や機械学習、ディープラーニング系が多いと思います)、良かったらまた見に来てください。(2)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。