人脸检测,人脸识别,目标跟踪,年龄性别识别,佩戴口罩识别,活体检测,源码,部署

项目地址

(github)
如果觉得有用,不妨给个Star⭐️🌟支持一下吧~ 谢谢!

FaceAlgorithm

特性

  1. 包含人脸检测(Retinaface,yolov5face,yolov7face),人脸检测跟踪(ByteTracker),人脸角度计算(Face_Angle)人脸矫正(Face_Aligner),人脸识别(Arcface),口罩检测(MaskRecognitiion),年龄性别检测(Gender_age),静默活体检测(Silent_Face_Anti_Spoofing) ;

  2. 所有模型均使用C++和TensorRT加速推理,yolov7face的前后处理使用cuda加速,(其他模型加速优化也可参考);

  3. 所有模型使用C++和OnnxRuntime.OpenVINO,NCNN加速推理(TO DO);

  4. 构造类似NV Deepstream,支持多种推理框架(TensorRT,OnnxRuntime,OpenVINO,NCNN),用于多路RTSP拉流+硬解码+Pipeline+推流(TO DO);

  5. 根据不同的显卡型号自动生成对应的engine(如果文件夹下有其他显卡适配engine,则删除engine才能重新生成使用中的显卡对应的engien);

  6. 提供C/C++接口,可以直接移植在项目里;

  7. 人脸识别一般流程:

    1)人脸检测(图像、视频流)

    2)根据每个人脸返回的角度,筛选出合适角度的人脸用于人脸矫正,人脸识别

    3)人脸矫正(根据5个人脸关键点)

    4)人脸特征特征提取(512维特征)

    5)人脸特征比对(人脸相似度计算)

  8. 条件编译测试说明

    测试种类enable说明
    face_detect1人脸检测
    yolov5face_detect1yolov5face 人脸检测
    yolov5face_detect1yolov7face 人脸检测
    face_recognition1人脸识别(人脸特征提取)+相似度计算
    face_detect_tracker1人脸检测跟踪
    face_detect_aligner_recognitiion0人脸检测——矫正——识别(人脸特征提取)
    mask_recognition1口罩识别
    gender_age_recognition1性别年龄识别
    silnet_face_anti_spoofing1静默活体检测

算法说明

1.人脸检测

  1. retinaface(mobilenet0.25,R50需要自己修改代码)
  2. yolov5face(yolov5sface,n,m,l,x需要自己转换对应的onnx)
  3. yolov7face(yolov7sface,另外不同大小的模型需要自己转换)
  4. yolov8facee(TO DO))

2.人脸识别

  1. arcface(R50)
  2. arcface(R101,需要自己下载模型修改代码)

3.带口罩识别

  1. 分类模型

4.年龄性别

  1. InsightFace中的年龄和性别识别;

5.静默活体识别

  1. Silent-Face-Anti-Spoofing

6.跟踪

  1. ByteTracker(加上人脸bbox和人脸关键点作为跟踪的输入,修改Bug)

7.算法接口

/** 
 * @brief               人脸初始化函数
 * @param config        模块配置参数结构体
 * @return              HZFLAG
 */
HZFLAG Initialize(Config& config);


/** 
 * @brief               人脸检测
 * @param img           opencv Mat格式
 * @param FaceDets      人脸检测结果列表,包括人脸bbox,置信度,五个关键点坐标
 * @return              HZFLAG
 */		
HZFLAG Face_Detect(std::vector<cv::Mat>&img, std::vector<std::vector<FaceDet>>&FaceDets);


/** 
 * @brief               人脸检测(yolov5_face)
 * @param img           opencv Mat格式
 * @param FaceDets      人脸检测结果列表,包括人脸bbox,置信度,五个关键点坐标
 * @return              HZFLAG
 */		
HZFLAG Yolov5Face_Detect(std::vector<cv::Mat>&img, std::vector<std::vector<FaceDet>>&FaceDets);

/** 
   * @brief             人脸检测(yolov7_face)
   * @param img         opencv Mat格式
   * @param FaceDets    人脸检测结果列表,包括人脸bbox,置信度,五个关键点坐标
   * @return            HZFLAG
   */		
HZFLAG Yolov7Face_Detect(std::vector<cv::Mat>&img, std::vector<std::vector<FaceDet>>&FaceDets);

/** 
 * @brief               人脸检测跟踪(视频流)
 * @param img           opencv Mat格式
 * @param FaceDets      FaceDets	人脸检测结果列表,包括人脸bbox,id,置信度,偏航角度,俯仰角度,五个关键点坐标
 * @return              HZFLAG
 */	
