顔認証サンプルスケッチ Face detectionの仕組み

顔認証サンプルスケッチ Face detectionの仕組みをまとめてみる

サンプルスケッチ 

どこに書いてあるかわかりやすくするため
まずは全文表示する

カスタムファイルの設定

☆SDカードにあるlbpcascade_frontalface.xml
 カスタムファイルの取り込みをする
 24行目
 #define FACE_DETECTOR_MODEL “/storage/lbpcascade_frontalface.xml”
 で行う

☆ 物体検出のためのカスケード分類器クラスを宣言
 29行目
 static CascadeClassifier detector_classifier;

☆カスケードファイルの読み込み
  ※24行目で宣言したFACE_DETECTOR_MODEL

 42行目
  // Load the cascade classifier file
  detector_classifier.load(FACE_DETECTOR_MODEL); 

顔検出

☆グレースケールに変換
 ※顔認識に用いるデータはグレースケールの為
 56行目
 cvtColor(img_raw, src, COLOR_YUV2GRAY_YUYV); //covert from YUV to GRAY

☆フレーム内の顔を検出
 58行目
// Detect a face in the frame
  Rect face_roi;

☆検出した顔をrect_facesに入れる
 64行目
  // Perform detected the biggest face
std::vector rect_faces;
detector_classifier.detectMultiScale(src, rect_faces,
                       DETECTOR_SCALE_FACTOR,
                       DETECTOR_MIN_NEIGHBOR,
                       CASCADE_FIND_BIGGEST_OBJECT,
                      Size(DETECTOR_MIN_SIZE, DETECTOR_MIN_SIZE));

☆一番大きいい顔を検出
 72行目
if (rect_faces.size() > 0) {

// A face is detected
face_roi = rect_faces[0];

☆顔検出した時の処理
 緑LEDを光らせて座標値をシリアルプリント表示。
 83行目
if (face_roi.width > 0 && face_roi.height > 0) { // A face is detected
digitalWrite(PIN_LED_GREEN, HIGH);
printf(“Detected a face X:%d Y:%d W:%d H:%d\n”,face_roi.x, face_roi.y, face_roi.width, face_roi.height);
digitalWrite(PIN_LED_GREEN, LOW);

☆カラーにもどす
 91行目
 cvtColor(img_raw, dst, COLOR_YUV2BGR_YUYV); //covert from YUV to BGR

☆検出した顔に枠を描画する
 94行目
rectangle(dst, Point(face_roi.x, face_roi.y), Point(face_roi.x + face_roi.width, face_roi.y + face_roi.height), red, 2);

クラス

 通常、cv::Matと記述しクラスを宣言しますが
 18行目
 using namespace cv;
 が記述されてるので Matだけで可能です。

 参考資料:OpenCV-CookBook 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です