私はコードを開発しました。問題は、リアルタイムに変換するときです。最終的な解決策には進まないのです。コードを最終的な解決策に進展させるために追加する必要があるのは何ですか?私はそれがコードを読んで、30秒間だけフレームごとに結果を与えることを望んで、それは最終的な決定に進むでしょう。誰か助けてもらえますか?コードをリアルタイムで最終決定する方法を教えてください。
int main(int argc,char** argv)
{
VideoCapture capture(0);
Mat frame,resize_blur_Img,fgmaskMOG,binaryImg;
Ptr<BackgroundSubtractor>pMOG;
pMOG = new BackgroundSubtractorMOG();
int frame_count=0;
int detected_face_count = 0;
int detected_motion_count = 0;
CascadeClassifier cascade;
if (!cascade.load("C:/opencv2410/sources/data/haarcascades/haarcascade_frontalface_alt.xml"))
{
cerr << "ERROR: Could not load classifier cascade" << endl;
return -1;
}
Mat element = getStructuringElement(MORPH_RECT, Size(7, 7), Point(3, 3));
while (true)
{
//MOTION DETECTION
if (!(capture.read(frame)))
break;
frame_count++;
resize(frame, resize_blur_Img, Size(frame.size().width, frame.size().height));
pMOG->operator()(resize_blur_Img, fgmaskMOG, -1);
threshold(binaryImg, binaryImg, 128, 255, CV_THRESH_BINARY);
int TotalNumberOfPixels = fgmaskMOG.rows*fgmaskMOG.cols;
//FACE DETECTION
capture >> frame;
if (frame.empty())
break;
imshow("original", frame);
vector<Rect>faces;
cascade.detectMultiScale(frame, faces, 1.1, 4, 0, Size(40, 50));//(const Mat& image, vector <Rect>& objects, double scaleFactor, int minNeighbors,int flags, Size minSize,Size maxSize)
for (int i = 0; i < faces.size(); i++)
{
rectangle(frame, faces[i], Scalar(0, 0, 255));
}
imshow("MOTION DETECTION", fgmaskMOG);
imshow("FACE DETECTION", frame);
char c = waitKey(10);
printf("count of pixels: %d \n", countNonZero(fgmaskMOG));
printf("%d Face Found !\n", faces.size());
if (faces.size()>0 &&countNonZero(fgmaskMOG)>1)
{
detected_face_count++;
detected_motion_count++;
printf("FACE AND MOTION DETECTED !\n\n");
}
else if (faces.size()>0 && countNonZero(fgmaskMOG)==0)
{
detected_face_count++;
printf("ONLY FACE DETECTED !\n\n");
}
else if (faces.size() == 0 && countNonZero(fgmaskMOG) > 1)
{
detected_motion_count++;
printf("ONLY MOTION DETECTED !\n\n");
}
else
{
printf("NOTHING DETECTED !\n\n");
}
//I want it to stop until here after 30 second and show the final decision according to rule below
}
printf("count of frames: %d \n", frame_count);
printf("count of frames has detected face: %d \n", detected_face_count);
printf("count of motion detected: %d \n", detected_motion_count);
printf("Face Found %d percent of frames ! \n", (int)(100 * detected_face_count/frame_count));
printf("Motion Found %d percent of frames ! \n", (int)(100 * detected_motion_count/frame_count));
//FINAL DECISION FROM ALL THE FRAME
if (((float)(detected_face_count/frame_count) > 0.49) && (((float)detected_motion_count/(float)frame_count)>0.19))
{
printf("HUMAN DETECTED FROM BOTH DETECTION ! \n\n");
}
else if (((float)detected_motion_count/(float)frame_count)>0.19)
{
printf("POSSIBLE HUMAN DETECTED FROM MOTION DETECTION ONLY !\n\n");
}
else if ((float)(detected_face_count/frame_count) > 0.49)
{
printf("POSSIBLE HUMAN DETECTED FROM FACE DETECTION ONLY !\n\n");
}
else
{
printf("HUMAN NOT DETECTED \n\n");
}
getch();
}
「リアルタイムにする」とはどういう意味ですか?記録されたビデオの代わりにライブカメラからビデオを取得する?コードの最小限の例を投稿できますか? – sietschie
上記のコードを編集しました。 – CBP