该目录提供了一个基于 LibTorch + OpenCV 的 C++ 版人脸识别推理实现,包含 MTCNN 人脸检测和 MobileFaceNet 人脸特征提取。
include/mtcnn_detector.h:MTCNN 检测类声明include/face_recognizer.h:人脸识别类声明src/mtcnn_detector.cpp:MTCNN 检测类实现src/face_recognizer.cpp:人脸识别类实现examples/image_demo.cpp:图片识别示例examples/camera_demo.cpp:摄像头实时识别示例export_torchscript_model.py:模型导出脚本CMakeLists.txt:CMake 构建文件
- OpenCV
- LibTorch(C++ 版 PyTorch)
OpenCV 下载地址:
LibTorch 下载地址,如果下载的是GPU版本,要对应自己系统上的CUDA版本:
- Windows libtorch 2.11.0(CUDA 13.0)
- Windows libtorch 2.11.0(CPU)
- Linux libtorch 2.11.0(CUDA 13.0)
- Linux libtorch 2.11.0(CPU)
- 更多版本下载地址
注意:这里直接加载项目根目录
save_model下的模型文件。MTCNN 模型(PNet.pth、RNet.pth、ONet.pth)和 MobileFaceNet 模型(mobilefacenet.pth)需要保证是可被torch::jit::load加载的 TorchScript 模型。
默认人脸库目录为项目根目录下的 face_db,要求:
- 每张图片只包含 1 张人脸
- 文件名作为身份名称
- 支持常见图片格式:
.jpg、.jpeg、.png、.bmp
例如:
face_db/
├── 杨幂.jpg
└── 迪丽热巴.jpg
程序启动时会自动遍历人脸库目录,检测并对齐人脸,提取特征建立内存人脸特征库。
以下示例以 Windows 为例,假设:
- OpenCV 已正确安装在
D:/libs/opencv/build - LibTorch 解压路径为
D:/libs/libtorch - 你当前位于项目根目录
Pytorch-MobileFaceNet/
- 进入到cpp目录
cd Pytorch-MobileFaceNet/cpp- 配置CMake并构建
cmake -S . -B build -DCMAKE_PREFIX_PATH=D:/libs/libtorch -DOpenCV_DIR=D:/libs/opencv/build
cmake --build build --config Release./build/Release/face_image_demo.exe `
--mtcnn_dir=../save_model/mtcnn `
--model_path=../save_model/mobilefacenet.pth `
--face_db=../face_db `
--image_path=../dataset/test.jpg `
--threshold=0.6 `
--device=auto参数说明:
--mtcnn_dir:MTCNN 模型目录,必须包含PNet.pth、RNet.pth、ONet.pth--model_path:MobileFaceNet TorchScript 模型路径--face_db:人脸库目录--image_path:待识别图片路径--threshold:相似度阈值,默认0.6--device:推理设备,可选auto、cpu、cuda--save_path:可选,保存可视化结果--show:是否显示窗口,默认1
带结果保存的示例:
./build/Release/face_image_demo.exe `
--mtcnn_dir=../save_model/mtcnn `
--model_path=../save_model/mobilefacenet.pth `
--face_db=../face_db `
--image_path=../dataset/test.jpg `
--save_path=result.jpg `
--threshold=0.6 `
--device=auto./build/Release/face_camera_demo.exe `
--mtcnn_dir=../save_model/mtcnn `
--model_path=../save_model/mobilefacenet.pth `
--face_db=../face_db `
--camera_id=0 `
--threshold=0.6 `
--device=auto参数说明:
--camera_id:摄像头编号,默认0
运行后:
- 按
q退出 - 按
ESC退出