【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)」をいれるようにしましょう。

参考書籍

関連記事

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

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

記事を読む

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

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

記事を読む

【Pandas】 loc・ilocで1行のみ Series ではなく DataFrame で抽出する方法。

Python の Pandas で DataFrame から loc や iloc を使って行を抽出

記事を読む

【Google Colaboratory】クラウド上でPythonを使って機械学習を行う。

Python をブラウザ上で実行して、手軽に機械学習ができる環境「Google Colaborato

記事を読む

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

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

記事を読む

【matplotlib】 Python で折れ線グラフを描く方法。

今回は、Python の matplotlib というライブラリを使って簡単に折れ線グラフを描く方法

記事を読む

【Python】 Series 型を dict(辞書型)に変換する方法。

Python で Series 型を dict(辞書型)に簡単に変換する方法を紹介します。 「

記事を読む

【Python】プログレスバーを表示させる【tqdm】

Python でスクリプトの実行時間が長くなると、進捗状況が知りたくなったので、標準出力にどのくらい

記事を読む

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

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

記事を読む

【Python】API を使って Amazon の商品情報を収集する方法。

AmazonAPI ライブラリをインストール 以下のコマンドで python-amazon-sim

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