- 必要なコンポーネント
- RaspberryPiへのOpenCVのインストール
- dlibを使用して顔の部分を検出する方法
- 顔のランドマーク検出のためのRaspberryPiのプログラミング
- 顔パーツ認識機能のテスト
顔のランドマークの検出は、眉、目、鼻、口、顎など、顔のさまざまな部分を検出するプロセスです。顔のランドマーク検出技術を使用する多くのアプリケーションがあります。
以前はOpenCVを使用して顔認識システムを構築していましたが、今日は同じOpenCVとRaspberryPiを使用して顔のランドマークを検出します。dlibライブラリから事前にトレーニングされた顔のランドマーク検出モジュールを使用して顔の主要な顔の構造の位置を検出し、PythonOpenCVを使用して検出された顔の部分を視覚化します。
必要なコンポーネント
ハードウェアコンポーネント
- ラズベリーパイ3
- Piカメラモジュール
ソフトウェアおよびオンラインサービス
- OpenCV
- Dlib
- Python3
このRaspberryPi 3顔のランドマーク検出に進む前に 、まず、OpenCV、imutils、dlib、Numpy、およびその他の依存関係をこのプロジェクトにインストールする必要があります。ここでは、OpenCVをデジタル画像処理に使用しています。デジタル画像処理の最も一般的なアプリケーションは、オブジェクト検出、顔認識、および人のカウンターです。
PiカメラをRaspberryPiとインターフェースする方法の詳細については、以前のチュートリアルに従ってください。
RaspberryPiへのOpenCVのインストール
ここでは、OpenCVライブラリがRaspberry PiQRスキャナーに使用されます。OpenCVをインストールするには、まずRaspberryPiを更新します。
sudo apt-get update
次に、RaspberryPiにOpenCVをインストールするために必要な依存関係をインストールします。
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get install libqt4-test –y
その後、以下のコマンドを使用してRaspberryPiにOpenCVをインストールします。
pip3 install opencv-contrib-python == 4.1.0.25
以前はRaspberrypiでOpenCVを使用し、多くのチュートリアルを作成しました。
- CMakeを使用してRaspberryPiにOpenCVをインストールする
- RaspberryPiとOpenCVによるリアルタイムの顔認識
- RaspberryPiとOpenCVを使用したナンバープレート認識
- OpenCVとRaspberryPiを使用した群集サイズの推定
また、初心者レベルから始まる一連のOpenCVチュートリアルを作成しました。
imutilsの インストール : imutilsは、OpenCVを使用して、変換、回転、サイズ変更、スケルトン化、Matplotlib画像の表示などのいくつかの必要な画像処理機能を実行するために使用されます。したがって、以下のコマンドを使用して imutils をインストールします。
pip3 install imutils
dlibのインストール: dlib は、実際の問題に対応する機械学習アルゴリズムとツールを含む最新のツールキットです。以下のコマンドを使用して、dlibをインストールします。
pip3 install dlib
NumPyの インストール: NumPy は、強力なn次元配列オブジェクトを含む科学計算用のコアライブラリであり、C、C ++などを統合するためのツールを提供します。
Pip3インストールnumpy
dlibを使用して顔の部分を検出する方法
dlibライブラリの事前にトレーニングされた顔のランドマーク検出器を使用して、顔の顔の構造にマッピングされる68(x、y)座標の位置を検出します。dlibの顔のランドマーク予測子は、iBUG300-Wデータセットでトレーニングされています。68座標のインデックスを含む画像を以下に示します。
顔のランドマーク検出のためのRaspberryPiのプログラミング
dlibの事前トレーニング済みの顔のランドマーク検出器を使用した顔パーツ認識用の完全なPythonコードは、ページの最後にあります。ここでは、理解を深めるためにコードのいくつかの重要な部分について説明します。
したがって、いつものように、必要なすべてのライブラリを含めることからコードを開始します。
from imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
次に、カメラオブジェクトを初期化し、解像度を(640、480)に設定し、フレームレートを30fpsに設定します。
カメラ= PiCamera()camera.resolution =(640、480)camera.framerate = 30
次の行では、引数パーサーを使用して、顔のランドマーク予測子へのパスを提供します。
ap = argparse.ArgumentParser()ap.add_argument( "-p"、 "--shape-predictor"、required = True、help = "顔のランドマーク予測パス")args = vars(ap.parse_args())
次の行では、HOGベースのdlibの事前トレーニング済みの顔検出器を初期化し、事前トレーニング済みの顔のランドマーク予測子をロードします。
検出器= dlib.get_frontal_face_detector()予測子= dlib.shape_predictor(args)
次に、capture_continuous関数を使用して、RaspberryPiカメラからのフレームのキャプチャを開始します。
camera.capture_continuous(rawCapture、format = "bgr"、use_video_port = True)のフレームの場合:image = frame.array cv2.imshow( "Frame"、image)key = cv2.waitKey(1)&0xFF rawCapture.truncate(0 )
キーボードキー「S」を使用して、特定のフレームをキャプチャします。次に、キャプチャした画像のサイズを変更し、グレースケールに変換します。
if key == ord( "s"):image = imutils.resize(image、width = 400)gray = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY)
dlibライブラリの検出機能を使用して、キャプチャされた画像の顔を検出します。
rects = detector(gray、1)
顔検出が実行された写真を撮り、顔のランドマークを決定し、68ポイントをNumPy配列に変換します。各顔領域を個別にループします。
enumerate(rects)の(i、rect)の場合:shape = Predictor(gray、rect)shape = face_utils.shape_to_np(shape)
次に、元の画像のコピーを取り、 それを ループに使用 し て、画像に顔の部分の名前を描画します。テキストの色は赤になります。RGB値を変更することで別の色に変更できます。
for(name、(i、j))in face_utils.FACIAL_LANDMARKS_IDXS.items():clone = image.copy()cv2.putText(clone、name、(10、30)、cv2.FONT_HERSHEY_SIMPLEX、0.7、(0、0 、255)、2)
次に、検出された顔パーツをループし、 OpenCV 描画機能を使用してこれらの顔パーツに円を描画します。描画機能の詳細については、このOpenCVドキュメントを参照してください。
形状の(x、y)の場合:cv2.circle(clone、(x、y)、1、(0、0、255)、-1)
次の行では、特定の顔パーツの座標のバウンディングボックスを計算することにより、各顔パーツを個別の画像として抽出します。抽出された画像は250ピクセルにサイズ変更されます。
(x、y、w、h)= cv2.boundingRect(np.array(]))roi =画像roi = imutils.resize(roi、width = 250、inter = cv2.INTER_CUBIC)
コードの最後の行に、顔のパーツとその名前、およびそのパーツの別の画像を表示します。ESCキーを使用して、顔の領域を変更します。
cv2.imshow( "ROI"、roi)cv2.imshow( "Image"、clone)cv2.waitKey(0)
顔パーツ認識機能のテスト
プロジェクトをテストするには、ディレクトリを作成し、以下のコマンドを使用してそのディレクトリに移動します。
mkdir face-part-detector cd face-part-detector
今、このリンクからshape_predictor_68_face_landmarks.datファイルをダウンロードし、解凍してコピーshape_predictor_68_face_landmarks.datこのライブラリ内のファイルをして、という名前の新しいファイルを開きdetect.pyをし、下記のコードを貼り付けます。
次に、以下のコマンドを使用してPythonコードを起動します。
python3detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
カメラからのライブビューを示すウィンドウが表示されます。次に、「S」キーを押して、ライブストリームからフレームを選択します。口の部分に赤い点が表示されます。ESCキーを使用して、他の顔の部分を確認します。
完全なPythonコードとデモビデオを以下に示します。