首页 > 代码库 > OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码
OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码
Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具,它的源码可以从 https://github.com/TadasBaltrusaitis/OpenFace 下载。OpenFace主要包括面部关键点检测(facial landmard detection)、头部姿势估计(head pose estimation)、面部动作单元识别(facial action unit recognition)、人眼视线方向估计(eye gaze estimation)。
编译Tadas Baltrusaitis的OpenFace需要依赖开源库boost、dlib、TBB、OpenCV。
编译Tadas Baltrusaitis的OpenFace需要依赖开源库boost、dlib、TBB、OpenCV。
以下是基于Haar Cascade Classifiers方法的人脸检测的测试代码:
#include "funset.hpp" #include <vector> #include <string> #include <fstream> #include <filesystem.hpp> #include <filesystem/fstream.hpp> #include <dlib/image_processing/frontal_face_detector.h> #include <tbb/tbb.h> #include <opencv2/opencv.hpp> #include <LandmarkCoreIncludes.h> #include <FaceAnalyser.h> #include <GazeEstimation.h> #define CONFIG_DIR "E:/GitCode/Face_Test/src/TadasBaltrusaitis_OpenFace/lib/local/LandmarkDetector/" int test_FaceDetect_HaarCascade() { std::vector<std::string> arguments{ "", "-wild", "-fdir", "E:/GitCode/Face_Test/testdata/", "-ofdir", "E:/GitCode/Face_Test/testdata/ret1/", "-oidir", "E:/GitCode/Face_Test/testdata/ret2/" }; std::vector<std::string> files, depth_files, output_images, output_landmark_locations, output_pose_locations; std::vector<cv::Rect_<double> > bounding_boxes; // Bounding boxes for a face in each image (optional) LandmarkDetector::get_image_input_output_params(files, depth_files, output_landmark_locations, output_pose_locations, output_images, bounding_boxes, arguments); LandmarkDetector::FaceModelParameters det_parameters(arguments); cv::CascadeClassifier classifier(det_parameters.face_detector_location); for (auto file : files) { cv::Mat grayscale_image = cv::imread(file, 0); if (grayscale_image.empty()) { fprintf(stderr, "Could not read the input image: %s\n", file.c_str()); return -1; } int pos = file.find_last_of("\\"); std::string image_name = file.substr(pos + 1); std::vector<cv::Rect_<double> > face_detections; // Detect faces in an image LandmarkDetector::DetectFaces(face_detections, grayscale_image, classifier); std::string image_path = file.substr(0, pos); std::string save_result = image_path + "/ret2/_" + image_name; cv::Mat bgr = cv::imread(file, 1); fprintf(stderr, "%s face count: %d\n", image_name.c_str(), face_detections.size()); for (int i = 0; i < face_detections.size(); ++i) { cv::Rect_<double> rect{ face_detections[i] }; fprintf(stderr, " x: %.2f, y: %.2f, width: %.2f, height: %.2f\n", rect.x, rect.y, rect.width, rect.height); cv::rectangle(bgr, cv::Rect(rect.x, rect.y, rect.width, rect.height), cv::Scalar(0, 255, 0), 2); } cv::imwrite(save_result, bgr); } int width = 200; int height = 200; cv::Mat dst(height * 5, width * 4, CV_8UC3); int pos = files[0].find_last_of("\\"); std::string image_path = files[0].substr(0, pos); for (int i = 0; i < files.size(); i++) { std::string image_name = files[i].substr(pos + 1); std::string input_image = image_path + "/ret2/_" + image_name; cv::Mat src = http://www.mamicode.com/cv::imread(input_image, 1);> 执行结果如下图:
人脸检测结果如下:
GitHub:https://github.com/fengbingchun/Face_TestOpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。