前两篇文章介绍了使用NodeJS官方提供的SDK进行快速开发,但是SDK毕竟是封装好的,省略了认证发起请求一系列操作,本篇文章不使用SDK进行开发,而是直接使用API进行开发。我们可以从零开始进行权限验证,然后再发起请求调用API实现前两篇文章实现的所有功能。
首先,我们看看官方文档对于调用API的要求:
首先我们需要通过API key 和Secret key去生成access_token。文档有提供现成的Node.js关键代码,但本篇文章均采用自己的代码逻辑。access_token有效期为30天,过期了则需要重新获取。首先我们先获取access_token:
首先我们自己来封装一个基于request的http请求:
我们封装的第一个http请求方法采用Content-type为application/x-www-form-urlencoded,请求方式为POST请求。然后我们看下文档获取access_token的文档要求:
获取access_token很简单,就是一个post请求,将三个参数传过去,接下来我们代码实现下,调用我们封装好的http请求:
我们来调下接口看看是否有效果:
可以看到我们成功获取到了access_token。获取到了access_token其实我们已经完成了鉴权操作,http请求我们也已经进行封装,下一步其实就可以开始调用API实现上一篇文章的人脸识别功能了。本篇文章就不一一测试所有接口,会着重挑几个接口来自己封装代码调取API获取数据。首先我们一样先调取人脸检测接口试试水:
人脸检测接口:
我们先来看看文档对该接口的介绍:
可以看到接口要求Content-type要求为application/json,所以说我们需要封装一个以json格式提交请求的http请求:
然后我们需要看看本接口需要提交的请求参数:
有了请求参数,我们就可以开始着手写接口:
首先调用API每个接口都需要携带access_token进行鉴权,所以请求接口地址为:
CONFIG.detectURL = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=24.a86eea7696e1b0d370be73eaf9daf02d.2592000.1562144929.282335-16399628';
我先只提交必需参数image,image_type。我们可以调取接口看看是否能得到图片检测结果:
可以看到我们成功得到人脸检测API的响应了,因为默认只返回人脸框、概率和旋转角度,我们添加选传参数返回更多信息:
我设置返回所有参数,图片检测人脸数最多为5,照片类型为生活照。我们可以看下返回参数(返回参数过多我就简单截图下)
可以看到接口完全按照我们的需要将全部参数进行返回,我们就可以在客户端根据需要对人脸进行聚焦等特效的控制。就比如可以针对接口返回的72个特征点或者150个特征点的具体坐标进行具体操作:
(图片来源于官方文档)
其他的接口调用方式和本接口完全一致的,这里就不一一讲解了。具体流程:
通过封装的第一个http请求:
'Content-Type': 'application/x-www-form-urlencoded'
可以获取到access_token,有效期为30天,这里可以选择30天后access失效再重新获取新的access_token,或者每次调用接口获取新的access_token。
然后通过封装的第二个http请求:
"content-type": 'application/json'
将接口请求参数以json方式提交请求对应API,即可以获得对应API的正确响应。
使用SDK与调用API的区别:
1.鉴权SDK封装好了,我们只需要传入API KEY以及secret KEY就可以完成鉴权。直接调取API我们需要先通过http请求获取access_token。
2.SDK封装好http请求,我们可以直接调用,而无需关心如何实现。直接调取API我们需要封装一个基于x-www-form-urlencoded以及一个基于json的http请求。
3.实现人脸识别功能API使用SDK可以直接直接封装好的方法,而调取API我们则需要手动封装方法调用已封装好的http请求发起请求。
总结:
其实人工智能基于前人的基础进行使用是很简单的。吴坤我们使用现成的SDK或者自己封装调用API,其实难度系数都不高,因为最难的人脸识别真正实现的逻辑操作现有的API已经实现,我们无需去关心人脸识别它如何进行识别,而只需调用API就可以进行识别。人脸识别系列文章到本篇就结束了,有兴趣研究原理的可以自行去进行研究。