SeetaFace6使用详细教程(一) 人脸检测--戴着口罩也可以检测

点击左上方“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 #include "seeta/FaceDetector.h"

#include

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