阿里云API调试工具OpenAPI Explore提供OpenAPI文档、API调试和SDK示例,帮助您快速入门API开发。本文介绍如何安装和快速使用智能媒体管理Go SDK。

前提条件

安装SDK

重要

调用2020-09-30版本的API,需要使用2020-09-30版本的SDK。

安装智能媒体管理Go SDK的操作步骤请参见快速入门

访问凭证

您可以选择以下类型的访问凭证。

  • 临时访问凭证:对于需要高安全性的场景,例如临时授权应用访问IMM,建议使用临时访问凭证。临时访问凭证可以限制访问的有效期,从而减少访问凭证泄露的风险。此外,临时访问凭证支持权限控制,可以有效地避免权限过大的问题。

  • 长期访问凭证:出于安全性考虑,不建议您使用长期访问凭证,建议您使用临时访问凭证。对于需要便利性的场景,长期访问凭证可以在较长时间内免除多次刷新的麻烦。建议每三个月更换一次长期访问凭证,以提高账号的安全性。当长期访问凭证泄露或者不再使用时,应该及时删除或者禁用相关的访问凭证,以免造成安全风险。

使用临时访问凭证

当您准备临时使用Go SDK访问IMM服务时,可以参考配置临时访问凭证

package main

import (
	"fmt"
	"github.com/alibabacloud-go/tea/tea"
	"os"

	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	imm "github.com/alibabacloud-go/imm-20200930/v4/client"
	sts20150401 "github.com/alibabacloud-go/sts-20150401/v2/client"
)

func main() {
	// 创建STS client,调用AssumeRole获取STS TOKEN
	stsConfig := &openapi.Config{}
	stsConfig.SetAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
	stsConfig.SetAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
	stsConfig.SetEndpoint("sts.cn-beijing.aliyuncs.com")
	stsClient, _err := sts20150401.NewClient(stsConfig)
	if _err != nil {
		panic(_err)
	}

	// 调用AssumeRole获取STS TOKEN
	assumeRoleRequest := &sts20150401.AssumeRoleRequest{
		RoleArn:         tea.String("acs:ram::125499367423****:role/STStokenTestRole"),
		RoleSessionName: tea.String("STSsessionName"),
		DurationSeconds: tea.Int64(3600),
	}
	assumeRoleResp, err := stsClient.AssumeRole(assumeRoleRequest)
	if err != nil {
		panic(err)
	}

	// 使用sts token创建 imm client
	immConfig := &openapi.Config{
		AccessKeyId:     assumeRoleResp.Body.Credentials.AccessKeyId,
		AccessKeySecret: assumeRoleResp.Body.Credentials.AccessKeySecret,
		SecurityToken:   assumeRoleResp.Body.Credentials.SecurityToken,
		Endpoint:        tea.String("imm.cn-beijing.aliyuncs.com"),
	}

	immClient, err := imm.NewClient(immConfig)
	if err != nil {
		panic(err)
	}

	// 构造检测图片中的人脸及人脸信息请求
	projectName := "imm-go-sdk-doc-demo"
	sourceUri := "oss://your-bucket-name/your-path/your-image.jpg"
	detectImageFacesRequest := &imm.DetectImageFacesRequest{
		ProjectName: tea.String(projectName),
		SourceURI:   tea.String(sourceUri),
	}

	// 发起请求
	detectImageFacesResp, err := immClient.DetectImageFaces(detectImageFacesRequest)
	if err != nil {
		fmt.Println(err)
		return
	}

	// 打印响应结果Body信息
	fmt.Println(detectImageFacesResp.Body.String())
}

使用长期访问凭证

当您准备在应用或服务中长期使用Go SDK访问IMM服务时,可以参考配置长期访问凭证

如下以在华东1(杭州)地域中检测图片中的人脸及人脸信息为例介绍如何使用智能媒体管理Go SDK。

  1. 创建main.go文件并写入如下内容。

    package main
    import (
       "fmt"
       "os"
       openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
       imm "github.com/alibabacloud-go/imm-20200930/v4/client"
       "github.com/alibabacloud-go/tea/tea"
    )
    func main() {
       // 初始化IMM客户端。
       // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
       // 强烈建议不要把ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
       // 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见https://help.aliyun.com/document_detail/2361894.html。
       immClient, err := imm.NewClient(&openapi.Config{
          RegionId: tea.String("cn-beijing"),                   // 填写项目所在地域ID。
          AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),         
          AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), 
       })
       if err != nil {
          // 错误处理。
          panic(err)
       }
       // 填写项目名称。
       projectName := "imm-go-sdk-doc-demo"
       // 填写图片的OSS URI。
       sourceUri := "oss://your-bucket-name/your-path/your-image.jpg"
       // 构造检测图片中的人脸及人脸信息请求。
       detectImageFacesRequest := &imm.DetectImageFacesRequest{
          ProjectName: tea.String(projectName),
          SourceURI:   tea.String(sourceUri),
       }
       // 发起请求。
       detectImageFacesResp, err := immClient.DetectImageFaces(detectImageFacesRequest)
       if err != nil {
          // 错误处理。
          fmt.Println(err)
          return
       }
       // 打印响应结果Body信息。
       fmt.Println(detectImageFacesResp.Body.String())
    }
  2. 执行go run main.go命令,控制台输出结果如下。

    {
       "Faces": [
          {
             "Age": 25,
             "AgeSD": 7,
             "Attractive": 0.998,
             "Beard": "none",
             "BeardConfidence": 1,
             "Boundary": {
                "Height": 127,
                "Left": 81,
                "Top": 62,
                "Width": 96
             },
             "Emotion": "happiness",
             "EmotionConfidence": 0.999,
             "FaceQuality": 0.998,
             "FigureClusterId": "figure-cluster-id-unavailable",
             "FigureConfidence": 0.999,
             "FigureId": "30f18b25-db81-4dc6-8461-fd63ab0ef16d",
             "FigureType": "face",
             "Gender": "female",
             "GenderConfidence": 1,
             "Glasses": "none",
             "GlassesConfidence": 1,
             "Hat": "none",
             "HatConfidence": 1,
             "HeadPose": {
                "Pitch": -16.989,
                "Roll": 6.006,
                "Yaw": 7.47
             },
             "Mask": "none",
             "MaskConfidence": 0.83,
             "Mouth": "open",
             "MouthConfidence": 0.998,
             "Sharpness": 1
          }
       ],
       "RequestId": "28084591-0A06-0981-9AD5-B0FBD0967FD7"
    }