Path: blob/master/FaceDetectionComparison/face_detection_dlib_hog.cpp
3118 views
#include <iostream>1#include <string>2#include <vector>3#include <stdlib.h>4#include <opencv2/core.hpp>5#include <opencv2/imgproc.hpp>6#include <opencv2/highgui.hpp>78#include <dlib/opencv.h>9#include <dlib/image_processing.h>10#include <dlib/image_processing/frontal_face_detector.h>1112using namespace cv;13using namespace std;14using namespace dlib;1516void detectFaceDlibHog(frontal_face_detector hogFaceDetector, Mat &frameDlibHog, int inHeight=300, int inWidth=0)17{1819int frameHeight = frameDlibHog.rows;20int frameWidth = frameDlibHog.cols;21if (!inWidth)22inWidth = (int)((frameWidth / (float)frameHeight) * inHeight);2324float scaleHeight = frameHeight / (float)inHeight;25float scaleWidth = frameWidth / (float)inWidth;2627Mat frameDlibHogSmall;28resize(frameDlibHog, frameDlibHogSmall, Size(inWidth, inHeight));2930// Convert OpenCV image format to Dlib's image format31cv_image<bgr_pixel> dlibIm(frameDlibHogSmall);3233// Detect faces in the image34std::vector<dlib::rectangle> faceRects = hogFaceDetector(dlibIm);3536for ( size_t i = 0; i < faceRects.size(); i++ )37{38int x1 = (int)(faceRects[i].left() * scaleWidth);39int y1 = (int)(faceRects[i].top() * scaleHeight);40int x2 = (int)(faceRects[i].right() * scaleWidth);41int y2 = (int)(faceRects[i].bottom() * scaleHeight);42cv::rectangle(frameDlibHog, Point(x1, y1), Point(x2, y2), Scalar(0,255,0), (int)(frameHeight/150.0), 4);43}44}454647int main( int argc, const char** argv )48{49frontal_face_detector hogFaceDetector = get_frontal_face_detector();5051VideoCapture source;52if (argc == 1)53source.open(0, CAP_V4L);54else55source.open(argv[1]);5657Mat frame;5859double tt_dlibHog = 0;60double fpsDlibHog = 0;6162while (true)63{64source >> frame;65if (frame.empty())66break;6768double t = cv::getTickCount();69detectFaceDlibHog(hogFaceDetector, frame);70tt_dlibHog = ((double)cv::getTickCount() - t)/cv::getTickFrequency();71fpsDlibHog = 1/tt_dlibHog;7273putText(frame, format("DLIB HoG; FPS = %.2f",fpsDlibHog), Point(10, 50), FONT_HERSHEY_SIMPLEX, 1.3, Scalar(0, 0, 255), 4);74imshow("DLIB - HoG Face Detection", frame);7576int k = waitKey(5);77if(k == 27)78{79destroyAllWindows();80break;81}82}83}848586