爱用网站建设,南江县规划和建设局网站,电脑网页尺寸一般是多少,宿迁网页设计培训前面我们介绍了使用dlib进行人脸检测#xff0c;下面我们给出如何使用dlib进行人脸特征点检测。我们直接贴出代码。我们的代码包括如下几部分功能#xff1a;
检测单张图片检测一个视频检测一个camera 先给出代码#xff1a; #include dlib/image_processing/frontal_…前面我们介绍了使用dlib进行人脸检测下面我们给出如何使用dlib进行人脸特征点检测。我们直接贴出代码。我们的代码包括如下几部分功能
检测单张图片检测一个视频检测一个camera 先给出代码 #include dlib/image_processing/frontal_face_detector.h
#include dlib/image_processing/render_face_detections.h
#include dlib/image_processing.h
#include dlib/gui_widgets.h
#include dlib/image_io.h
#include iostream
#include string
#include dlib/opencv.h
#include opencv2/highgui/highgui.hppusing namespace dlib;
using namespace std;// ----------------------------------------------------------------------------------------
void PrintHelp();
int FaceDetectionAndAlignment(const char* inputname);int main(int argc, char** argv)
{try{// This example takes in a shape model file and then a list of images to// process. We will take these filenames in as command line arguments.// Dlib comes with example images in the examples/faces folder so give// those as arguments to this program.if (argc 1){PrintHelp();return 0;}if (strcmp(argv[1],Demo)0){if (2argc){return FaceDetectionAndAlignment();}else if (3argc){return FaceDetectionAndAlignment(argv[2]);}}else{PrintHelp();return 0;}}catch (exception e){cout \nexception thrown! endl;cout e.what() endl;}
}// ----------------------------------------------------------------------------------------
void PrintHelp()
{cout Useage: endl;cout 1. test model via a camera: face_alignment.exe Demo endl;cout 2. test model on a pic: face_alignment.exe Demo xx.jpg endl; cout 3. test model on a video: face_alignment.exe Demo xx.avi endl;cout endl;
}
int FaceDetectionAndAlignment(const char* inputname)
{string inputName;CvCapture* capture 0; cv::Mat frame, frameCopy, image;image_window win;frontal_face_detector detector get_frontal_face_detector();shape_predictor pose_model;deserialize(D:/dlib/model/shape_predictor_68_face_landmarks.dat) pose_model;if (inputname ! NULL){inputName.assign(inputname);}// name is empty or a numberif (inputName.empty()){capture cvCaptureFromCAM(0);if (!capture){cout Capture from camera didnt work endl;return -1;}}// name is not emptyelse if (inputName.size()){if (inputName.find(.jpg) ! string::npos || inputName.find(.png) ! string::npos|| inputName.find(.bmp) ! string::npos){image cv::imread(inputName, 1);if (image.empty()){cout Read Image fail endl;return -1;}}else if (inputName.find(.mp4) ! string::npos || inputName.find(.avi) ! string::npos|| inputName.find(.wmv) ! string::npos){capture cvCaptureFromAVI(inputName.c_str());if (!capture){cout Capture from AVI didnt work endl;return -1;}}}// -- 2. Read the video streamif (capture!nullptr){cout In capture ... endl;// Grab and process frames until the main window is closed by the user.while (!win.is_closed()){// Grab a frameIplImage* iplImg cvQueryFrame(capture);iplImg cvQueryFrame(capture);frame cv::cvarrToMat(iplImg);if (frame.empty())break;if (iplImg-origin IPL_ORIGIN_TL) //frame.copyTo(frameCopy);elsecv::flip(frame, frameCopy, 0);// Turn OpenCVs Mat into something dlib can deal with. Note that this just// wraps the Mat object, it doesnt copy anything. So cimg is only valid as// long as temp is valid. Also dont do anything to temp that would cause it// to reallocate the memory which stores the image as that will make cimg// contain dangling pointers. This basically means you shouldnt modify temp// while using cimg.cv_imagebgr_pixel cimg(frameCopy);// Detect faces std::vectorrectangle faces detector(cimg);// Find the pose of each face.std::vectorfull_object_detection shapes;for (unsigned long i 0; i faces.size(); i)shapes.push_back(pose_model(cimg, faces[i]));// Display it all on the screenwin.clear_overlay();win.set_image(cimg);win.add_overlay(render_face_detections(shapes));if (cv::waitKey(10) 0)goto _cleanup_;}cv::waitKey(0);_cleanup_:cvReleaseCapture(capture);}else{if (!image.empty()){cout In image read endl;cv_imagebgr_pixel cimg(image);// Detect faces std::vectorrectangle faces detector(cimg);// Find the pose of each face.std::vectorfull_object_detection shapes;for (unsigned long i 0; i faces.size(); i)shapes.push_back(pose_model(cimg, faces[i]));// Display it all on the screenwin.clear_overlay();win.set_image(cimg);win.add_overlay(render_face_detections(shapes));cout Hit enter to exit... endl;cin.get();}}return 0;}
再逐一介绍。
检测单张图片
右击项目选择属性调试填写
Demo E:\\datasets\\helen\\testset\\30427236_1.jpg
如下图 实验结果 相当不错的效果了。
检测视频
右击项目选择属性调试填写
Demo E:\\datasets\\vid.wmv 效果视频地址 http://7xtmgn.com1.z0.glb.clouddn.com/dlibvideo.mp4
检测camera
右击项目选择属性调试填写
Demo
效果视频地址 http://7xtmgn.com1.z0.glb.clouddn.com/dlibcamera.mp4
完整源代码dlib face_alignment