1#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) 2 3#include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur 4#include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar) 5#include <opencv2/videoio/videoio.hpp> 6#include <opencv2/highgui/highgui.hpp> // OpenCV window I/O 7#include <opencv2/features2d/features2d.hpp> 8#include <opencv2/objdetect/objdetect.hpp> 9 10#include <stdio.h> 11#include <string> 12#include <vector> 13 14using namespace std; 15using namespace cv; 16 17const string WindowName = "Face Detection example"; 18 19class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector 20{ 21 public: 22 CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector): 23 IDetector(), 24 Detector(detector) 25 { 26 CV_Assert(detector); 27 } 28 29 void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects) 30 { 31 Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize); 32 } 33 34 virtual ~CascadeDetectorAdapter() 35 {} 36 37 private: 38 CascadeDetectorAdapter(); 39 cv::Ptr<cv::CascadeClassifier> Detector; 40 }; 41 42int main(int , char** ) 43{ 44 namedWindow(WindowName); 45 46 VideoCapture VideoStream(0); 47 48 if (!VideoStream.isOpened()) 49 { 50 printf("Error: Cannot open video stream from camera\n"); 51 return 1; 52 } 53 54 std::string cascadeFrontalfilename = "../../data/lbpcascades/lbpcascade_frontalface.xml"; 55 cv::Ptr<cv::CascadeClassifier> cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename); 56 cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = makePtr<CascadeDetectorAdapter>(cascade); 57 58 cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename); 59 cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = makePtr<CascadeDetectorAdapter>(cascade); 60 61 DetectionBasedTracker::Parameters params; 62 DetectionBasedTracker Detector(MainDetector, TrackingDetector, params); 63 64 if (!Detector.run()) 65 { 66 printf("Error: Detector initialization failed\n"); 67 return 2; 68 } 69 70 Mat ReferenceFrame; 71 Mat GrayFrame; 72 vector<Rect> Faces; 73 74 while(true) 75 { 76 VideoStream >> ReferenceFrame; 77 cvtColor(ReferenceFrame, GrayFrame, COLOR_RGB2GRAY); 78 Detector.process(GrayFrame); 79 Detector.getObjects(Faces); 80 81 for (size_t i = 0; i < Faces.size(); i++) 82 { 83 rectangle(ReferenceFrame, Faces[i], Scalar(0,255,0)); 84 } 85 86 imshow(WindowName, ReferenceFrame); 87 88 if (waitKey(30) >= 0) break; 89 } 90 91 Detector.stop(); 92 93 return 0; 94} 95 96#else 97 98#include <stdio.h> 99int main() 100{ 101 printf("This sample works for UNIX or ANDROID only\n"); 102 return 0; 103} 104 105#endif 106