0

カメラからの各フレームをビデオに書き込もうとしています。ここまでは大丈夫です。ただし、ビデオに各フレームに shape_predictor も含めたいので、再生すると画像にも表示されます。これまでのところ、私はこれを持っています...何かアイデアはありますか? ありがとうございました

cap >> frame;
cv::VideoWriter oVideoWriter;
// . . .
cv_image<bgr_pixel> cimg(frame);               //Mat to something dlib can deal with
frontal_face_detector detector = get_frontal_face_detector();
std::vector<rectangle> faces = detector(cimg);
pose_model(cimg, faces[0]);
oVideoWriter.write(dlib::toMat(cimg));          //Turn it into an Opencv Mat
4

1 に答える 1

3

形状予測子は顔検出器ではありません。最初に顔検出器を呼び出し、次に形状予測子を呼び出す必要があります。

このサンプル プログラムを参照してください: http://dlib.net/face_landmark_detection_ex.cpp.html

顔検出器を適切に初期化した..次に、トラッカーを初期化する必要があります。このようなもの:

shape_predictor sp;
deserialize("shape_predictor_68_face_landmarks.dat") >> sp;

モデルはここにあります: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2

あとは、上でリンクしたサンプル プログラムに従うだけです。これがトラッカーが実行される部分です。検出器が機能するためには、出力 (バウンディング ボックス) をトラッカーに渡す必要があります。以下のコードは、検出器によって返されたすべてのボックスを反復処理します。

        // Now tell the face detector to give us a list of bounding boxes
        // around all the faces in the image.
        std::vector<rectangle> dets = detector(img);
        cout << "Number of faces detected: " << dets.size() << endl;

        // Now we will go ask the shape_predictor to tell us the pose of
        // each face we detected.
        std::vector<full_object_detection> shapes;
        for (unsigned long j = 0; j < dets.size(); ++j)
        {
            full_object_detection shape = sp(img, dets[j]);
            cout << "number of parts: "<< shape.num_parts() << endl;
            cout << "pixel position of first part:  " << shape.part(0) << endl;
            cout << "pixel position of second part: " << shape.part(1) << endl;
            // You get the idea, you can get all the face part locations if
            // you want them.  Here we just store them in shapes so we can
            // put them on the screen.
            shapes.push_back(shape);
        }
于 2015-04-17T18:04:55.770 に答える