今天聊OpenCV,我想从人脸识别讲起。
这几年人脸识别技术在国内发展飞速,给生活带了很多便利,这个大家应该都有体会。早几年进高铁站还比较麻烦,要先排长队,得让检票口的工作人员一个一个查看证件然后“啪”地戳章,才能进站。很多人应该都和我一样想过一个问题,那为什么不多设几个口呢?我还专门问了朋友,朋友说都知道排长队体验不太好,不过多开一个口,就要多雇几个人,不但要一直开工资,还要有保险等各类配套的保障类支出,用人成本很高,所以二者只能相互取平衡。
现在呢?现在好多了,刷脸进站,看一眼镜头就完事,非常快捷。更重要的是,架设一台人脸识别的闸机的成本,比雇人便宜多了,所以现在进站几乎就不怎么需要排队。好,故事说到这里,才正要开始。刷脸进站还是前几年的新鲜事,大家应该都还记得第一次刷脸进站的情形,就我来说,整个进站流程和以前习惯的完全不同。那时刷脸技术还刚刚兴起,翻车新闻时有传出,我对刷脸技术半信半疑,总觉得会出点什么小意外,所以后来顺利过机之后感觉非常奇妙,觉得人脸识别这个技术实在是太棒了。
当时我对人脸识别的了解还很初浅,翻过一些论文,费了九牛二虎之力才跑通一个模型。人脸识别的原理展开能写一篇文章,不过要点有几个,首先你得从图像中框出人脸。一说人脸识别,可能你脑中会很自然的浮现出拿证件照比对想象场景,但回想一下刷脸进高铁站就知道,并不需要你额外提交一张标准的一寸照片,而是直接使用闸机上摄像头的实时画面的截图。这有什么不同呢?脸部占比就不同,而且脸的朝向角度、站的位置远近,甚至个人高矮都会导致最终拍摄的图像质量产生差异。因此,人脸识别的第一步,是识别人脸,光这一步就足够难倒不少英雄汉。后面的识别过程就更不用说,需要兼顾准确性和效率,识别不准当然不行,但为了准,识别太久,让大家排着长队等也是不行的,难以兼顾。所以,我当时的另一个感觉是觉得可惜,人脸识别能做好多事,但技术门槛很高,推广不太容易。
高潮来了。前段时间我偶然看到一份大学本科生的课程作业,注意,是课程作业,还不是毕业设计。这个课程作业要求做一个什么呢?人脸识别门禁系统,简单来说就是刷脸开门。我当时都惊呆了,现在都玩得这么高端的吗?这本科生的课程作业居然就要做一套人脸识别门禁系统,那毕业设计岂不是要实现一套无人驾驶系统才跟得上节奏?!
我赶紧追问,才知道现在要做这么一套人脸识别门禁系统,远比我想象中的要简单很多,市面上已经有很多成熟的套件,只要像拼积木一样拼搭一下就完成了。主要用到的东西有两样,一样是树莓派,另一样就是我们本篇的主角——OpenCV。
OpenCV用来完成人脸识别,剩下的“硬活”交给树莓派完成。树莓派大家应该听过,很有名的嵌入式开发板,不过本篇重点不是它,大家感兴趣再另写一篇细聊,这里先和大家报告一个有趣的发现。树莓派虽然称为无限可能的极客玩具,但本身只是一块光板,需要搭配其他模块才能“无限可能”。所以,树莓派的卖家通常会提供包含各种功能模块的套餐,譬如搭