博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
阅读量:4981 次
发布时间:2019-06-12

本文共 3135 字,大约阅读时间需要 10 分钟。

Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具。它的源代码能够从  下载。OpenFace主要包含面部关键点检測(facial landmard detection)、头部姿势预计(head pose estimation)、面部动作单元识别(facial action unit recognition)、人眼视线方向预计(eye gaze estimation)。
编译Tadas Baltrusaitis的OpenFace须要依赖开源库boost、dlib、TBB、OpenCV。

下面是基于Haar Cascade Classifiers方法的人脸检測的測试代码:

#include "funset.hpp"#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define CONFIG_DIR "E:/GitCode/Face_Test/src/TadasBaltrusaitis_OpenFace/lib/local/LandmarkDetector/"int test_FaceDetect_HaarCascade(){ std::vector
arguments{ "", "-wild", "-fdir", "E:/GitCode/Face_Test/testdata/", "-ofdir", "E:/GitCode/Face_Test/testdata/ret1/", "-oidir", "E:/GitCode/Face_Test/testdata/ret2/" }; std::vector
files, depth_files, output_images, output_landmark_locations, output_pose_locations; std::vector
> 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
> 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_
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 = cv::imread(input_image, 1); if (src.empty()) { fprintf(stderr, "read image error: %s\n", input_image.c_str()); return -1; } cv::resize(src, src, cv::Size(width, height), 0, 0, 4); int x = (i * width) % (width * 4); int y = (i / 4) * height; cv::Mat part = dst(cv::Rect(x, y, width, height)); src.copyTo(part); } std::string output_image = image_path + "/ret2/result.png"; cv::imwrite(output_image, dst); return 0;}
运行结果例如以下图:

人脸检測结果例如以下:

GitHub

转载于:https://www.cnblogs.com/gccbuaa/p/7345609.html

你可能感兴趣的文章
约定Jenkins构建脚本
查看>>
[Go] 函数/方法 的 变参
查看>>
如何 实现PHP多版本的 共存 和 切换?
查看>>
支持python3+django2.0的xadmin
查看>>
Asp.net MVC过滤器的使用
查看>>
canvas基础学习(一)
查看>>
jdango 部署之nginx+uwsgi
查看>>
Sigrity PowerDC是如何计算IR Drop Margin?
查看>>
第八章上课练习
查看>>
[COGS 0011] 运输问题1
查看>>
数据分析
查看>>
angular2.0---服务Service,使用服务进行数据处理
查看>>
angular ng指令
查看>>
转: 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
查看>>
连drawable目录都没搞明白就想开发APP?
查看>>
redis常用命令与使用分析
查看>>
解决CSDN需要登录才能看全文
查看>>
linux下对于ntfs分区的访问
查看>>
比较Perl、PHP、Python、Java和Ruby
查看>>
.Net程序员学用Oracle系列(1):导航目录
查看>>