NodeJS人脸识别(3)
前两篇文章介绍了使用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就可以进行识别。人脸识别系列文章到本篇就结束了,有兴趣研究原理的可以自行去进行研究。
- python爬虫人门(10)Scrapy框架之Downloader Middlewares
- 11.python线程
- Numpy 修炼之道 (8)—— 常用函数
- Numpy 修炼之道 (7)—— 形状操作
- 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)
- 12.python进程协程异步IO
- POJ3622 Gourmet Grazers(FHQ Treap)
- 洛谷P3201 [HNOI2009]梦幻布丁
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
- 自然语言处理基础知识1. 分词(Word Cut)2. 词性标注(POS Tag)3.自动标注4.文本分类5.评估6.从文本提取信息7.分析句子结构《python自然语言处理》各章总结:
- 洛谷P3384 【模板】树链剖分
- 洛谷P2147 [SDOI2008]Cave 洞穴勘测
- linux基础
- 洛谷P3178 [HAOI2015]树上操作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 视频综合管理平台EasyNVS通道列表如何获得RTMP地址和RTSP地址?
- 【每周一库】 rust-ftp - an FTP client written in Rust
- Mall 电商实战项目发布重大更新,全面支持SpringBoot 2.3.0 !
- Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
- 社群答疑精选03:拆分数据到新工作表
- 【Rust日报】2020-08-08:用rust制作的一个Taskwarrior终端用户界面
- 【Rust日报】2020-08-09:1Paasword Linux版本
- 聊聊dubbo-go的failfastCluster
- Caused by: java.lang.ClassNotFoundException: Cannot find class: userMap
- 链路聚合实验
- 聊聊dubbo-go的failsafeCluster
- Phenotype : 大规模表型数据处理工具
- 聊聊dubbo-go的registryAwareCluster
- 老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
- 不能错过的分布式ID生成器(Leaf ),好用的一批