From 5bea68564fb84871fb4ab5be1263a915817ace93 Mon Sep 17 00:00:00 2001 From: Epicalert Date: Wed, 16 Jun 2021 18:53:00 +0800 Subject: [PATCH] Check if camera feed is blank before using --- src/cv.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/cv.cpp b/src/cv.cpp index ccb7724..adf29b6 100644 --- a/src/cv.cpp +++ b/src/cv.cpp @@ -16,6 +16,19 @@ cv::dnn::Net dnnFaceDetector; cv::VideoCapture vid; cv::Mat frame, gray, small; +bool checkBlankFrame(cv::Mat mat) { + float firstPixel = mat.at(0); + for (int j = 0; j < mat.total(); j++) { + if (mat.at(j) != firstPixel) { + // different pixel found + return false; + } + } + + // all pixels are the same + return true; +} + void initCV() { haarFaceDetector = cv::CascadeClassifier (resolvePath("cvdata/haarcascade_frontalface_alt2.xml")); dnnFaceDetector = cv::dnn::readNetFromCaffe( @@ -31,9 +44,18 @@ void initCV() { vid = cv::VideoCapture (i); if (vid.isOpened()) { std::cout << "Camera " << i << " opened" << std::endl; - break; - } + // check if camera is giving solid colored frames + cv::Mat testFrame; + vid.read(testFrame); + if (checkBlankFrame(testFrame)) { + // reject if giving blank frames + std::cout << "Camera " << i << " feed blank!" << std::endl; + } else { + std::cout << "Using camera " << i << std::endl; + break; + } + } } }