微信小程序使用tensorflow.js完成前端人脸业务(1)
研究动机
人脸业务主要包括如下:
- 人脸检测(face detection)检测图片中是否包含人脸信息,用矩形标识出人脸的位置。
- 人脸验证(face verification)判断人脸图像是否为某个人。
- 人脸鉴别(face identification)判断人脸图像是谁。
- 人脸关键点 (face landmark) 标识诸如眼睛、鼻子、嘴巴等关键点。
对于这些业务,百度讯飞等各大厂有提供外部接口,但本文章旨在介绍如何不使用这些API,实现人脸业务,不要总是做调包侠,深入学习人脸业务对将来想要做机器视觉方面工作的小伙伴很有帮助。
为什么要做前端人脸业务呢?
因为这样可以减少服务器的负担,你想啊,如果用后端做人脸检测,那就要把每帧图片发送到服务器,由服务器来做各种人脸检测操作,然后把结果返回回来,这是非常耗时耗资源的,不仅需要考虑高并发资源消耗问题,而且由于很难达到实时性,用户体验较差。而前端人脸业务则解决了这个痛点,服务器只需要发送一次用于实现人脸业务的模型,由前端实现模型正向推理(预测),这样就把原来后端服务器的工作转移到前端设备上,不仅减少了服务器负担而且可以轻松实现实时检测。
对于Android端,我已经找到了很好的前端人脸业务实现。
简单介绍一下实现过程:首先使用Google ML Ki提供的人脸检测业务,然后用mobilefacenet完成人脸embedding,得到512维的向量,然后和已注册人脸数据比对,得到最终结果。
而对于微信小程序,我没有找到前端人脸业务的完整实现,接下来我将会介绍在微信小程序端如何实现前端人脸业务。
环境搭建
首先是根据tfjs-wechat的GitHub仓库教程来加入tensorflow.js。具体步骤如下:
- 首先你需要注册微信小程序,然后打开微信小程序后台,在“设置-第三方服务-插件管理”中添加插件,可以通过 appid [wx6afed118d9e81df9] 查找插件并添加。
- app.json中引入插件代码包(建议使用0.1.0最新版本)
{
...
"plugins": {
"tfjsPlugin": {
"version": "0.1.0",
"provider": "wx6afed118d9e81df9"
}
}
...
}
- 用npm安装tensorflow.js包,这个项目需要使用tf.loadGraphModel API来载入模型,所以需要填充fetch函数,npm的package.json文件如下:
{
"name": "face_detect",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"@tensorflow/tfjs-backend-cpu": "2.0.1",