Node.js
本文为您介绍如何使用阿里云视觉智能开放平台相关服务的Node.js SDK,具体包括SDK的获取和安装方法,以及SDK代码示例。
阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
该版本SDK最低环境要求Node 8.x以上,如不满足请升级Node版本。
准备工作
在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。具体操作,请参见创建AccessKey。
执行以下命令,根据需要的AI类目安装SDK包。
人脸人体:
npm install @alicloud/facebody20191230
文字识别:
npm install @alicloud/ocr20191230
商品理解:
npm install @alicloud/goodstech20191230
内容审核:
npm install @alicloud/imageaudit20191230
图像识别:
npm install @alicloud/imagerecog20190930
图像生产:
npm install @alicloud/imageenhan20190930
分割抠图:
npm install @alicloud/imageseg20191230
目标检测:
npm install @alicloud/objectdet20191230
图像分析处理:
npm install @alicloud/imageprocess20200320
视觉搜索:
npm install @alicloud/imgsearch20200320
视频生产:
npm install @alicloud/videoenhan20200320
视频理解:
npm install @alicloud/videorecog20200320
视频分割:
npm install @alicloud/videoseg20200320
3D视觉:
npm install @alicloud/threedvision20210131
异步任务管理:
npm install @alicloud/viapi20230117
自学习:
npm install @alicloud/viapi-regen20211119
SDK下载地址如下所示。
AI类目 | SDK链接 | Github链接 |
人脸人体 | ||
文字识别 | ||
商品理解 | ||
内容审核 | ||
图像识别 | ||
图像生产 | ||
分割抠图 | ||
目标检测 | ||
视觉搜索 | ||
图像分析处理 | ||
视频生产 | ||
视频理解 | ||
视频分割 | ||
3D视觉 | ||
异步任务管理 | ||
自学习 |
SDK示例
本文以RecognizeBankCard为例。
文件在同地域OSS
每个类目的访问域名与对应Region开通能力,请参见访问域名。
// 引入SDK
// 1、这里只是以ocr为例,其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称,能力名可参考对应API文档中的Action参数。例如您想使用通用分割,其文档为https://help.aliyun.com/document_detail/151960.html,可以知道该能力属于分割抠图类目,能力名称为SegmentCommonImage,那么您需要将代码中ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
const OcrClient = require('@alicloud/ocr20191230');
const OpenapiClient = require('@alicloud/openapi-client');
const TeaUtil = require('@alicloud/tea-util');
let config = new OpenapiClient.Config({
// 2、"YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
// 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
// 您的 AccessKey ID
accessKeyId: 'YOUR_ACCESS_KEY_ID',
// 您的 AccessKey Secret
accessKeySecret: 'YOUR_ACCESS_KEY_SECRET'
});
// 3、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.com/document_detail/143103.html
config.endpoint = `ocr.cn-shanghai.aliyuncs.com`;
// 4、这里只是以ocr为例,其他能力请引入相应类目的包下面的Client类
const client = new OcrClient.default(config);
// 5、这里只是以ocr下的RecognizeBankCard为例,其他能力请使用相应类目的包和类,具体入参设置需要参考具体能力的文档
const recognizeBankCardRequest = new OcrClient.RecognizeBankCardRequest({
imageURL: "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg"
});
let runtime = new TeaUtil.RuntimeOptions({ });
// 6、这里只是以ocr下的RecognizeBankCard为例,其他能力请使用相应类目的包和类,注意,recognizeBankCardWithOptions方法名也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的,如能力名称为SegmentCommonImage,对应方法名应该为segmentCommonImageWithOptions。
client.recognizeBankCardWithOptions(recognizeBankCardRequest, runtime)
.then(function(recognizeBankCardResponse) {
// 获取整体结果
console.log(recognizeBankCardResponse);
// 获取单个字段,这里只是一个例子,具体能力下的字段需要看具体能力的文档
console.log(recognizeBankCardResponse.body.data.cardNumber);
}, function(error) {
// 获取整体报错信息
console.log(error);
// 获取单个字段
console.log(error.data.Code);
})
需要修改的地方均在上述代码注释中标明,总结如下:
引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。
例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
YOUR_ACCESS_KEY_ID
、YOUR_ACCESS_KEY_SECRET
的生成请参见创建AccessKey。如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考使用RAM Policy控制访问权限。访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错
InvalidAction.NotFound
。关于域名详情,请参见访问域名。Client类需要使用相应类目的包下面的Client类。
Request和Response需要使用相应类目的包和类。
调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的。例如,能力名称为SegmentCommonImage,对应方法名应该为segmentCommonImageWithOptions。
文件在本地或文件不在同一地域OSS
文件不在同一地域与文件在同地域区别在于需要使用xxxAdvanceRequest
,文件是以Stream形式通过imageURLObject参数传入。
// 引入SDK
// 1、这里只是以ocr为例,其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称,能力名可参考对应API文档中的Action参数。例如您想使用通用分割,其文档为https://help.aliyun.com/document_detail/151960.html,可以知道该能力属于分割抠图类目,能力名称为SegmentCommonImage,那么您需要将代码中ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
const OcrClient = require('@alicloud/ocr20191230');
const OpenapiClient = require('@alicloud/openapi-client');
const TeaUtil = require('@alicloud/tea-util');
const fs = require('fs');
const http = require('http');
const https = require('https');
let config = new OpenapiClient.Config({
// 2、"YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
// 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
// 您的 AccessKey ID
accessKeyId: 'YOUR_ACCESS_KEY_ID',
// 您的 AccessKey Secret
accessKeySecret: 'YOUR_ACCESS_KEY_SECRET'
});
// 3、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.com/document_detail/143103.html
config.endpoint = `ocr.cn-shanghai.aliyuncs.com`;
// 4、这里只是以ocr为例,其他能力请引入相应类目的包下面的Client类
const client = new OcrClient.default(config);
const getResponse = function (httpClient, url) {
return new Promise((resolve, reject) => {
httpClient.get(url, function (response) {
resolve(response);
})
})
}
const request = async function () {
try {
// 5、这里只是以ocr下的RecognizeBankCard为例,其他能力请使用相应类目的包和类,具体入参设置需要参考具体能力的文档
let recognizeBankCardAdvanceRequest = new OcrClient.RecognizeBankCardAdvanceRequest();
// 场景一,使用本地文件
// const fileStream = fs.createReadStream('/tmp/bankCard.png');
// recognizeBankCardAdvanceRequest.imageURLObject = fileStream;
// 场景二,使用任意可访问的url
const url = new URL("https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg");
const httpClient = (url.protocol == "https:") ? https : http;
recognizeBankCardAdvanceRequest.imageURLObject = await getResponse(httpClient, url);
let runtime = new TeaUtil.RuntimeOptions({});
// 6、这里只是以ocr下的RecognizeBankCard为例,其他能力请使用相应类目的包和类,注意,recognizeBankCardAdvance方法名也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的,如能力名称为SegmentCommonImage,对应方法名应该为segmentCommonImageAdvance。
client.recognizeBankCardAdvance(recognizeBankCardAdvanceRequest, runtime)
.then(function(recognizeBankCardResponse) {
// 获取整体结果
console.log(recognizeBankCardResponse);
// 获取单个字段
console.log(recognizeBankCardResponse.body.data);
}, function(error) {
// 获取整体报错信息
console.log(error);
// 获取单个字段
console.log(error.data.Code);
})
} catch (error) {
console.log(error);
}
}();
需要修改的地方均在上述代码注释中标明,总结如下:
引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。
例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
YOUR_ACCESS_KEY_ID
、YOUR_ACCESS_KEY_SECRET
的生成请参见创建AccessKey。如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考使用RAM Policy控制访问权限。访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错
InvalidAction.NotFound
。关于域名详情,请参见访问域名。Client类需要使用相应类目的包下面的Client类。
Request和Response需要使用相应类目的包和类。
调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的。例如,能力名称为SegmentCommonImage,对应方法名应该为segmentCommonImageAdvance。
常见问题
调用报错如何处理?
如果您的调用出现报错,请先尝试升级SDK包到最新版本,最新版本请参考各类目SDK链接。如果您的程序中同时引入了多个类目的包,也可以先尝试将这些包都升级到最新版本,避免版本之间的包冲突问题。
OpenAPI界面显示的最新包在npm仓库中找不到如何处理?
如果您发现OpenAPI界面显示的最新版本的包,在npm仓库中找不到,这是因为新版本的包刚刚发布,仓库同步可能会有延迟,如果遇到版本不存在的情况,请稍后再试或使用npm仓库中的最新版本。
该SDK包支持Web端或者小程序端直接使用吗?
不支持。想要在Web端或者小程序端直接使用,需要根据请求签名机制自行计算签名并进行请求。可以参考Web前端直接调用或者小程序场景下直接调用。
技术支持
如果以上方法未能解决您的问题,请通过搜索钉钉群号(23109592)加入阿里云视觉智能开放平台咨询群联系我们。届时会有专业的技术人员与您对接解决问题。