天天看点

OpenCV+OpenVINO实现人脸Landmarks实时检测

自从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+OpenVINO实现人脸Landmarks实时检测

使用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方法得到输出结果,实现的代码如下:

运行结果如下:

OpenCV+OpenVINO实现人脸Landmarks实时检测

至于速度,我只能告诉你很实时,我是i7 CPU。

想尝试下载与使用OpenVINO直接从下面链接即可开始:

https://software.intel.com/en-us/openvino-toolkit/choose-download?innovator=C

学习OpenVINO开发技术看这里

OpenVINO计算机视觉模型加速

继续阅读