视频目标检测算法目前主要使用了如下的框架:
- 将视频帧视为独立的图像,利用图像目标检测算法获取检测结果;
- 利用视频的时序信息和上下文信息对检测结果进行修正;
- 基于高质量检测窗口的跟踪轨迹对检测结果进一步进行修正..
OpenCV人脸检测器是基于深度学习的,特别是利用ResNet和SSD框架作为基础网络。使用了opencv3.4.1中的dnn的face detector的caffemodel和deploy.prototxt。
1.打开摄像头。调用opencv的CV2中videostream
2.使用caffe model的opencv中dnn组件时,需要有prototxt和caffemodel。
opencv的深度学习人脸识别是基于单帧检测器(SSD)和一个ResNet基础网络
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。作用:
-
数组的算数和逻辑运算。
-
傅立叶变换和用于图形操作的例程。
-
与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。
会用到的一些函数:
在dnn中从磁盘加载图片:
- cv2.dnn.blobFromImage:从图像中创建4维的斑点。可选的从中心调整和裁剪图像,减去平均值,按比例缩放,交换蓝色和红色通道。
- cv2.dnn.blobFromImages
- 作用:
- 平均减法:平均减法用于帮助我们在数据集中的输入图像中对抗光照变化。因此,我们可以把平均减法看作是一种用来帮助我们的卷积神经网络的技术。开始训练我们的深层神经网络之前,我们首先计算每个红色、绿色和蓝色通道的训练集的所有图像的平均像素密度。这样就会得到一个三元组RGB。
- 剥落和选择通道交换
- blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size, mean, swapRB=True)
- 图像:这是我们想要预先处理的输入图像,然后通过我们的深层神经网络进行分类。
scalefactor:在我们执行平均减法之后,我们可以选择按某个因素缩放我们的图像。该值默认为1.0(即没有缩放),但是我们也可以提供另一个值。还需要注意的是,scalefactor应该是1/西格玛,因为我们实际上是在将输入通道(在平均减法之后)乘以比例因子。
大小:这里我们提供了卷积神经网络所期望的空间大小。对于目前最先进的神经网络来说:这是224 *224,227 *227,或者299 *299。
均值:这是我们的均值减法值。它们可以是RGB模式的3元组,也可以是单个值,在这种情况下,从图像的每个通道中减去所提供的值。如果您执行的是平均减法,请确保您在(R、G、B)的顺序中提供3元组,特别是在使用swapRB=True的默认行为时。 - swapRB:OpenCV假设图像是在BGR通道中;然而,平均值假设我们使用RGB顺序。为了解决这个差异,我们可以通过将这个值设置为True来交换图像中的R和B通道。默认情况下,OpenCV为我们执行这个通道交换。
用“create”方法直接从各种框架中导出模型:
- cv2.dnn.createCaffeImporter
- cv2.dnn.createTensorFlowImporter
- cv2.dnn.createTorchImporter
使用“读取”方法从磁盘直接加载序列化模型:
- cv2.dnn.readNetFromCaffe
- cv2.dnn.readNetFromTensorFlow
- cv2.dnn.readNetFromTorch
- cv2.dnn.readhTorchBlob
人脸识别分三类:
1.基于几何特征:模板匹配法、弹性图匹配法等
2.基于子空间:主成分分析法(PCA)(降维方法)、独立分量分析法、线性判别分析法(LDA)等
3.基于学习:神经网络方法、稀疏特征表示方法等.
人脸识别分为人脸检测和人脸识别。
人脸检测主要有五个具体的子问题:
1.人脸表示,即如何将人眼所看到的图片格式的人脸,转化为计算机能处理的数据;
2.人脸尺度,即如何处理因距离等因素产生的不同大小的人脸。在实际监控环境中,图片中的人脸会因拍摄距离,抑或是其他各种原因,人脸大小相差甚远如何设计算法能在同一张图片中,检测出所有不同尺度的人脸。对于不同的人脸表示方法,需要采用不同的处理方法;
3.人脸搜索策略,通常的输入是一张较大的图片,大小通常在800*600,而图片中的人脸所占比例是很小的,宽高往往只有几十个像素。如何从一张大的图片中搜索到人脸是一个核心问题。而且这直接关乎着人脸检测的速度。许多算法大都采用滑动窗口进行穷举搜索策略,这种方式实现起来较为简单,但是速度很差,如果对系统的实时性有较高要求,则必须改进。现在很多人脸检测算法采用级联分类器来处理分类问题,通过有效的简单分类器将背景区域剔除,缩小检测范围。另外还有一些算法利用人脸肤色的特殊性,将非肤色区域丢弃,来缩小搜索范围;
4.检测速度,在人脸检测中,除了要缩小检测范围,以提高检测速度。另外,对于那些候选区域的判别速度也非常关键。即需要采取合适的人脸表示方法和判别方式。比如对高维的人脸特征向量进行降维,这些都是提高处理速度的有效方法。
5.检测精度,即如何提高人脸检测的准确度。采用比较简单的方法可能在速度上会有所提高,但是这样的方式不能适用于复杂的情况,在条件变化时,检测精度往往会下降。往往检测的速度和精度是相互制约的,需要在二者之间进行取舍,需要根据实际情况综合考虑。