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 <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 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Color Space

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值