关于人脸识别、opencv和深度学习

这篇文章主要是 介绍下这三者的关系 还有从几个大的方面 可以说是宏观角度介绍下OpenCV

前言

没有接触过这些的人可能搞不清楚他们的关系,我们从人脸识别来说,人脸识别大家都知道,支付宝刷脸、高铁火车进站刷脸,这些技术让我们生活更加便利 就比如说以前进站要工作人员一个个看证件检票 现在设置几个闸机刷脸安检就ok了 所以说技术的出现就是为了方便人们的生活
一说到人脸识别,你要识别的话首先你得从图像中框出人脸才行,但是这其中又有很多问题,就比如进站的时候是直接使用闸机上摄像头的实时画面的截图,由于高矮胖瘦人脸部占比不同,而且脸的朝向角度、站的位置远近都会导致最终拍摄的图像质量产生差异。因此,人脸识别的第一步,是识别人脸,光这一步就足够难倒不少英雄汉。
后面的识别过程就更不用说,需要兼顾准确性和效率,识别不准当然不行,但为了准,识别太久,让大家排着长队等也是不行的,难以兼顾。
但是! OpenCV出现了,当然OpenCV可不止能够做人脸识别 人脸识别只是它其中一小部分
字面意思来看 open是开 开放的 开源的 CV就是计算机视觉 computer vision
计算机视觉方向也是深度学习里面 一个热门方向 计算机视觉这个词听起来高深莫测,通俗点来说就是研究我们平常闲着无聊瞎琢磨的图片和视频 其实图像和视频从技术角度来看是一回事。一段视频按时间轴拉开来,其实就是很多张的图像,我们常说的视频帧,其实就是一张图像的意思。所以,当前计算机视觉最核心研究对象,就是图像处理
然后 计算机视觉和opencv的关系 opencv是计算机视觉里面 一个很火的工具 而且opencv比深度学习出现得更早
下面主要介绍 OpenCV

(1)什么是OpenCv

经过上面的介绍 大家都大概知道OpenCV是一个开源的计算机视觉和机器学习库,其他方面来说,它可以运行在Linux Windows 和Android等操作系统上,轻量且高效,是有一系列C函数和C++类构成的 ,他也提供了python matlab等语言的接口 能够实现很多图像处理的算法

(2)计算机视觉软件

计算机视觉方面没有标准的api 计算机视觉软件大致能分为下面三种:
①自己研究代码 但是研究过程慢,不稳定 还可能与其他库不兼容
②商业化工具 比如Halcon Matlab+Simulink 这些 但是商业化工具 有一定耗费
③依赖硬件的解决方案 比如视频监控 控制系统 医疗设备 opencv致力于成长为简化计算机视觉程序和解决方案的标准api 一方面 它优化代码提高了执行速度 另一方面 依赖硬件 得到更高的处理速度(IPPICV加速 英特尔的集成性能基元(IPP)库 opencv3.0时拥有了一个免费的IPP库的字库 称为IPPICV 你用的是英特尔处理器时 会自动调用IPPICV 加快处理)
PS: 关于opencv 和 Halcon
image.png

(3)OpenCV应用场景

①图像分类 或者叫图像识别 识别图像中物体属于什么类别
image.png
人脸识别 : 人脸方面的应用还是很多的 包括人脸识别 人脸匹配 人脸对齐等等 这也是计算机视觉很火的一个方向 现在广泛应用

②目标检测
先找到目标 再监测目标
有单物体检测和多物体检测
关于目标检测和人脸识别:
人脸检测是目标检测的一种特殊情形。目标检测(通用物体检测)针对的是多类别,人脸检测是二分类,只检测人脸这个类别。

③图像分割
基于图像检测 检测完以后 把物体分割出来
主要分为三种:
普通分割: 就比如图像经过分割后二值化
语义分割: 普通分割基础上 把属于同一级别的像素 归成一类 比如说 分割出来不同类别的物体
实例分割: 在语义分割基础上 再把相同类别的每个物体分割出来

④风格迁移 (很像匀色 颜色转移这些)
image.png

⑤图像修复
或者叫图像重构 就是修复图像
image.png

⑥超分辨率
深度学习里面有超分重建 把低清通过训练变成高清
传统的有一个名字很像的 叫超像素合并和分割 但是目的不一样(这个更像是分类)
image.png
等等等
应用很多 还有最近很火的自动驾驶 医学图像 等等

(4)OpenCV常用的库说明

基础的核心模块:
image.png
进阶
image.png

OpenCV非常重视深度学习,专门设置了一个深度学习模块,名字就叫OpenCV DNN。该模块在OpenCV的1.3版中首次出现在新增功能库opencv_contrib中,随后在3.3版移入核心库OpenCV core,正式作为OpenCV的扛把子之一。

(5)为什么要用opencv

其一,一些简单的图像处理上 直接用opencv的api可以做到很多事 比如我的几个专利
其二, 一些高级的比如人脸识别等等 也可以直接用opencv给你训练好的
其三,深度学习上为什么选择opencv 深度学习现在已经有了很多成熟的框架 最热的应该属工业界最爱的TensorFlow,和学术界最爱的Pytorch,这两个框架这么强,选择OpenCV有什么额外的优势呢 用书里一句话:
《OpenCV深度学习应用与性能优化实践》总结了四个特点:轻量、最少的外部依赖、方便集成和通用性
简单来说:我们在框架里面是实现模型的 opencv是使用模型的
比如深度学习从0开始 收集数据集 搭建模块 训练模型 然后再使用模型进行处理 所以还是挺复杂的
但是opencv只做最后一步 使用模型 开箱即用!
再比如你做一个人脸识别门禁系统 的大作业 看着很高端复杂 但是你用 opencv+树莓派
这里面人脸识别调些函数就能解决的问题

opencv设计知识太多了 上面就是一个宏观的把控 可以找其中一方面应用进行研究 逐渐深入

打个岔

(6)关于传统图像处理和深度学习

俩都能用opencv 传统图像处理可以直接用一些简单的api
而且opencv里面目前已经引入了很多深度学习算法例如YOLO、SSD等
①传统图像处理更侧重于算法 用各种矩阵计算来处理图像矩阵 包括各种基础的算法知识 基本的图像处理方法
②深度学习侧重于学习二字 用现成的东西去判断图像的信息,不是单纯的通过算来判断图像,当然在机器学习的过程中也要通过算来处理(例如convolution、inconvolution等算子),但我们在这里理解为学习更加直观。
就比如说:训练时,计算机通过一张张贴了标签的图片数据知道了哪些图片对象是狗;哪些对象是猫,从而记住了这些对象的特征从而存储在自己的“知识库”中。最后通过学习的知识库对不同的对象进行分类

各有优缺点吧,传统图像处理计算繁琐 目前发展脚步很慢了
深度学习需要丰富的数据集还有很强的计算能力 现在很火

文章学习自:
http://t.csdn.cn/KqKYB
http://t.csdn.cn/avsjb
http://t.csdn.cn/lnTg2
http://t.csdn.cn/FsDbT


胡子老爷爷
1 声望2 粉丝

种一棵树最好的时间是十年前,其次是现在!