导读:今天聊OpenCV,我想从人脸识别讲起。

作者:木羊同学

来源:华章计算机(hzbook_jsj)

这几年人脸识别技术在国内发展飞速,给生活带了很多便利,这个大家应该都有体会。早几年进高铁站还比较麻烦,要先排长队,得让检票口的工作人员一个一个查看证件然后“啪”地戳章,才能进站。

很多人应该都和我一样想过一个问题,那为什么不多设几个口呢?我还专门问了朋友,朋友说都知道排长队体验不太好,不过多开一个口,就要多雇几个人,不但要一直开工资,还要有保险等各类配套的保障类支出,用人成本很高,所以二者只能相互取平衡。

现在呢?现在好多了,刷脸进站,看一眼镜头就完事,非常快捷。更重要的是,架设一台人脸识别的闸机的成本,比雇人便宜多了,所以现在进站几乎就不怎么需要排队。好,故事说到这里,才正要开始。

刷脸进站还是前几年的新鲜事,大家应该都还记得第一次刷脸进站的情形,就我来说,整个进站流程和以前习惯的完全不同。那时刷脸技术还刚刚兴起,翻车新闻时有传出,我对刷脸技术半信半疑,总觉得会出点什么小意外,所以后来顺利过机之后感觉非常奇妙,觉得人脸识别这个技术实在是太棒了。

当时我对人脸识别的了解还很初浅,翻过一些论文,费了九牛二虎之力才跑通一个模型。

人脸识别的原理展开能写一篇文章,不过要点有几个,首先你得从图像中框出人脸。一说人脸识别,可能你脑中会很自然的浮现出拿证件照比对想象场景,但回想一下刷脸进高铁站就知道,并不需要你额外提交一张标准的一寸照片,而是直接使用闸机上摄像头的实时画面的截图。

这有什么不同呢?脸部占比就不同,而且脸的朝向角度、站的位置远近,甚至个人高矮都会导致最终拍摄的图像质量产生差异。因此,人脸识别的第一步,是识别人脸,光这一步就足够难倒不少英雄汉。

后面的识别过程就更不用说,需要兼顾准确性和效率,识别不准当然不行,但为了准,识别太久,让大家排着长队等也是不行的,难以兼顾。所以,我当时的另一个感觉是觉得可惜,人脸识别能做好多事,但技术门槛很高,推广不太容易。

高潮来了。前段时间我偶然看到一份大学本科生的课程作业,注意,是课程作业,还不是毕业设计。这个课程作业要求做一个什么呢?人脸识别门禁系统,简单来说就是刷脸开门。

我当时都惊呆了,现在都玩得这么高端的吗?这本科生的课程作业居然就要做一套人脸识别门禁系统,那毕业设计岂不是要实现一套无人驾驶系统才跟得上节奏?!

我赶紧追问,才知道现在要做这么一套人脸识别门禁系统,远比我想象中的要简单很多,市面上已经有很多成熟的套件,只要像拼积木一样拼搭一下就完成了。主要用到的东西有两样,一样是树莓派,另一样就是我们本篇的主角——OpenCV

OpenCV用来完成人脸识别,剩下的“硬活”交给树莓派完成。树莓派大家应该听过,很有名的嵌入式开发板,不过本篇重点不是它,大家感兴趣再另写一篇细聊,这里先和大家报告一个有趣的发现。

树莓派虽然称为无限可能的极客玩具,但本身只是一块光板,需要搭配其他模块才能“无限可能”。所以,树莓派的卖家通常会提供包含各种功能模块的套餐,譬如搭配小车、摄像头之类的,其中有一种很热门的套餐,就是树莓派+OpenCV。你去淘宝搜树莓派,会出来很多树莓派+OpenCV的结果,个别店家还“贴心”提示可以帮忙“辅导”课程作业。

说了这么久,这个OpenCV究竟是做什么的?

当然,看完了上文,大家应该至少清楚OpenCV是可以用来做人脸识别的,但如果认为OpenCV只能做人脸识别,那就太大材小用了,人脸识别只是OpenCV传统艺能的一小部分。

看名字就知道,OpenCV是一个开源的计算机视觉库,Open不必说了,CV是Computer Vision,也就是计算机视觉的首字母缩写,深度学习业界专门有一类热门的研究方向,就是计算机视觉方向,譬如纽约大学的深度学习大牛Yann LeCun,还有斯坦福大学的华裔女教授李飞飞,都是在做计算机视觉方向的研究。

