近几年来, 面部识别技术一直在智能手机创新的周围徘徊随着苹果公司在 iPhone X 上推出 Face ID, 人们开始更多的关注面部识别技术
我们团队向来喜欢实验和探索未来技术的潜力所以我们与 Cristiano 一同利用 webRTC 做一些关于面部识别的研究和探索
在这篇文章中, 我们会分享 Cristiano 的一些成果, 他学到的东西, 以及他对这种技术挑战和局限性的看法
什么是 WebRTC?
WebRTC 是一个开源的网络框架, 支持浏览器中的实时通信它包括 Web 上高质量通信的基础构建模块, 如用于语音和视频聊天应用程序的网络, 音频和视频组件
用 Cristiano 的话来说就是一种可以通过浏览器调用麦克风, 音频和摄像头的方法
Cristiano 使用 WebRTCCanvas 微软 Cognitive Services 以及微软的 Emotion API 来创建了一个原型工具, 该工具可以通过网络摄像头在浏览器中通过面部表情来检测情绪
探索
为了帮助检测面部表情是快乐还是悲伤, Cristiano 创建了一个网格, 通过网络摄像头映射不同的脸部点当用户移动他们面部时, 点和网格也随之移动然后将这些信息发送到 Microsoft 的 Emotion 数据库, 然后该数据库就能检测某人的表情是什么, 悲伤的还是开心的
Cristiano 尝试了一些不同的库来在脸上绘制出关键点他最终选择了 Beyond Reality Face(BRFv4), 因为它在客户端运行, 所以不依赖于服务器, 并且可以在他的浏览器中轻松地工作 BRFv4 会检测你的面部, 然后映射关键点和网格, 并且在你的脸上反馈上很多小点 BRFv4 可以检测人脸上的 68 个关键点很酷对吧
你可以点击下列链接来查看不同的库
- Beyond Reality Face
- clmtrackr
- BetfaceAPI
虽然 BRFv4 能够胜任大部分困难的工作, 但是 Cristiano 想要更进一步, 想要定制网格和关键点来更好的控制它
为此, Cristiano 使用了 Canvas, 一个可以允许他定制选择的网格和关键点的一种 html5 元素这样他就能够轻松地改变颜色, 移除线条, 甚至用其他几何形状来替代小点 Canvas 给了 Cristiano 更多的选择
检测面部表情的最后一步是利用微软的 Emotion API 这是一个超级大的数据库, 里面充满了情绪数据, 一旦视频帧被发送给它, 它就会给出响应 Cristiano 能够将每个视频帧作为 Base64 图像发送给 API, 并返回什么面部表情 Cristiano 也研究了 Affectiva 的 API, 他认为它比微软的 API 更好, 因为它可以提供更详细的信息但是由于浏览器支持原因而受到了限制, 不适合在这个项目里使用
挑战和限制
Cristiano 也遇到了一些主要围绕设备和浏览器支持问题的挑战和限制根据 Cristiano 所说, 主要的限制是:
跨浏览器支持: 并不是所有的浏览器版本都支持 WebRTC, 比如低于 11.0 版本的 Safari 就不支持
设备支持: 某些设备在支持 WebRTC 时不时完全可靠例如 iPhone 6 有时就会卡住或者显示空白的背景
API 的数据负载: 每次向 Microsoft 的 API 发送视频帧都会传送很多数据, 所以你必须限制发送的帧数
需要 HTTPS 连接: 如果你想要一个可以共享的原型, 那么你就需要设置一个 https 连接, 单数如果是在本地主机行, 那么大多数的浏览器都会允许进行共享
来源: https://juejin.im/post/5a9e63cbf265da23937697bf