日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码

發(fā)布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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。

以下是基于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 imageLandmarkDetector::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 = 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;
}
執(zhí)行結果如下圖:


人臉檢測結果如下:


GitHub:https://github.com/fengbingchun/Face_Test

總結

以上是生活随笔為你收集整理的OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。