OpenCVで顔を検出する【Python】

OpenCVで顔を検出する【Python】プログラミング
ゆうすけ
ゆうすけ

いま流行りの顔検出をしたいです。

資格マフィア
資格マフィア

OpenCVを使えば簡単にできるぞ。


✔️ 本記事のテーマ

 OpenCVで顔検出を行う(コード付き)

 

✔️ 読者さんへの前置きメッセージ

本記事は「OpenCVで顔検出をする方法」について書いています。

 

OpenCVライブラリは画像処理に特化したライブラリです。

 

OpenCVライブラリを使えば、
画像中から顔を検出するプログラムを簡単に書くことが出来ます。

 

それでは、顔検出をプログラムで行う方法を解説していきましょう。

 

OpenCVとは?(顔検出)

OpenCVとは?(顔検出)

OpenCV (Open Source Computer Vision Library) は、
画像処理に関する機能をまとめたライブラリです。

 

OpenCVには画像中から人の顔を検出したり、
カラー画像を白黒画像に変換するなど多くの使い道があります。

 

なお、OpenCVライブラリの関数一覧と使い方については
【python】OpenCVの関数一覧と使い方」の記事で解説しています。

 

今では「画像処理」を用いたPythonプログラミングでは
必ずと言っていいほど使用される、メジャーなライブラリです。

 

インストール自体も簡単なので、趣味や個人開発にもオススメです。

 

なお、OpenCVのインストールについては
【python】OpenCVのインストール方法」の記事で解説しています。

 

OSにもよりますが、
3ステップほどでサクッとインストールすることができます。

 

OpenCVで顔を検出する方法

OpenCVで顔を検出する方法

OpenCVを使って、顔検出を行う方法について解説します。

 

この記事では、以下のように顔を検出します。


opencvで顔検出

まず、今回のサンプルコードは以下のようになります。

import cv2


face_cascade_path = '/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'

face_cascade = cv2.CascadeClassifier(face_cascade_path)

src = cv2.imread('/tmp/lena_square.png')
src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(src_gray)

for x, y, w, h in faces:
    cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2)
    
cv2.imwrite('/tmp/lena_after.png', src)

 

順番に、詳しく解説していきましょう。

OpenCVライブラリのインポート

import cv2

 

OpenCVライブラリはPythonの標準ライブラリではありません。

 

プログラムの一番上でインポートすることで、
OpenCVライブラリを使えるようにしておきましょう。

 

なお、プログラムを実行した時にこの箇所でエラーが出る場合は、
そもそもOpenCVライブラリのインストールが上手くできていない可能性があります。

 

OpenCVのインストールについては、
【python】OpenCVのインストール方法」の記事で解説しています。

 

エラーが出る場合は、一度、確認してみましょう。

 

顔検出器の定義

face_cascade_path = 
'/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'

OpenCVで顔検出を行う場合は、検出器を定義する必要があります。

 

検出器とは画像から顔と思われる箇所を予測するために使用するもので、
機械学習でいうモデルに相当するものです。

 

この検出器はMacのHomebrewでOpenCVをインストールした場合は
以下のパスに格納されています。

'/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'

 

このパスに検出器がない場合やWindows OSで処理を行う場合は、
以下のOpenCVのリポジトリからダウンロードすることができるので、
任意のパスに格納してコードの中でそのパスを指定すればOKです。

https://github.com/opencv/opencv/tree/master/data/haarcascades

顔検出器の読み込み

face_cascade = cv2.CascadeClassifier(face_cascade_path)

 

上記で定義した検出器のパスを使って、検出器を読み込みます。

 

OpenCVでは、cv2.CascadeClassifier()関数に
パスを与えてやることで検出器を読み込み、顔検出が可能になります。

OpenCVで画像の読み込み + 前処理

src = cv2.imread('/tmp/lena_square.png')
src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

 

OpenCVで顔検出するためには、対象画像の前処理をする必要があります

 

具体的には、OpenCVで画像を読み込んだ後、画像をグレースケールに変換します。

 

cv2.imreadで画像を読み込み、cv2.cvtColorでグレースケール変換をかけます。

 

なお、OpenCVの画像読み込みについては「OpenCVで画像を読み込む方法」の記事で、グレースケール変換については「OpenCVでグレースケール画像を簡単に作成する」の記事で解説しています。

 

それぞれの処理について、詳しく知りたい方はこちらの記事も参考にして下さい。

OpenCVで顔検出をする

faces = face_cascade.detectMultiScale(src_gray)

for x, y, w, h in faces:
    cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2)

ここまでで、
検出器の定義、画像の読み込み、前処理
が完了したので、顔検出を行います。

 

顔検出には、face_cascade.detectMultiScale()関数を使います。

 

この関数の引数には、先ほどグレースケールに変換した画像を与えます。

 

detectMultiScale()関数の戻り値である `faces` には
「顔と思われる箇所」のx, y座標が格納されています。

 

また、この「顔と思われる箇所」は複数あれば、
その個数だけリストで返すので後ろのfor文でその個数だけ回しています。

 

さらに、for文の中でrectangle関数で枠線を付けます。

 

このようにして、顔検出を行い、顔と思われる箇所に枠線を描画します。

顔検出した画像を保存する

cv2.imwrite('/tmp/lena_after.png', src)

 

ここまで処理してきた画像を保存します。

 

OpenCVで処理した画像はcv2.imwrite()関数で、簡単に保存することが出来ます。

 

cv2.imwrite()関数の引数には、画像を出力するパスを指定します。

 

この関数を通して、画像を保存することで以下のような画像が出力されます。


opencvで顔検出

 

なお、cv2.imwrite()関数については
OpenCVで画像を保存する方法」の記事で解説しています

 

OpenCVやPythonについてもっとスキルをつけるなら

OpenCVやPythonについてもっとスキルをつけるなら

今回はOpenCVを使って顔を検出する方法について解説しました。

 

OpenCVは今回解説した機能以外にも多くの便利な機能があり、
マスターすれば非常に強い武器になるでしょう。

 

OpenCVについてスキルをつけるならUdemyの教材がオススメです。

>> 【Pythonで学ぶ】OpenCVでの画像処理入門

 

Udemyは買い切りの動画学習サービスです。
一度購入してしまえば、その教材はずっと使うことができます。

 

さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。

 

上記の教材はOpenCVの知識がない人でもゼロから実用的なレベルのOpenCVスキルを習得できます。
その教材の質の高さから1000件近い購入数にも関わらず、4以上の評価を維持しています。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。

 

オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。

 

オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。

 

オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。

 

気になった方はぜひチェックしてみて下さい〜!

コメント

タイトルとURLをコピーしました