我正在使用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_detector
和face_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
,然后再将其传递给面部检测模型,但不确定该怎么做。
总的来说,我的问题是,如果我们能够从帧中检测到人,那么我们如何仅将该人图像作为帧传递给面部检测模型,以便在人图像上而不是实际帧上检测到人脸。请帮忙。谢谢