【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】機械学習のために SciPy・Matplotlib・scikit-learn をインストール。

Python で機械学習を行うために、Windows OS の python 2 系にライブラリ「S

記事を読む

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

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

記事を読む

【OpenCV】検出した顔画像部分を切り出す方法【Python】

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

記事を読む

【Atom エディタ】Python で Matplotlib のグラフを Atom 上に表示させる方法。

Atom エディタで Python の Matplotlib ライブラリを使って、Atom 上にグラ

記事を読む

【Atomエディタ】Python 開発用にインストールしてみた。

Python でプログラミングするときの エディタ を探していたのですが、とりあえず Atom とい

記事を読む

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

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

記事を読む

【Pandas】 DataFrame と Series のデータ構造について【Python】

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