dlib c++ 人脸识别 详细例子
时间: 2023-08-11 18:11:45 浏览: 123
一个使用 dlib 进行人脸识别的例子
以下是一个使用dlib C++库进行人脸识别的简单例子。该例子使用了dlib的人脸检测器和人脸特征提取器。需要注意的是,这个例子只是一个简单的演示,实际应用中还需要根据具体需求进行优化和改进。
```c++
#include <iostream>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
using namespace dlib;
using namespace std;
int main()
{
try
{
// 读入图像
array2d<unsigned char> img;
load_image(img, "test.jpg");
// 创建人脸检测器
frontal_face_detector detector = get_frontal_face_detector();
// 使用检测器检测人脸
std::vector<rectangle> dets = detector(img);
// 创建人脸特征提取器
shape_predictor sp;
deserialize("shape_predictor_68_face_landmarks.dat") >> sp;
// 显示检测结果
image_window win;
win.set_image(img);
win.add_overlay(dets, rgb_pixel(255,0,0));
// 遍历检测到的人脸,提取人脸特征并显示
for (unsigned long j = 0; j < dets.size(); ++j)
{
full_object_detection shape = sp(img, dets[j]);
cout << "number of parts: "<< shape.num_parts() << endl;
cout << "pixel position of first part: " << shape.part(0) << endl;
cout << "pixel position of second part: " << shape.part(1) << endl;
win.add_overlay(render_face_detections(shape));
}
// 等待用户退出
cout << "Press enter to exit." << endl;
cin.get();
}
catch (exception& e)
{
cout << "\nexception thrown!" << endl;
cout << e.what() << endl;
}
}
```
运行该程序需要先准备好 `test.jpg` 图像和 `shape_predictor_68_face_landmarks.dat` 模型文件,模型文件可以在dlib官网下载。该程序的实现流程如下:
1. 读入图像。
2. 使用dlib的人脸检测器检测图像中的人脸。
3. 使用dlib的人脸特征提取器提取人脸特征。
4. 显示人脸检测结果和提取的人脸特征。
在程序运行时,会在窗口中显示原始图像和检测结果,并在检测到的人脸上显示人脸特征点。用户可以通过按下回车键退出程序。
需要注意的是,该程序只是一个简单的示例,实际应用中还需要进行优化和改进。比如,如果需要处理多个图像,则需要将图像处理流程封装成函数或类;如果需要实时进行人脸识别,则需要对程序进行优化以提高识别速度。
阅读全文