自从OpenCV3.3版本引入深度神经网络(DNN)模块之后,OpenCV对DNN模块支持最好的表现之一就是开始支持基于深度学习人脸检测,OpenCV本身提供了两个模型分别是基于Caffe与Tensorflow的,Caffe版本的模型是半精度16位的,tensorflow版本的模型是8位量化的。同时OpenCV通过与OpenVINO IE模型集成实现了底层硬件对对象检测、图像分割、图像分类等常见模型加速推理支持。OpenVINO框架本身提供直接快速开发应用原型的模型库,对很多常见视觉任务都可以做到快速演示支持。说起人脸的Lankmarks提取,最早的OpenCV跟DLib支持的方式都是基于AAM算法实现的68个人脸特征点的拟合模型,另外OpenCV中支持landmark的人脸检测会先加载一个很大的模型文件,然后速度感人,觉得还有很大的改进空间。好处是OpenCV自己提供了一个训练工具,可以自己训练模型。常见的MTCNN同时实现了人脸检测跟landmarks检测,但是只支持5点检测。而OpenVINO自带的Landmark检测模型基于自定义的卷积神经网络实现,取35个人脸各部位关键点。

使用OpenCV DNN模块人脸检测的tensorflow量化8位模型
opencv_face_detector_uint8.pb权重文件
opencv_face_detector.pbtxt配置文件
OpenCV3.3以上版本支持
模型名称:facial-landmarks-35-adas-0002
支持35点分布表示出左眼、右眼、鼻子、嘴巴、左侧眉毛、右侧眉毛、人脸轮廓。模型的输入格式为:
BCHW = [1x3x60x60]
模型的输出数据为:[1x70]大小的浮点数组、对应到35个点x、y的坐标。
输出层名称:align_fc3
首先加载模型文件
首先读取视频的每一帧,检测人脸,得到的人脸区域转换位blob对象之后,再调用landmark检测模型forward方法得到输出结果,实现的代码如下:
运行结果如下:
至于速度,我只能告诉你很实时,我是i7 CPU。
想尝试下载与使用OpenVINO直接从下面链接即可开始:
https://software.intel.com/en-us/openvino-toolkit/choose-download?innovator=C
学习OpenVINO开发技术看这里
OpenVINO计算机视觉模型加速