6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者向け】USBカメラで撮影した動画をリアルタイムで顔検出

Last updated at Posted at 2018-08-10

#はじめに
前回OpenCVを用いて静止画に対して顔検出を行なった.
 ↓↓
【初心者向け】OpenCVで顔検出を行う

それを応用し,今回はUSBカメラから動画を取得してリアルタイムで顔検出を行なってみたいと思います.

#環境

※正面の顔を検出するカスケード分類器は,上記の GitHub からダウンロードしたファイルの
"opencv-master\opencv-master\data\haarcascades"の中に入っている【haarcascade_frontalface_alt.xml】を使います.

#ソースコード

detectFacefromCamera.cpp
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
#include <vector>

using namespace cv;
using namespace std;

int main()
{
    Mat frame; //USBカメラから得た1フレームを格納する場所
    CascadeClassifier cascade; //カスケード分類器格納場所
    cascade.load("ファイルまでのパス/haarcascade_frontalface_alt.xml"); //正面顔情報が入っているカスケード
    vector<Rect> faces; //輪郭情報を格納場所
    
    VideoCapture cap(0); // USBカメラのオープン
    if(!cap.isOpened()) //カメラが起動できなかった時のエラー処理
    {
        return -1;
    }
    
    while(1)//無限ループ
    {
        cap >> frame; //USBカメラが得た動画の1フレームを格納
        cascade.detectMultiScale(frame, faces, 1.1, 3, 0, Size(20, 20)); //格納されたフレームに対してカスケードファイルに基づいて顔を検知
        for(int i = 0; i<faces.size(); i++) //検出した顔の個数"faces.size()"分ループを行う
        {
            rectangle(frame, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(0, 0, 255), 3, CV_AA); //検出した顔を赤色矩形で囲む
        }
        
        imshow("window", frame);//画像を表示.
        
        int key = waitKey(1);
        if(key == 113)//qボタンが押されたとき
        {
            break;//whileループから抜ける(終了)
        }
    }
    destroyAllWindows();
    return 0;
}

#実行結果

顔は検出できていますが,誤検出がちらほらありますね.
他にもOpenCVを用いて色々試してみたいと思います.

6
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?