【OpenCV】画像の顔部分を検出する方法【Python】

OpenCV を使って、Python で画像から顔部分の検出を行ったときのメモです。

Anaconda で OpenCV をインストールしてあります。

Contents

カスケード分類器

OpenCV では、カスケード分類器というものが用意されています。

カスケード分類器は、複数の識別器を組み合わせた分類器のことです。

その中でも、Haar-like特徴を使った識別器が OpenCV では使われています。

Haar-like特徴とは、画像の明暗差により特徴をとらえたものになります。

OpenCV をインストールすると、以下の場所に、17種類のカスケード分類器が格納されます。

私の環境では「C:\Users\XXXX\anaconda3\Lib\site-packages\cv2\data」の中に、以下のような「xml」ファイルがありました。

※格納されるフォルダは環境によって若干異なるかと思われます。

画像データの準備

画像データは、有名な「Lenna」を使います。

以下の URL から、tif 画像「lena_std.tif」をダウンロードします。

www.lenna.org

顔部分の検出

顔部分の検出は、カスケード分類器の中の「haarcascade_frontalface_default.xml」ファイルを使います。

四角の枠は、cv2.rectangle()メソッドで描画することができます。

以下のようなコードで、顔部分を矩形で囲んだ jpg 画像を保存し、さらに、別ウィンドウで表示させることができます。

「face_cascade.detectMultiScale(img)」部分では、以下のような [x値, y値, 幅, 高さ]のリストが返ってきます。

「!empty() in function」エラーの対処方法

1つ目の注意点としては、「haarcascade_frontalface_default.xml」ファイルをソースコードと同じディレクトリにコピーしていれました。

ファイルパスが間違っていると、以下のような「!empty() in function」エラーがでてしまいます。

error: OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

「imshow」で「応答なし」の対処方法

2つ目の注意点は、「cv2.imshow(‘face01’, img)」だけで終わってしまうと、別ウィンドウが「応答なし」となり、フリーズしてしまいます。

そのため、必ず「waitKey(0)」をいれるようにしましょう。

参考書籍

関連記事

【Python】pip3 で「cannot import name ‘main’」エラーが出たときの対処法。

Python でライブラリをインストールする際に、pipを使います。 Python2 と Py

記事を読む

【Python】Windows で ライブラリ(NumPy) をインストールする方法。

Windows の Python(2.X系)で NumPy をインストールしようと思ったら、そもそも

記事を読む

【Spyder】引数のあるスクリプトを実行する方法。

Python の統合開発環境(IDE)である Spyder では、簡単にスクリプトを実行できます。

記事を読む

【Linux】 ローカルに Python をインストールする方法。

今回は、Linux サーバに、root 権限なしで、ローカルに Python をインストールした方法

記事を読む

【Pandas】 DataFrame の行を抽出する方法【Python】

今回は、Python の Pandas で、DataFrame 型の行を抽出する方法を紹介します。

記事を読む

【Pandas】 DetaFrame の列ごとに演算する方法【Python】

今回は、DetaFrame の列ごとに平均や加算・減算なのど演算をし、結果を DetaFrame 型

記事を読む

【Anaconda】Prompt 上で Git コマンドを実行する方法。

Anaconda のコマンドプロンプト(Anaconda Prompt)上で、Git Hub からダ

記事を読む

【Python】API を使って YouTube から動画情報を収集する方法。

API を使って YouTube から動画情報を収集してみたときのメモです。 OS は Lin

記事を読む

【matplotlib】 Python でヒストグラムの横軸と棒(ビン)の数を調整する方法。

Python の matplotlib を使ってヒストグラムを描画し、横軸の目盛りと棒(ビン)がそろ

記事を読む

【Python】 複数の辞書型の同じ key を持つ value を計算に用いる方法。

Python で、複数の辞書型を読み込んで、同じキー(key)を持つ数値(value)を計算に使う方

記事を読む

無料動画編集ソフト AviUtl で mp4 形式の動画を読み込み・出力する方法【Windows】

今回は、無料動画編集ソフト AviUtl で mp4 形式の動画を読み

【Cubase】イヤホンから音がでないときの対処方法。

Cubase でイヤホンから音がでなくなったときの対処方法のメモです。

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

→もっと見る

PAGE TOP ↑