C# 基于OpenCv的视觉工作流-章49-人脸检测
本章目标:
一、基于Haar 人脸检测;
二、基于深度学习人脸检测;

人脸检测是从图片中找出人脸的位置,而人脸识别是判断这张人脸具体是谁,两者有一定的区别。
一、基于Haar 人脸检测
1、检测算法

2、读取人脸分类器
OpenCv读取分类器可如下使用:
var cascade = new CascadeClassifier(url);
其中:参数1,url为分类器文件路径;
3、人脸检测
OpenCv人脸检测可如下使用:
var faces = cascade.DetectMultiScale(image: grayImage,scaleFactor: 1.1,minNeighbors: 2,flags: HaarDetectionTypes.DoRoughSearch | HaarDetectionTypes.ScaleImage, minSize: new OpenCvSharp.Size(30, 30));
其中:参数1,为输入灰度图像;
参数2,为图像缩放系数;
参数3,为候选框最小邻近数;
参数4,为检测标志;
参数5,为最小检测尺寸;
说明:返回值faces 为各人脸的位置矩形框,通过遍历可获取位置及绘制显示,效果如下图。

二、基于深度学习人脸检测
1、检测模型

2、读取模型
OpenCv读取模型可如下使用:
var net = CvDnn.ReadNetFromCaffe(prototxtUrl,caffemodelUrl);
其中:参数1,prototxtUrl为模型文件;
参数2,caffemodelUrl为配置文件;
3、图像预处理
OpenCv人脸检测可如下使用:
var blob = CvDnn.BlobFromImage(srcImage, 1.0, new OpenCvSharp.Size(300, 300), new Scalar(104, 177, 123));
其中:参数1,为输入图像;
参数2,为图像缩放系数;
参数3,为图像大小;
参数4,为通道均值减法;
4、人脸检测
OpenCv执行推理可如下使用:
net.SetInput(blob);
var detections = net.Forward();
说明:返回值detections 中含有置信度及人脸位置信息,遍历可获取及绘制,效果如下图;

参考链接
https://zhuanlan.zhihu.com/p/450547075
"VisionTool 探迹"免费视觉工具
下载地址:https://pan.baidu.com/s/11tktKOSnepLNIEqNbvnv6w?pwd=qv5i
"VisionTool Halcon"付费视觉工具,淘宝可搜
下载地址:https://pan.baidu.com/s/1v832KTonDYS6oNnWG2iZtQ?
对应系列文章"C# 基于Halcon的视觉工作流",欢迎前往阅读。
上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!