如何将人的身体图像作为框架传递到面部检测模型

时间:2019-05-29 13:31:09

标签: c++ opencv detection face-detection openvino

我正在使用openvino检测框架中的人物和面部。我已经能够检测出框架中的人和脸。下面是检测代码:

person_detector.submitFrame(frame, frame_idx);
person_detector.waitAndFetchResults();

face_detector.submitFrame(frame, frame_idx);        
face_detector.waitAndFetchResults();                        

TrackedObjects faceDetection = face_detector.getResults();  
TrackedObjects personDetection = person_detector.getResults();

// Draw Bbox for person detection
for (const auto &detection : personDetection) {
    cv::rectangle(frame, detection.rect, cv::Scalar(255, 0, 0), 2);
}
// Draw Bbox for face detection
for (const auto &face : faceDetection) {
    cv::rectangle(frame, face.rect, cv::Scalar(255, 0, 0), 2);
}

在上面的代码中,我将框架提交到person_detectorface_detector,然后得到显示在框架上的结果。

现在,我需要修改上面的代码,而不是将整个帧传递给人脸检测模型,我只想传递人像帧,以便从人像帧而不是从相机检测到整个人脸。 。为此,我修改了以下更改:

person_detector.submitFrame(frame, frame_idx);
person_detector.waitAndFetchResults();

TrackedObjects personDetection = person_detector.getResults();

// Draw Bbox for person detection
for (const auto &detection : personDetection) {
    cv::rectangle(frame, detection.rect, cv::Scalar(255, 0, 0), 2);

    cv::Mat personImageFrame = frame(detection.rect);
    face_detector.submitFrame(personImageFrame , frame_idx);        
    face_detector.waitAndFetchResults();                        
    TrackedObjects faceDetection = face_detector.getResults();  

    if (faceDetection.size() > 1)
    {
        cv::rectangle(personImageFrame, faceDetection[0].rect, cv::Scalar(255, 0, 0), 2);
    }


}

在上面的代码中,我已经将人脸检测部分移到了用于循环的人检测中。在这里,我得到人检测矩形,并将其转换为帧personImageFrame,然后将其传递到面部检测模型,然后最终显示结果。

但是按照上述方法,它可以检测人,但不能检测人脸。看来我需要先处理personImageFrame,然后再将其传递给面部检测模型,但不确定该怎么做。

总的来说,我的问题是,如果我们能够从帧中检测到人,那么我们如何仅将该人图像作为帧传递给面部检测模型,以便在人图像上而不是实际帧上检测到人脸。请帮忙。谢谢

0 个答案:

没有答案