日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

基于深度学习的人脸检测与静默活体检测——C++实现

發(fā)布時(shí)間:2025/3/21 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于深度学习的人脸检测与静默活体检测——C++实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

1.系統(tǒng)環(huán)境是win10,顯卡RTX3080;cuda10.2,cudnn7.1;OpenCV4.5,ncnn版本是20210525;C++ IDE vs2019。
2.使用NCNN作模型推理加速庫(kù),能更容易的使用GPU進(jìn)行加速,代碼不需要改動(dòng)很大就可以移植到邊緣設(shè)備或者移動(dòng)端上。

一、人臉檢測(cè)

1.人臉檢測(cè)用的yolov5-face,yolov5-face是一種實(shí)時(shí)、高精度的人臉檢測(cè),搭配N(xiāo)CNN在安卓上(Mate 30 pro)cpu 能跑出18 FPS左右,GPU能跑出25 FPS。算法源碼地址:https://github.com/deepcam-cn/yolov5-face 。論文地址:https://arxiv.org/abs/2105.12931 。
2.人臉檢測(cè)效果:

二、活體檢測(cè)

1、人臉活體檢測(cè)是用來(lái)檢測(cè)當(dāng)前攝像頭所檢測(cè)到的人臉是否是偽造的,是人臉驗(yàn)證和人臉識(shí)別的前提條件,如果不能檢測(cè)出來(lái)是否是活體,那么就會(huì)出現(xiàn)比如常見(jiàn)用照片,人臉面具,3D人像等其他媒介來(lái)騙過(guò)人臉識(shí)別系統(tǒng)。
2、目前主流的活體解決方案分為配合式活體檢測(cè)和非配合式活體檢測(cè)(靜默活體檢測(cè))。配合式活體檢測(cè)需要用戶根據(jù)提示完成指定的動(dòng)作(比如眨眼,頭往哪邊轉(zhuǎn)一下),然后再進(jìn)行活體校驗(yàn),靜默活體則在用戶無(wú)感的情況下直接進(jìn)行活體校驗(yàn)。
3、這里演示的是靜默活體檢測(cè),算法地址:https://github.com/minivision-ai/Silent-Face-Anti-Spoofing 。

三、代碼

1.代碼流程,輸入攝像頭或者視頻,先檢測(cè)當(dāng)前畫(huà)面是否存在人臉,如果在用到項(xiàng)目上,也可以做當(dāng)前存在是否是唯一人臉的檢測(cè),存在人臉則對(duì)人臉做活體檢測(cè),檢測(cè)當(dāng)前輸入的人臉是否是活體人臉。
2.代碼:

#include <opencv2/opencv.hpp> #include "TLive.h" #include "yoloface.h" #include <opencv2/video/video.hpp>cv::Rect targetResize(const cv::Mat& cv_src, cv::Mat& cv_dst, int target_w, int target__h);int main(void) {int target_w = 640, target_h = 480;YoloFace yolo_face;TLive live;//加載活體檢測(cè)模型live.LoadModel("models/live/");//加載人臉檢測(cè)模型yolo_face.loadModel("models/face/face_lite");cv::VideoCapture cap;//打開(kāi)攝像頭或者是輸入視頻//cap.open(0);cap.open("face.mp4");if (!cap.isOpened()){return 0;}cv::Mat cv_src;while (1){cap >> cv_src;if (cv_src.empty()){break;}std::vector<Object> objects;//圖像邊界擴(kuò)展,這步是為了提高精度cv::Mat cv_target;cv::Rect rect = targetResize(cv_src, cv_target, target_w, target_h);//人臉檢測(cè)yolo_face.detection(cv_target, objects);for (int i = 0; i < objects.size(); ++i){float x1 = objects[i].rect.x;float y1 = objects[i].rect.y;float x2 = objects[i].rect.width + x1;float y2 = objects[i].rect.height + y1;struct LiveFaceBox LiveBox = { x1,y1,x2,y2 };//活體檢測(cè)float prod = live.Detect(cv_target, LiveBox);objects[i].live = prod;}//輸出結(jié)果yolo_face.drawFace(cv_target, objects);cv::Mat cv_dst(cv_target(rect));cv::namedWindow("face", 0);cv::imshow("face", cv_dst);cv::waitKey(20);}cap.release();return 0; } cv::Rect targetResize(const cv::Mat& cv_src, cv::Mat& cv_dst, int target_w, int target_h) {float s;if (cv_src.cols > cv_src.rows){s = float(target_w) / cv_src.cols;}else{s = float(target_h) / cv_src.rows;}float w = cv_src.cols * s;float h = cv_src.rows * s;int w_p = (target_w - w) / 2;int h_p = (target_h - h) / 2;cv::Mat cv_size;cv::resize(cv_src, cv_size, cv::Size(w, h));cv::copyMakeBorder(cv_size, cv_dst, h_p, h_p, w_p, w_p, cv::BORDER_CONSTANT, 114.f);return cv::Rect(w_p, h_p, cv_size.cols, cv_size.rows); }

3.測(cè)試結(jié)果
先輸入一個(gè)全是照片的視頻:

再測(cè)試一個(gè)正常的活動(dòng)的人臉:

4.源碼地址:https://download.csdn.net/download/matt45m/84996790

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的基于深度学习的人脸检测与静默活体检测——C++实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。