HZFLAG Face_Detect_Tracker(std::vector<cv::Mat>&img, std::vector<std::vector<FaceDet>>&FaceDets);


/** 
 * @brief               人脸矫正
 * @param Faceimg       需要矫正的人脸图像(矩形框bbox外扩1.2倍得到的人脸图像然后进行矫正!!!!)
 * @param KeyPoints     人脸关键点
 * @param Face_Aligener 矫正之后的图像
 * @return              HZFLAG
 */	
HZFLAG Face_Aligner(cv::Mat&Face_image,cv::Point2f *KeyPoints,cv::Mat&Face_Aligener);

/** 
 * @brief               人脸特征提取
 * @param Face_Aligener 经过人脸矫正的人脸图像
 * @param Face_Feature  人脸特征(512维特征)
 * @return              HZFLAG
 */		
HZFLAG Face_Feature_Extraction(cv::Mat&Face_Aligener,Feature&Face_Feature);


/** 
 * @brief               计算人脸特征的相似度
 * @param Feature1      经过人脸矫正的人脸图像
 * @param Feature2      人脸特征(512维特征)
 * @return float        相似度得分               
 */	
float Cal_Score(Feature&Feature1,Feature&Feature2);

/** 
 * @brief               人脸戴口罩识别
 * @param img           需要识别的人脸戴口罩图像
 * @param Result        人脸戴口罩识别结果
 * @return              HZFLAG
 */
HZFLAG Mask_Recognition(cv::Mat &img,float&pred);

/** 
 * @brief               性别年龄识别
 * @param img           需要识别的人脸图像
 * @param Result        性别年龄识别别结果
 * @return              HZFLAG
 */
HZFLAG Gender_Age_Recognition(cv::Mat &img,attribute&gender_age);

/** 
 * @brief               静默活体检测
 * @param img           需要检测的人脸图像
 * @param Result        静默活体检测识别结果
 * @return              HZFLAG
 */
HZFLAG Silent_Face_Anti_Spoofing(cv::Mat&img, SilentFace&silentface);

/** 
 * @brief               反初始化
 * @return              HZFLAG
 */		
HZFLAG Release(Config& config);

使用方法

1.模型下载

(Baidu Drive code: 5xaa)

模型作用说明
FaceDetect.wts人脸检测
FaceRecognition.wts人脸识别
GenderAge.onnx年龄性别识别
MaskRecognition.onnx口罩识别
yolov5s-face_bs=1.onnxyolov5s人脸检测
yolov5s-face_bs=4.onnxyolov5s人脸检测
yolov7s-face_bs=1.onnxyolov7s人脸检测
yolov7s-face_bs=4.onnxyolov7s人脸检测
2.7_80x80_MiniFASNetV2.onnx静默活体检测

2.环境

  1. ubuntu20.04+cuda11.1+cudnn8.2.1+TrnsorRT8.2.5.1(测试通过)
  2. ubuntu18.04+cuda10.2+cudnn8.2.1+TrnsorRT8.2.5.1(测试通过)
  3. Win10+cuda11.1+cudnn8.2.1+TrnsorRT8.2.5.1 (测试通过)
  4. 其他环境请自行尝试或者加群了解

3.编译

  1. 更改根目录下的CMakeLists.txt,设置tensorrt的安装目录
set(TensorRT_INCLUDE "/xxx/xxx/TensorRT-8.2.5.1/include" CACHE INTERNAL "TensorRT Library include location")
set(TensorRT_LIB "/xxx/xxx/TensorRT-8.2.5.1/lib" CACHE INTERNAL "TensorRT Library lib location")
  1. 默认opencv已安装,cuda,cudnn已安装

  2. 为了Debug默认编译 -g O0版本,如果为了加快速度请编译Release版本

  3. 使用Visual Studio Code快捷键编译(4,5二选其一):

   ctrl+shift+B
  1. 使用命令行编译(4,5二选其一):
   mkdir build
   cd build
   cmake ..
   make -j6

References

  1. https://github.com/deepcam-cn/yolov5-face
  2. https://github.com/wang-xinyu/tensorrtx
  3. https://github.com/minivision-ai/Silent-Face-Anti-Spoofing
  4. https://github.com/linghu8812/tensorrt_inference
  5. https://github.com/derronqi/yolov7-face/tree/main
  6. https://github.com/we0091234/yolov7-face-tensorrt

Acknowledgments & Contact

1.WeChat ID: cbp931126

加我微信(备注:FaceAlgorithm),拉你进群

2.QQ Group:517671804

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值