如果你上Arxiv看论文应该也知道,机器学习、深度学习有一个很热门的大类就是CV。

不过,“计算机视觉”这几个字咋一看好像都懂,仔细一想还是不知道究竟做啥,难不成是研究摄像头,不,科幻一点,是研究电子眼的?感觉离日常生活有点远,容易让人两眼发懵。其实,计算机视觉不高深,研究的就是咱们闲下来爱刷的那些玩意,图像和视频。

如果学过视频技术的同学,应该会了解得更深,知道图像和视频从技术角度来看是一回事。一段视频按时间轴拉开来,其实就是很多张的图像,我们常说的视频“帧”,其实就是一张图像的意思。所以,当前计算机视觉最核心研究对象,就是图像处理。

明白了这个,就可以接着介绍OpenCV了。OpenCV可以说是当前计算机视觉界里最当红的那只炸子鸡,几乎可以说只要你要做计算机视觉,你就一定会用到OpenCV。

目前深度学习很火,用深度学习做图像处理的非常多,这里面当然大量使用了OpenCV,譬如说之前GAN刚出来的时候,大家都很爱拿它来生成卡通人脸头像,那去哪里弄训练数据呢,通常就是用OpenCV在各种动漫截图里面切。

要特别说的是,OpenCV很早就在计算机视觉界广泛应用,历史远比深度学习要长得多,长达十余年。早在前深度学习时代,人们就已经在研究和使用OpenCV来完成各种工作,江湖地位是早就定好了的。

应该不难想见,OpenCV会是一个庞大复杂的开源库,根据《OpenCV深度学习应用与性能优化实践》介绍,主要的代码库有三个,核心库OpenCV core,新增功能(我的理解一般是指尚未测试成熟的新添加特性)库opencv_contrib,以及提供周边支持,譬如用于测试和示例的各种脚本的opencv_extra。

平时最常用到的是核心库OpenCV core,里面也细分了十余类各种图像、视频处理功能,譬如提供对图像的线性和非线性滤波、缩放等几何变换的图像处理模块、专门用于处理视频的,提供运动检测、对象追踪等功能的视频模块、用于目标检测的Obejdetect、用于视频存取和编解码的Video I/O等等。

除了这些功能性的模块外,还有许多支持模块,譬如现在都爱用GPU加速,OpenCV也同样提供了相应GPU模块。

应该说,在计算机视觉领域你能想到的功能,差不多都能在OpenCV里面找到。在深度学习崛起以后,计算机视觉的版图也极大地发生了改变,一些曾经热门的工具没落了,但OpenCV及时拥抱了时代的变化,反而Great Again了。

我们知道,对于深度学习来说,图像处理可谓是龙兴之地,而OpenCV非常重视深度学习,专门设置了一个深度学习模块,名字就叫OpenCV DNN。该模块在OpenCV的1.3版中首次出现在新增功能库opencv_contrib中,随后在3.3版移入核心库OpenCV core,正式作为OpenCV的扛把子之一。

接下来就要聊聊最难回答的那个问题:为什么要选择OpenCV?这不是抬杠,在深度学习,特别是在深度学习的计算机视觉方面,是个非常好的问题。现在深度学习很热,而深度学习已经有几个很热的框架,最热的应该属工业界最爱的TensorFlow,和学术界最爱的Pytorch,这两个框架轮番刷屏,选择OpenCV有什么额外的优势呢?

《OpenCV深度学习应用与性能优化实践》总结了四个特点:轻量、最少的外部依赖、方便集成和通用性。抄书没意思,我说下我的理解吧,OpenCV和TensorFlow、Pytorch这些框架不同,它不是用来“实现”模型的,而是用来“使用”模型的。

什么意思呢?简单来说,深度学习模型如果是从零开始,是有一套比较繁复的流程的,首先需要搭建模块,然后是训练模型,最后才能使用模型。这一套流程完整做下来,不但需要很强的理论基础和动手能力,还需要具备相当可观的资源,这就是为什么我此前觉得人脸识别技术不太容易推广。

那OpenCV怎么做呢?

OpenCV只做最后一步,使用模型,也就是《OpenCV深度学习应用与性能优化实践》书中所说的“OpenCV深度学习模块只提供网络推理功能”。

