Go

本文为您介绍如何使用阿里云视觉智能开放平台相关服务的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链接

生成专区

aigen-20240111

人脸人体

facebody-20191230

文字识别

ocr-20191230

商品理解

goodstech-20191230

内容审核

imageaudit-20191230

图像识别

imagerecog-20190930

图像生产

imageenhan-20190930

分割抠图

imageseg-20191230

目标检测

objectdet-20191230

视觉搜索

imgsearch-20200320

图像分析处理

imageprocess-20200320

视频生产

videoenhan-20200320

视频理解

videorecog-20200320

视频分割

videoseg-20200320

异步任务管理

viapi-20230117

人脸核身服务端20200910专用版本

facebody-20200910

配置环境变量

配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户

  • 请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

  • Linux和macOS系统配置方法

    1. 在IntelliJ IDEA中打开终端Terminal。

    2. 执行以下命令,配置环境变量。

      <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_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。然后重启Windows系统。本操作以Windows 10为例进行说明。

    1. 打开文件资源管理器,在此电脑上右键单击属性。

    2. 在右侧导航栏,单击高级系统配置

    3. 系统属性对话框的高级页签下,单击环境变量

    4. 环境变量对话框中,单击新建(W)image.png

    5. 在弹出的新建系统变量对话框中,添加环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。

    6. 重启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)
    }
}
说明

需要修改的地方均在上述代码注释中标明,总结如下:

  1. 引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。

    例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。

  2. 访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错InvalidAction.NotFound。关于域名详情,请参见访问域名

  3. Client类需要使用相应类目的包下面的Client类。

  4. Request和Response需要使用相应类目的包和类。

  5. 调用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)
    }
}
说明

需要修改的地方均在上述代码注释中标明,总结如下:

  1. 引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。

    例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。

  2. 访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错InvalidAction.NotFound。关于域名详情,请参见访问域名

  3. Client类需要使用相应类目的包下面的Client类。

  4. Request和Response需要使用相应类目的包和类。

  5. 调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的。例如,能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageAdvance。

常见问题

调用报错如何处理?

如果您的调用出现报错,请先尝试升级SDK包到最新版本,最新版本请参考各类目SDK链接。如果您的程序中同时引入了多个类目的包,也可以先尝试将这些包都升级到最新版本,避免版本之间的包冲突问题。

依赖包版本如何确定?

可以在OpenAPI门户中搜索能力名称,选择视觉智能开放平台的API,点击进入之后选择Go语言查看生成的示例代码。

依赖包如何安装?

写好代码之后,建议使用go mod tidy安装依赖。

技术支持

如果以上方法未能解决您的问题,请通过搜索钉钉群号(23109592)加入阿里云视觉智能开放平台咨询群联系我们。届时会有专业的技术人员与您对接解决问题。