本文为您介绍如何使用阿里云视觉智能开放平台相关服务的Go SDK,包括SDK的获取和安装方法,以及SDK代码示例。
阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
该版本SDK最低环境要求必须不低于Go 1.10.x,如不满足请升级Go版本。
准备工作
在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。具体操作,请参见创建AccessKey。
执行以下命令,根据需要的AI类目安装SDK包。
生成专区:
go get github.com/alibabacloud-go/aigen-20240111
人脸人体:
go get github.com/alibabacloud-go/facebody-20191230/v4
文字识别:
go get github.com/alibabacloud-go/ocr-20191230/v3
商品理解:
go get github.com/alibabacloud-go/goodstech-20191230/v2
内容审核:
go get github.com/alibabacloud-go/imageaudit-20191230/v3
图像识别:
go get github.com/alibabacloud-go/imagerecog-20190930/v2
图像生产:
go get github.com/alibabacloud-go/imageenhan-20190930/v2
分割抠图:
go get github.com/alibabacloud-go/imageseg-20191230/v2
目标检测:
go get github.com/alibabacloud-go/objectdet-20191230/v2
图像分析处理:
go get github.com/alibabacloud-go/imageprocess-20200320/v2
视觉搜索:
go get github.com/alibabacloud-go/imgsearch-20200320/v2
视频生产:
go get github.com/alibabacloud-go/videoenhan-20200320/v3
视频理解:
go get github.com/alibabacloud-go/videorecog-20200320/v2
视频分割:
go get github.com/alibabacloud-go/videoseg-20200320/v2
异步任务管理:
go get github.com/alibabacloud-go/viapi-20230117/v2
人脸核身服务端20200910专用版本:
go get github.com/alibabacloud-go/facebody-20200910/v3
SDK下载地址如下:
AI类目 | Github链接 |
生成专区 | |
人脸人体 | |
文字识别 | |
商品理解 | |
内容审核 | |
图像识别 | |
图像生产 | |
分割抠图 | |
目标检测 | |
视觉搜索 | |
图像分析处理 | |
视频生产 | |
视频理解 | |
视频分割 | |
异步任务管理 | |
人脸核身服务端20200910专用版本 |
配置环境变量
配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户。
请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
Linux和macOS系统配置方法
在IntelliJ IDEA中打开终端Terminal。
执行以下命令,配置环境变量。
<access_key_id>
需替换为您RAM用户的AccessKey ID,<access_key_secret>
替换为您RAM用户的AccessKey Secret。如果后续需要进行更多权限相关的配置,具体操作请参见使用RAM Policy控制访问权限。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系统配置方法
新建环境变量文件,添加环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并写入已准备好的AccessKey ID和AccessKey Secret。然后重启Windows系统。本操作以Windows 10为例进行说明。打开文件资源管理器,在此电脑上右键单击属性。
在右侧导航栏,单击高级系统配置。
在系统属性对话框的高级页签下,单击环境变量。
在环境变量对话框中,单击新建(W)。
在弹出的新建系统变量对话框中,添加环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并写入已准备好的AccessKey ID和AccessKey Secret。重启Windows系统,使配置生效。
SDK示例
本文以RecognizeBankCard为例。
文件在上海地域OSS
每个类目的访问域名与对应Region开通能力,请参见访问域名。
package main
// 建议使用go mod tidy安装依赖
import (
"fmt"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
// 1、这里只是以ocr为例,其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称,能力名可参考对应API文档中的Action参数。例如您想使用通用分割,其文档为https://help.aliyun.com/document_detail/151960.html,可以知道该能力属于分割抠图类目,能力名称为SegmentCommonImage,那么您需要将代码中ocr20191230改为imageseg20191230,ocr-20191230改为imageseg-20191230,将RecognizeBankCard改为SegmentCommonImage。版本可以参考文档上面的SDK包信息。
ocr20191230 "github.com/alibabacloud-go/ocr-20191230/v3/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
func main() {
// 2、创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。
// 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。
// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行示例前必须先配置环境变量。
accessKeyId := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
accessKeySecret := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
//初始化配置对象 &openapi.Config。Config对象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
config := &openapi.Config{
AccessKeyId: tea.String(accessKeyId),
AccessKeySecret: tea.String(accessKeySecret),
}
// 3、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.com/document_detail/143103.html
config.Endpoint = tea.String("ocr.cn-shanghai.aliyuncs.com")
// 4、这里只是以ocr为例,其他能力请使用相应类目的包
client, err := ocr20191230.NewClient(config)
if err != nil {
panic(err)
}
// 5、这里只是以ocr的RecognizeBankCard为例,其他能力请使用相应类目的包和类
recognizeBankCardRequest := &ocr20191230.RecognizeBankCardRequest{
ImageURL: tea.String("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg"),
}
runtime := &util.RuntimeOptions{}
// 6、这里只是以ocr的RecognizeBankCard为例,其他能力请使用相应类目的包和类,注意RecognizeBankCardWithOptions也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的,如能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageWithOptions。
recognizeBankCardResponse, err := client.RecognizeBankCardWithOptions(recognizeBankCardRequest, runtime)
if err != nil {
// 获取整体报错信息
fmt.Println(err.Error())
} else {
// 获取整体结果
fmt.Println(recognizeBankCardResponse)
// 获取单个字段,这里只是一个例子,具体能力下的字段需要看具体能力的文档
fmt.Println(recognizeBankCardResponse.Body.Data.CardNumber)
}
}
需要修改的地方均在上述代码注释中标明,总结如下:
引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。
例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错
InvalidAction.NotFound
。关于域名详情,请参见访问域名。Client类需要使用相应类目的包下面的Client类。
Request和Response需要使用相应类目的包和类。
调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的。例如,能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageWithOptions。
文件在本地或可访问的URL
文件在本地、文件不在同一地域与文件在同地域区别在于需要使用xxxAdvanceRequest,文件是以Stream形式通过ImageURLObject参数传入。
package main
// 建议使用go mod tidy安装依赖
import (
"fmt"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
// 1、这里只是以ocr为例,其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称,能力名可参考对应API文档中的Action参数。例如您想使用通用分割,其文档为https://help.aliyun.com/document_detail/151960.html,可以知道该能力属于分割抠图类目,能力名称为SegmentCommonImage,那么您需要将代码中ocr20191230改为imageseg20191230,ocr-20191230改为imageseg-20191230,将RecognizeBankCard改为SegmentCommonImage。版本可以参考文档上面的SDK包信息。
ocr20191230 "github.com/alibabacloud-go/ocr-20191230/v3/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
"net/http"
)
func main() {
// 2、创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。
// 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。
// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行示例前必须先配置环境变量。
accessKeyId := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
accessKeySecret := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
//初始化配置对象 &openapi.Config。Config对象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
config := &openapi.Config{
AccessKeyId: tea.String(accessKeyId),
AccessKeySecret: tea.String(accessKeySecret),
}
// 3、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.com/document_detail/143103.html
config.Endpoint = tea.String("ocr.cn-shanghai.aliyuncs.com")
// 4、这里只是以ocr为例,其他能力请使用相应类目的包
client, err := ocr20191230.NewClient(config)
if err != nil {
fmt.Print(err.Error())
panic(err)
}
// 场景一,使用本地文件
//file, err:=os.Open("/tmp/bankCard.png")
//if err != nil {
// fmt.Println("can not open file",err)
// panic(err)
//}
// 场景二,使用任意可访问的url
httpClient := http.Client{}
file, _ := httpClient.Get("https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg")
// 5、这里只是以ocr的RecognizeBankCard为例,其他能力请使用相应类目的包和类
recognizeBankCardAdvanceRequest := &ocr20191230.RecognizeBankCardAdvanceRequest{
ImageURLObject: file.Body,
}
runtime := &util.RuntimeOptions{}
// 6、这里只是以ocr的RecognizeBankCard为例,其他能力请使用相应类目的包和类,注意RecognizeBankCardAdvance也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的,如能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageAdvance。
recognizeBankCardResponse, err := client.RecognizeBankCardAdvance(recognizeBankCardAdvanceRequest, runtime)
if err != nil {
// 获取整体报错信息
fmt.Println(err.Error())
} else {
// 获取整体结果
fmt.Println(recognizeBankCardResponse)
// 获取单个字段,这里只是一个例子,具体能力下的字段需要看具体能力的文档
fmt.Println(recognizeBankCardResponse.Body.Data.CardNumber)
}
}
需要修改的地方均在上述代码注释中标明,总结如下:
引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。
例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错
InvalidAction.NotFound
。关于域名详情,请参见访问域名。Client类需要使用相应类目的包下面的Client类。
Request和Response需要使用相应类目的包和类。
调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的。例如,能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageAdvance。
常见问题
调用报错如何处理?
如果您的调用出现报错,请先尝试升级SDK包到最新版本,最新版本请参考各类目SDK链接。如果您的程序中同时引入了多个类目的包,也可以先尝试将这些包都升级到最新版本,避免版本之间的包冲突问题。
依赖包版本如何确定?
可以在OpenAPI门户中搜索能力名称,选择视觉智能开放平台的API,点击进入之后选择Go语言查看生成的示例代码。
依赖包如何安装?
写好代码之后,建议使用go mod tidy安装依赖。
技术支持
如果以上方法未能解决您的问题,请通过搜索钉钉群号(23109592)加入阿里云视觉智能开放平台咨询群联系我们。届时会有专业的技术人员与您对接解决问题。