业界很推崇开箱即用,我想,OpenCV这种应该算是开箱即用最理想的样子,一个看似复杂的功能,譬如人脸识别,调用函数直接就能返回想要的结果,不需要任何中间流程赚差价。这就是为什么前面所说的人脸识别门禁系统,难度系数会被降到学期作业的程度。

《OpenCV深度学习应用与性能优化实践》的第8章用一章内容介绍了如何用OpenCV实现支付级人脸识别项目,这首先是一个人脸识别项目,那“支付级”是什么意思呢?就是再上一层,加一个活体检测,用大白话来说,就是支付级人脸识别不但要确保图像上这张脸是你,也即书中所说的“人脸身份验证”,还要确保这张图像是活人实拍,而不是从照片或者视频中抠出来的,用术语说就是“活体检测”。

听起来就感觉很复杂对不对,翻翻书里的代码,总共没几行,如果再刨去对各种预处理和结果显示操作,人脸身份验证的核心代码也就十行不到,活体检测的核心代码更少了,干脆只有三行。

没有多余的废话,是不是开箱即用理想中的样子?不过,这里面并没什么黑科技,要使用深度学习技术,背后的流程都是大体一样的,岁月静好,那都是因为有别人负重前行。OpenCV使用的模型当然也是需要经过训练,不过是通过外部训练,训练好了OpenCV直接拿过来使用。

当然,不是有了训练好的模型就万事大吉,现在深度学习的模型规模越来越大,结构越来越复杂,涉及了大量复杂运算,除此之外,还涉及并行计算等工程问题。

因此,如何对模型进行优化加速,在一定条件的算力下如何使得模型效率最大化,始终是深度学习在应用实践方面最关心的话题之一。这也是OpenCV的擅长领域,OpenCV提供了多类优化加速方法,包括GPU加速和CPU加速,其中又涉及Vulkan、OpenCL、Halide等工具库。

此外,上面所介绍的模型导入过程也有一些技术细节,譬如外部模型如何通过OpenCV内部的数据对象表示,需要对OpenCV有更深入的了解才能很好地使用。

推荐阅读《OpenCV深度学习应用与性能优化实践》,这本书由直接参与OpenCV开源项目的作者撰写,不但实战性很强,而且一些OpenCV的内部技术细节也能讲得很清楚,特别是对于OpenCV深度学习如何优化加速的问题,用了本书一多半的篇幅展开撰写,大量的细节背后,能够读出作者具有的丰富从业(踩坑)经验,很有参考价值。

关于作者:莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

延伸阅读《OpenCV深度学习应用与性能优化实践》

推荐语:Intel与阿里巴巴高级图形图像专家联合撰写!深入解析OpenCV DNN 模块、基于GPU/CPU的加速实现、性能优化技巧与可视化工具,以及人脸活体检测等应用,涵盖Intel推理引擎加速等鲜见一手深度信息。知名专家傅文庆、邹复好、Vadim Pisarevsky、周强(CV君)联袂推荐!

划重点????

干货直达????

  • 阿里巴巴B2B电商算法首次对外公开

  • 长期豪赌人工智能,Alphabet是怎样一步一步偷偷改变世界的?

  • 详解自然语言处理5大语义分析技术及14类应用(建议收藏)

  • 马太效应和幂律分布是怎么回事?终于有人讲明白了

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作

大数据 | 云计算 | 数据库 | Python | 可视化

AI | 人工智能 | 机器学习 | 深度学习 | NLP

5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都完成了这个神操作

????

