个人资料,仅供学习使用
修改时间——2022年1月28日 06:36:26
学习课程:OpenCV4 C++ 快速入门视频30讲
视频老师:贾志刚
30 案例:实施人脸检测
opencv知识点:
- 创建和操作综合人工神经网络 - dnn::Net类
- 读取以TensorFlow框架格式存储的网络模型 - readNetFromTensorflow
- 从图像创建4维blob - blobFromImage
- 设置网络的新输入值- Net::setInput
- 运行正向传递以计算指定层的输出 - Net::forward
本课所解决的问题:
- 如何运行opencv4提供的人脸检测模型
1.OpenCV 4
本节课的内容主要基于opencv 4 实现,开始我们先了解一下opencv4。
OpenCV4.x发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、实现了从传统的图像处理到基于深度学习的视觉处理路线图的完整拓展。
OpenCV4 毫无疑问是一个OpenCV发展历史的一个重要里程碑之作。
官方的宣传口号 OpenCV4 is more than OpenCV
也充分说明OpenCV4 是整合深度学习的新一代计算机视觉开发框架!
本课将介绍一种opencv4自带的,一个进行人脸检测的模型
2.下载人脸检测模型和
为了方便,我们不采用视频的方式,我们就直接去下载课程源码zip了
下载完之后到图中目录:opencv_tutorial_data-master → models → face_detector
目标文件夹:安装opencv目录下的sources → samples → dnn → face_detector
3.人脸检测模型演示
开始前,我们可以先把头文件和命名空间补上
这里提一下,当我们使用Net导入模型时,关于模型的各种参数可以从这个文档查看
在运行这个人脸检测模型之前,我们需要先来了解几个API
- dnn::Net类
- readNetFromTensorflow
- blobFromImage
- Net::setInput方法
- Net::forward方法
- Mat::ptr
具体介绍如下
dnn::Net类
dnn::Net类
创建和操作综合人工神经网络
神经网络表示为有向无环图 (DAG),其中顶点是层实例,边指定层输入和输出之间的关系。
每个网络层在其网络内都有唯一的整数id 和唯一的字符串名称。LayerId 可以存储图层名称或图层ID。
此类支持其实例的引用计数,即副本指向同一个实例。
readNetFromTensorflow
readNetFromTensorflow
读取以TensorFlow框架格式存储的网络模型
共2个参数
第1个参数 pb文件路径
第2个参数 pbtxt文件路径
blobFromImage
blobFromImage
从图像创建4维blob(斑点,深度学习相关知识)
共7个参数
第1个参数 输入
第2个参数 图像空间大小(默认1.0,即图像仍保持在0~255色彩空间)
第3个参数 size
第4个参数 均值
第5个参数 是否交换RB通道(默认false)
第6个参数 调整图像大小后是否剪切(默认false)
第7个参数 输出的blob深度(默认CV_32F)
returns
按照NCHW(数量,通道,高度,宽度)顺序的4维Mat,blob就是这个4维Mat