NodeJS人脸识别初探

NodeJS人脸识别初探

最近看简书文章,可能因为大数据的原因,一直给我推送人工智能方面的文章,前两天就一直在想,都说python用来开发人工智能很热门,Java大数据也是应用广泛,那抛弃用户量不提,我能否使用Node.js去实现人工智能的某些功能呢?我查了查百度AI开放平台,发现人脸识别其实官方文档就有集成Node.js版本。刚好这两天不是很忙,遂想着亲自动手尝试一下百度AI人脸识别接口。
既然百度提供了Node.js版的SDK,那我们可以使用SDK先快速进入开发。首先进入百度AI

> https://ai.baidu.com/

NodeJS人脸识别初探_第1张图片

登录成功进入控制台,点击左侧人脸识别,进入开始创建应用
NodeJS人脸识别初探_第2张图片
NodeJS人脸识别初探_第3张图片
创建成功后进入管理应用,可以得到开发需要的APPID,API KEY,SECRET KEY,得到这三个参数值之后我们去下载一份Node.js版本的人脸识别SDK

> https://ai.baidu.com/sdk#bfr

NodeJS人脸识别初探_第4张图片

准备工作全部完成,我们接下来新建一个Node.js项目。然后将解压后的SDK放进Node项目中。
NodeJS人脸识别初探_第5张图片
可以看到我们已经将解压后的SDK放到我们的项目中,现在在终端进入SDK,然后安装SDK所需的依赖,命令为:

> npm  install

在这里插入图片描述

然后回到项目主目录,将整个SDK作为依赖,在主目录安装依赖,命令为:

> npm  install  baidu-aip.sdk

到这里引入SDK到我们本地项目就完成了,接下来我们来看下SDK文档:
NodeJS人脸识别初探_第6张图片
我们可以先写个接口测试下第一个接口:人脸检测:
首先,我们将我们应用的三个秘钥保存在config.js
在这里插入图片描述
创建一个client对象,调用服务接口进行使用。
在这里插入图片描述
发送网络请求SDK中已经对request模块进行了封装,我们可以根据自己需要对request的参数进行设置。
NodeJS人脸识别初探_第7张图片
接下来我们可以进行人脸检测的调用,SDK已经将接口给我们封装好了,人脸检测的接口分为带可选参数与不带可选参数。有什么区别呢?我们可以看下接口请求参数:
NodeJS人脸识别初探_第8张图片
可以看到我们必传的参数有两个:imageimageType

> image就是图片可以为url, base64以及FACE_TOKEN 
> imageType就是图片类型,可选值有URL, BASE64, FACE_TOKEN。

image就是图片可以为url, base64以及FACE_TOKEN
imageType就是图片类型,可选值有URL, BASE64, FACE_TOKEN。
其他三个参数是可选的参数,所以我们先来看看不带可选参数的接口如何进行调用:

> client.detect(image, imageType)

我们调用该方法,传参image为网络图片url以及imageTypeURL,看看会有什么效果
NodeJS人脸识别初探_第9张图片
调用下接口我们可以看到对图片进行了解析,返回了一系列数据
NodeJS人脸识别初探_第10张图片
这么多参数究竟干嘛的呢?我们可以看下官方文档对返回参数的说明:
NodeJS人脸识别初探_第11张图片
因为返回参数过多,我就不一一截屏,这里贴下NodeSDK文档,可以自行查看:

> https://cloud.baidu.com/doc/FACE/Face-Node-SDK.html#.E4.BA.BA.E8.84.B8.E6.A3.80.E6.B5.8B

有了文档我们就可以知道返回参数的意思了

> face_num代表在图片中检测到一张人脸 
> face_list就包含人脸的具体信息  
> location对人脸相对于图片位置进行了定位,客户端就可以根据位置信息对人脸进行特效的展示。  
> face_token就是图片解析生成的一个唯一标识的字符串,解析image可以直接传入face_token  
> face_probability代表图片是一张人脸的可能程度,1为概率最大   
> angle则为人脸旋转程度

解析结果会返回人脸相对于图片的定位,客户端就可以针对位置信息对人脸进行聚焦等操作。第二个接口可选参数又是什么样的呢?我们可以再看看刚才请求参数:
NodeJS人脸识别初探_第12张图片
我们有三个可选传的参数:

> face_field:指定返回信息 
> max_face_num:可检测最多人脸数量 
> face_type:照片类型

我们调用detect方法就需要多传options参数,方法为:

> client.detect(image, imageType, options)

我们使用该方法指定返回年龄,指定最大检测人脸为2,照片类型为生活照
NodeJS人脸识别初探_第13张图片
我们可以看下运行效果:
NodeJS人脸识别初探_第14张图片
我们可以看到返回多了一个age字段,解析返回的预估年龄。

第一个接口到这里没问题了,但是会有一个疑问?我们就是调用了detect方法,为什么就直接返回解析信息呢?其实完整的流程应该是:

> 通过appID及api_secret获取access_token凭证 
> 发起http请求人脸检测接口,检测成功返回数据

但是获取access_token以及发起http请求这部分SDK其实都已经封装完成,所以我们可以直接使用。我们可以在刚才调用封装的http请求里面打印请求参数,然后再次发起请求:
在这里插入图片描述
我们会看到请求人脸检测的接口已经完全封装好了,你只需要调用detect方法,中间的步骤SDK全部帮你进行处理了。

人脸注册

然后接下来我们来看看人脸注册接口,人脸注册该人脸就会与我们设置的groupIduserId进行绑定,人脸注册可以调用方法:

>     client.addUser(image, imageType, groupId, userId)

我们先看看发起请求需要携带的参数列表:
NodeJS人脸识别初探_第15张图片
前两个参数就不多说了,group_id是组iduser_id为用户id。我们可以写个接口看下效果:
NodeJS人脸识别初探_第16张图片
我们调用client.addUser()方法,进行人脸注册,我们看下运行效果:
NodeJS人脸识别初探_第17张图片
老规矩,贴下文档关于返回参数的解释:
NodeJS人脸识别初探_第18张图片
与人脸解析一样,选传参数可以对用户资料,图片质量等参数进行选传,注册成功该人脸就会绑定传的用户资料。这里就不过多解释了,具体可以看下文档自行测试。

人脸搜索

上一个接口我们注册了一个人脸,我们可以调用人脸搜索接口看看是否能搜索到该人脸。首先看看人脸搜索需要调用的方法:

> client.search(image, imageType, groupIdList)

这个方法需要解释的第三个参数,在指定的组里进行搜索人脸,如果同时在多个组里搜索就用,隔开。老规矩我们先看下调用本方法的请求参数列表:
NodeJS人脸识别初探_第19张图片
我们使用不带选传参数调用人脸搜索接口测试:
NodeJS人脸识别初探_第20张图片
接下来调用下看下人脸搜索是否有效果:
NodeJS人脸识别初探_第21张图片
可以看到我们在组1中找到了该人脸,我们可以测试下如果在不存在该人脸的组中查询会有什么效果呢?
NodeJS人脸识别初探_第22张图片
我在组2中搜索该人脸,未找到人脸信息。所以只有经过人脸注册,将人脸信息保存到指定的组中,才可以在指定的组中找到该人脸。

本篇文章暂时先介绍这三个接口供大家借鉴,下一篇将继续介绍人脸识别其他的API如果喜欢,请关注我的个人公众号:周先生自留地。一个未来的NodeJS践行者。

你可能感兴趣的:(Node.js,人工智能,人脸识别)