123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) || (defined(_MSC_VER) && _MSC_VER>=1800)
- #include <opencv2/imgproc.hpp> // Gaussian Blur
- #include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
- #include <opencv2/videoio.hpp>
- #include <opencv2/highgui.hpp> // OpenCV window I/O
- #include <opencv2/features2d.hpp>
- #include <opencv2/objdetect.hpp>
- #include <stdio.h>
- using namespace std;
- using namespace cv;
- const string WindowName = "Face Detection example";
- class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector
- {
- public:
- CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector):
- IDetector(),
- Detector(detector)
- {
- CV_Assert(detector);
- }
- void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects) CV_OVERRIDE
- {
- Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize);
- }
- virtual ~CascadeDetectorAdapter() CV_OVERRIDE
- {}
- private:
- CascadeDetectorAdapter();
- cv::Ptr<cv::CascadeClassifier> Detector;
- };
- int main(int , char** )
- {
- namedWindow(WindowName);
- VideoCapture VideoStream(0);
- if (!VideoStream.isOpened())
- {
- printf("Error: Cannot open video stream from camera\n");
- return 1;
- }
- std::string cascadeFrontalfilename = samples::findFile("data/lbpcascades/lbpcascade_frontalface.xml");
- cv::Ptr<cv::CascadeClassifier> cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);
- cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = makePtr<CascadeDetectorAdapter>(cascade);
- if ( cascade->empty() )
- {
- printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str());
- return 2;
- }
- cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);
- cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = makePtr<CascadeDetectorAdapter>(cascade);
- if ( cascade->empty() )
- {
- printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str());
- return 2;
- }
- DetectionBasedTracker::Parameters params;
- DetectionBasedTracker Detector(MainDetector, TrackingDetector, params);
- if (!Detector.run())
- {
- printf("Error: Detector initialization failed\n");
- return 2;
- }
- Mat ReferenceFrame;
- Mat GrayFrame;
- vector<Rect> Faces;
- do
- {
- VideoStream >> ReferenceFrame;
- cvtColor(ReferenceFrame, GrayFrame, COLOR_BGR2GRAY);
- Detector.process(GrayFrame);
- Detector.getObjects(Faces);
- for (size_t i = 0; i < Faces.size(); i++)
- {
- rectangle(ReferenceFrame, Faces[i], Scalar(0,255,0));
- }
- imshow(WindowName, ReferenceFrame);
- } while (waitKey(30) < 0);
- Detector.stop();
- return 0;
- }
- #else
- #include <stdio.h>
- int main()
- {
- printf("This sample works for UNIX or ANDROID or Visual Studio 2013+ only\n");
- return 0;
- }
- #endif
|