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

参考書籍

関連記事

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

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

記事を読む

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

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

記事を読む

【Python】Requests ライブラリを使って Web ページを取得してみた。

python の標準ライブラリ urllib を使っても Web ページの取得はできるのですが、Re

記事を読む

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

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

記事を読む

【Python】Beautiful Soup を使ってスクレイピングする方法。

Beautiful Soup は、シンプルでわかりやすい API でデータを抜き出せる Python

記事を読む

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

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

記事を読む

【Pandas】 DataFrame のインデックスを置き換える方法【Python】

今回は、Pandas の DataFrame型で、インデックス(index)を分かりやすいものに置き

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