终于有人把OpenCV、人脸识别与深度学习讲明白了相关推荐

  1. 【第12期】终于有人把OpenCV、人脸识别与深度学习讲明白了

    今天聊OpenCV,我想从人脸识别讲起. 这几年人脸识别技术在国内发展飞速,给生活带了很多便利,这个大家应该都有体会.早几年进高铁站还比较麻烦,要先排长队,得让检票口的工作人员一个一个查看证件然后&q ...

  2. 人脸识别、深度学习优秀设计(毕业专业指导)

    人脸识别.深度学习优秀设计(毕业专业指导) #请在评论区留言获取联系方式 按各户所提要求完成功能设计,若有其他要求请先添加联系方式!!!!

  3. 人脸识别+深度学习,水平远超人类大脑!

    全文共3342字,预计学习时长7分钟 什么是人脸识别?什么是深度学习?两者结合能带来什么影响? 如果你认为一篇文章无法涵盖这么多问题,这篇文章能够改变你的想法.本文展示了所有重要的概念.总之,在这篇文 ...

  4. 终于有人把人工智能和深度学习讲明白了

    01 人工智能.机器学习和深度学习的关系 在智能科学领域,有一个初学者很爱问的问题:人工智能.机器学习和深度学习三者有什么联系和区别? 这个是既简单又复杂的问题.这个问题是有标准答案的.答:三者是包含 ...

  5. 终于有人把用户画像的流程、方法讲明白了

    导读:用户标签是个性化推荐.计算广告.金融征信等众多大数据业务应用的基础,它是原始的用户行为数据和大数据应用之间的桥梁,本文会介绍用户标签的构建方法,也就是用户画像技术. 作者:马海平 于俊 吕昕 向 ...

  6. 终于有人把生成对抗网络(GAN)讲明白了

    导读:简而言之,机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术,而本文的主角--生成对抗网络则是深度学习中的一种分类. 作者:史丹青 来源:大数据DT(ID:hzdashuju) ...

  7. 清华大咖~分享终于有人把云计算、大数据和人工智能讲明白了

    人工智能已经逐渐走进我们的生活,并应用于各个领域,它不仅给许多行业带来了巨大的经济效益,也为我们的生活带来了许多改变和便利.那么我们很多觉得学习人工智能是一件很难的事情,接下来小编想通过这些文章的分享 ...

  8. 分享丨终于有人把云计算、大数据和人工智能讲明白了!

    导 读 本文作者凭借其天马行空的脑回路,用最深入浅出,清晰化的文字逻辑,讲明白了云计算.大数据和人工智能三者之间的关系. 故事里面三个角色: 兼具经济效益与情怀的云计算:努力把信息变为智慧的大数据:模 ...

  9. 终于有人把数据科学、机器学习和人工智能讲明白了

    导读:本文讨论与人工智能相关的概念和技术,包括机器学习.深度学习.数据科学和大数据.还将讨论人类和机器如何学习,及其与人工智能当前和未来状态之间的关系.最后介绍数据如何推动人工智能,以及人工智能成功所 ...

最新文章

  1. 树莓派(Raspberry Pi 3) centos7使用yum命令报错File /usr/bin/yum, line 30 except KeyboardInterrupt, e:...
  2. 【注水功率分配】注水功率分配算法的MATLAB仿真
  3. HD_2553N皇后问题
  4. javascript中函数参数以及函数中局部变量作用域一点点理解
  5. 2019ICPC(南京) - Greedy Sequence(线段树)
  6. 视频分享:挨踢项目求生法则(1)——团队建设篇
  7. 前端学习(600):使用chorme devtools进行开发
  8. 计算机句法分析的研究现状,计算机理论论文融合语义和句型信息的中文句法分析方法研究与实现...
  9. PAT 1070. 结绳(25)-乙级
  10. php+windows+信号,php 处理信号简单演示
  11. 二维数组和稀疏数组转化
  12. 关于系统集成的设计方案(一)
  13. Ciprian Manolescu 解决了三角解剖猜想
  14. 输入三角形边长,求面积
  15. docker安装dejavu
  16. Herman miller Aeron 一代 气压杆(气压棒,气柱)更换笔记(电脑椅中的劳斯莱斯)
  17. 2022/08/30 今日学习
  18. 开源源码商城系统盘点
  19. 2016年8月27日 星期六 --出埃及记 Exodus 16:28
  20. 历年四级作文范文(1994.6-2007.6)

热门文章

  1. Vue进阶(四十五):精解 ES6 Promise 用法
  2. 图像基础:Canny算子
  3. 【OpenCV】轮廓提取——findContours()
  4. 手机长曝光怎么设置_挑战黑暗:怎样用手机拍出漂亮的长曝光照片?
  5. InitializeCriticalSectionAndSpinCount()
  6. 5年经验之谈 —— 功能测试和性能测试的区别是什么?
  7. 航班管家发布《民航运行周报5.3- 5.9》
  8. 支付宝wap端支付php对接_支付宝WAP端的支付配置教程
  9. 红石计算机简单教程,【图片】《小学生也看得懂的红石计算机教程:从零构建自己的红石计算机》【minecraft吧】_百度贴吧...
  10. 2021Java高级进阶学习资料!java面试刷题软件