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

前提条件

安装SDK

重要

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

使用智能媒体管理Java SDK的操作步骤请参见快速入门

访问凭证

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

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

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

使用临时访问凭证

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

如下以在华东1(杭州)地域中检测图片中的人脸及人脸信息为例,介绍如何使用临时访问凭证通过智能媒体管理Java SDK调用对应API。

说明

复制使用如下示例代码时请将访问域名换成您的IMM项目所在Region的域名,并且IMM项目和OSS文件Region需要保持一致。

package com.aliyun.sample;

import com.aliyun.imm20200930.Client;
import com.aliyun.imm20200930.models.DetectImageFacesRequest;
import com.aliyun.imm20200930.models.DetectImageFacesResponse;
import com.aliyun.sts20150401.models.AssumeRoleRequest;
import com.aliyun.sts20150401.models.AssumeRoleResponse;
import com.aliyun.sts20150401.models.AssumeRoleResponseBody;
import com.aliyun.teaopenapi.models.Config;

public class STS_Test {
    // 填写项目名称。请确保已创建该项目。
    static String projectName = "imm-java-sdk-doc-demo";
    // 填写图片OSS URI。
    static String sourceURI = "oss://your-bucket-name/your-path/your-image.jpg";
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    // 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见https://help.aliyun.com/document_detail/2361894.html。
    static String immAccessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String immAccessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) throws Exception {
        Config stsConfig = new Config()
                .setAccessKeyId(immAccessKeyId)
                .setAccessKeySecret(immAccessKeySecret)
                .setEndpoint("sts-share.cn-hangzhou.aliyuncs.com");
        com.aliyun.sts20150401.Client stsClient = new com.aliyun.sts20150401.Client(stsConfig);
        AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
               .setRoleArn("acs:ram::125499367423****:role/STStokenTestRole/STSsessionName")
                .setRoleSessionName("immtest")
                .setDurationSeconds(3600L);
        AssumeRoleResponse assumeRoleResponse = stsClient.assumeRole(assumeRoleRequest);
       AssumeRoleResponseBody.AssumeRoleResponseBodyCredentials assumeRoleResponseBodyCredentials = assumeRoleResponse.body.credentials;

        Config immConfig = new Config();
        immConfig.setAccessKeyId(assumeRoleResponseBodyCredentials.getAccessKeyId());
        immConfig.setAccessKeySecret(assumeRoleResponseBodyCredentials.getAccessKeySecret());
        immConfig.setSecurityToken(assumeRoleResponseBodyCredentials.getSecurityToken());
        immConfig.setEndpoint("imm.cn-hangzhou.aliyuncs.com");
        com.aliyun.imm20200930.Client immClient = new com.aliyun.imm20200930.Client(immConfig);
        // 构造检测图片中的人脸及人脸信息请求。
        DetectImageFacesRequest detectImageFacesRequest = new DetectImageFacesRequest();
        detectImageFacesRequest.setProjectName(STS_Test.projectName);
        detectImageFacesRequest.setSourceURI(STS_Test.sourceURI);
        // 发起请求。
        DetectImageFacesResponse detectImageFacesResponse = immClient.detectImageFaces(detectImageFacesRequest);
        // 打印响应结果Body信息。
        System.out.println(detectImageFacesResponse.body.toMap());
    }
}

运行后输出结果如下。

{
  "faces": [
    {
      "attractive": 0.9810000061988831,
      "beard": "none",
      "beardConfidence": 0.9990000128746033,
      "boundary": {
        "height": 320,
        "left": 217,
        "top": 169,
        "width": 226
      },
      "emotion": "happiness",
      "emotionConfidence": 1,
      "faceQuality": 0.9869999885559082,
      "figureClusterId": "figure-cluster-id-unavailable",
      "figureConfidence": 1,
      "figureId": "92b7ed67-6344-4410-b5ed-****",
      "figureType": "face",
      "glasses": "none",
      "glassesConfidence": 0.9990000128746033,
      "hat": "none",
      "hatConfidence": 1,
      "headPose": {
        "pitch": -17.742000579833984,
        "roll": 3.2850000858306885,
        "yaw": -0.7279999852180481
      },
      "mask": "none",
      "maskConfidence": 0.7559999823570251,
      "mouth": "open",
      "mouthConfidence": 1,
      "sharpness": 1,
      ...
    }
  ],
  "requestId": "5BE08720-554C-566F-A642-****"
}

使用长期访问凭证

如下以在华东1(杭州)地域中检测图片中的人脸及人脸信息为例,介绍如何使用长期访问凭证通过智能媒体管理Java SDK调用对应API。

package com.aliyun.sample;

import com.aliyun.imm20200930.Client;
import com.aliyun.imm20200930.models.DetectImageFacesRequest;
import com.aliyun.imm20200930.models.DetectImageFacesResponse;
import com.aliyun.teaopenapi.models.Config;

public class Sample {

    // 填写项目名称。请确保已创建该项目。
    static String projectName = "imm-java-sdk-doc-demo";
    // 填写图片OSS URI。
    static String sourceURI = "oss://your-bucket-name/your-path/your-image.jpg";
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    // 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见https://help.aliyun.com/document_detail/2361894.html。
    static String immAccessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String immAccessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) {
        Config config = new Config()
                .setRegionId("cn-hangzhou")                    // 填写项目所在地域ID。
                .setAccessKeyId(immAccessKeyId)
                .setAccessKeySecret(immAccessKeySecret);
        Client client = null;
        try {
            client = new Client(config);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        // 构造检测图片中的人脸及人脸信息请求。
        DetectImageFacesRequest detectImageFacesRequest = new DetectImageFacesRequest();
        detectImageFacesRequest.setProjectName(Sample.projectName);
        detectImageFacesRequest.setSourceURI(Sample.sourceURI);
        // 发起请求。
        DetectImageFacesResponse detectImageFacesResponse = null;
        try {
            detectImageFacesResponse = client.detectImageFaces(detectImageFacesRequest);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        // 打印响应结果Body信息。
        System.out.println(detectImageFacesResponse.body.toMap());

    }
}

运行后输出结果如下。

{
  "faces": [
    {
      "attractive": 0.9810000061988831,
      "beard": "none",
      "beardConfidence": 0.9990000128746033,
      "boundary": {
        "height": 320,
        "left": 217,
        "top": 169,
        "width": 226
      },
      "emotion": "happiness",
      "emotionConfidence": 1,
      "faceQuality": 0.9869999885559082,
      "figureClusterId": "figure-cluster-id-unavailable",
      "figureConfidence": 1,
      "figureId": "92b7ed67-6344-4410-b5ed-****",
      "figureType": "face",
      "glasses": "none",
      "glassesConfidence": 0.9990000128746033,
      "hat": "none",
      "hatConfidence": 1,
      "headPose": {
        "pitch": -17.742000579833984,
        "roll": 3.2850000858306885,
        "yaw": -0.7279999852180481
      },
      "mask": "none",
      "maskConfidence": 0.7559999823570251,
      "mouth": "open",
      "mouthConfidence": 1,
      "sharpness": 1,
      ...
    }
  ],
  "requestId": "5BE08720-554C-566F-A642-****"
}