点击左上方“OpenCV与AI深度学习”,选择加"星标"或“置顶”
重磅干货,第一时间送达!
导读
本文主要介绍SeetaFace6开源人脸识别库的人脸检测模块使用步骤。
背景介绍
SeetaFace是中科视拓开发并开源的人脸识别库,笔者以前用过人脸识别功能,相较于OpenCV和一些开源库识别准确率高,且只需一张或数张人脸样本。3月31日SeetaFace已更新到v6版本即SeetaFace6,此次开放版包含了一直以来人脸识别的基本部分,如人脸检测、关键点定位、人脸识别。同时增加了活体检测、质量评估、年龄性别估计。并且响应时事,开放了口罩检测以及戴口罩的人脸识别模型。
github地址:
https://github.com/seetafaceengine/SeetaFace6
对比于SeetaFace2,中科视拓开放版采用了商用版最新的推理引擎TenniS,ResNet50的推理速度,从SeetaFace2在I7的8FPS提升到了20FPS。同时人脸识别训练集也大幅度提高,SeetaFace6人脸识别数据量增加到了上亿张图片。
代码下载与编译
一、源码下载:
① 源码地址:https://github.com/SeetaFace6Open/index
② 源码下载(必须使用git下载,直接下载压缩包文件夹为空):
git clone --recursive https://github.com/SeetaFace6Open/index.git
二、源码编译:
笔者使用的环境:VS2015 + CMake3.16 + OpenCV4.4.0
① 先编译基础模块OpenRoleZoo、SeetaAuthorize、TenniS:
编译OpenRoleZoo模块:
Configure、Generate即可,无需其他设置。
Release x64、先生成ALL_BUILD,然后生成INSTALL--仅用于项目--仅生成INSTALL,接着会在 C:/Program Files (x86)/ORZ目录下生成
编译SeetaAuthorize模块:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
LIB_ORZ_PATH linked by target "SeetaAuthorize" in directory D:/SeetaFace6-master/SeetaAuthorize
上述报错只需设置下面ORZ的路径即可,路径就是我们上一步INSTALL的路径,然后Generate。
然后生成ALL_BUILD,报错如下:
在SeetaAuthorize项目属性页中配置添加包含目录和库目录如下:
接着在连接器--输入--附加依赖项--添加ORZ_static.lib,点击应用。
然后重新生成ALL_BUILD、然后生成INSTALL--仅用于项目--仅生成INSTALL,接着会在 C:\Program Files (x86)\SeetaAuthorize目录下生成:
编译TenniS模块:
Configure、Generate即可,无需其他设置。
Release x64、先生成ALL_BUILD,然后生成INSTALL--仅用于项目--仅生成INSTALL,接着会在 C:\Program Files (x86)\tennis目录下生成
至此,3个基础模块编译完成!
② 接着编译人脸检测模块FaceBoxes:
报错如下:
解决方法:FaceDetector下面CMakeLists.txt 57行注释保存:
#find_package(SeetaAuthorize REQUIRED)
又报错如下:
解决方法:FaceDetector下面CMakeLists.txt 63行注释保存
Release x64、先生成ALL_BUILD,报错如下:
解决方法:在SeetaFaceDetector600项目属性页中配置添加包含目录、库目录和附加依赖项如下:
然后生成INSTALL--仅用于项目--仅生成INSTALL,接着会在D:\SeetaFace6-master\build生成头文件和库文件
人脸检测项目搭建
一、项目搭建与配置:
① 新建解决方案SeetaFace6_Project---添加项目---SeetaFace6_FaceDetection,添加cpp源文件
复制example.cpp中的代码到自己的cpp中
配置项目属性中的包含目录
D:\SeetaFace6-master\build\include
库目录
D:\SeetaFace6-master\build\lib
附加依赖项
SeetaFaceDetector600.lib
完整代码如下:
// SeetaFace6_FaceDetection.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 人脸检测实例
#include "pch.h"
#include <iostream>
#include "seeta/FaceDetector.h"
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main_image()
{
seeta::ModelSetting setting;
setting.set_device(SEETA_DEVICE_CPU);
setting.append("./model/face_detector.csta");
seeta::FaceDetector FD(setting);
auto img = cv::imread("./imgs/chloecalmon.png");
std::cout << "Got image: [" << img.cols << ", " << img.rows << ", " << img.channels() << "]" << std::endl;
SeetaImageData simg;
simg.height = img.rows;
simg.width = img.cols;
simg.channels = img.channels();
simg.data = img.data;
auto faces = FD.detect(simg);
std::cout << faces.size << std::endl;
for (int i = 0; i < faces.size; ++i) {
auto &face = faces.data[i];
auto &pos = face.pos;
cv::rectangle(img, cv::Rect(pos.x, pos.y, pos.width, pos.height), Scalar(0, 255, 0), 2);
}
cv::imshow("FaceBoxes", img);
auto key = cv::waitKey();
return 0;
}
int main_video()
{
seeta::ModelSetting setting;
setting.set_device(SEETA_DEVICE_CPU);
setting.append("./model/face_detector.csta");
seeta::FaceDetector FD(setting);
FD.set(seeta::FaceDetector::PROPERTY_MIN_FACE_SIZE, 5);
FD.set(seeta::FaceDetector::PROPERTY_THRESHOLD, 0.5);
cv::VideoCapture capture("./videos/2.mp4");
//cv::VideoCapture capture(0);
cv::Mat frame, img;
while (capture.isOpened())
{
capture.grab();
capture.retrieve(frame);
if (frame.empty()) break;
cv::resize(frame, img, cv::Size(frame.cols / 2, frame.rows / 2));
SeetaImageData simg;
simg.height = img.rows;
simg.width = img.cols;
simg.channels = img.channels();
simg.data = img.data;
auto faces = FD.detect(simg);
//std::cout << faces.size << std::endl;
for (int i = 0; i < faces.size; ++i)
{
auto &face = faces.data[i];
auto &pos = face.pos;
cv::rectangle(frame, cv::Rect(pos.x*2, pos.y*2, pos.width*2, pos.height*2), Scalar(0, 255, 0), 2);
}
cv::imshow("FaceBoxes", frame);
auto key = cv::waitKey(30);
if (key >= 0) break;
}
return 0;
}
int main()
{
//return main_image(); //图片检测
return main_video(); //视频或摄像头检测
}
注意修改模型路径face_detector.csta,模型下载地址:
链接:https://pan.baidu.com/share/init?surl=LlXe2-YsUxQMe-MLzhQ2Aw 提取码:ngne
代码运行与测试
① 记得配置好OpenCV环境,运行时将需要的dll复制到工程目录:
② 图片测试:修改图片路径为自己的路径,效果如下:
③ 视频测试:修改视频路径为自己的路径或修改为相机index,可以测试视频或摄像头实时检测,这里不做演示。
补充更新:
上述解决方案为各模块测试验证代码,代码已上传,需要可下载:
下载链接:https://pan.baidu.com/s/1-Bb6lZi3hi0gPRDPuy-NoQ#list/path=%2F
提取码:3bpj