【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 と Series のデータ構造について【Python】

今回は、Python でデータ分析を行っていると必ず使う Pandas の DataFrame と

記事を読む

【Pandas】 DataFrame のある列の最大値を含む行のインデックス値を取得する方法。

今回は、Pandas の DataFrame において、ある列で最大値を求めて、その最大値をもつ行に

記事を読む

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

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

記事を読む

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

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

記事を読む

python 2.7 を Windows 64bit OS にインストールした。

python 2.7 を Windows にインストールしたときのメモです。 Python に

記事を読む

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

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

記事を読む

【Python】漢字を分解するライブラリを使ってみた【部首分解】

Python で漢字を部首やさらに細かい部分に分解してくれるライブラリがあったので使ってみました。

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

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

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

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

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

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

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

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

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

→もっと見る

PAGE TOP ↑