Create a similar-image library

Updated at:

This topic describes how to use the Java software development kit (SDK) to create a similar-image library.

Feature description

You can use this API to create a library of similar graph samples. For more information about the parameters, see Create Graph Library API Reference.

You must use the Content Moderation endpoint to call the service using the SDK. For more information about API endpoints, see Endpoints.

Prerequisites

  • Java dependencies are installed. For more information, see Installation.

    Note

    You must use the Java version described in the Installation topic to install the dependencies. Otherwise, subsequent operation calls fail.

  • The Extension.Uploader utility class is downloaded and imported into your project if you submit a local image or a binary image stream for image moderation.

Create a similar graph sample task

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.green.model.v20180509.AddSimilarityLibraryRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;


public class AddSimilarityLibSample {

    public static void main(String[] args) throws Exception {
        /**
         * An Alibaba Cloud account AccessKey has permissions to call all API operations. Use a Resource Access Management (RAM) user to call API operations or perform routine O&M. 
         * Common methods to obtain environment variables:
         * Method 1:
         *     Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * Method 2:
         *     Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-shanghai",
                "Obtain the AccessKey ID of the RAM user from an environment variable",
                "Obtain the AccessKey secret of the RAM user from an environment variable");
        DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
        IAcsClient client = new DefaultAcsClient(profile);

        AddSimilarityLibraryRequest request = new AddSimilarityLibraryRequest();
        // Specify the API response format and the request method.
        request.setAcceptFormat(FormatType.JSON);
        request.setMethod(MethodType.POST);
        request.setEncoding("utf-8");
        request.setProtocol(ProtocolType.HTTP);

        JSONObject httpBody = new JSONObject();
        httpBody.put("name", "The name of the similar-image library");

        request.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()),
                "UTF-8", FormatType.JSON);

        /**
         * Set a timeout period. The server-side timeout period for the entire link is 10 seconds. Set the timeout period accordingly.
         * If the ReadTimeout value that you set is smaller than the server-side processing time, a ReadTimeout exception occurs in the program.
         */
        request.setConnectTimeout(3000);
        request.setReadTimeout(10000);
        HttpResponse httpResponse = null;
        try {
            httpResponse = client.doAction(request);
            // The result returned after the server receives the request and completes the processing.
            if (httpResponse != null && httpResponse.isSuccess()) {
                JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent()));
                System.out.println(JSON.toJSONString(scrResponse, true));
                int requestCode = scrResponse.getIntValue("code");
                JSONObject data = scrResponse.getJSONObject("data");
                if (200 == requestCode) {
                    // The timestamp when the library was created.
                    int createTime = data.getIntValue("createTime");
                    // The number of image samples in the library.
                    int imageCount = data.getIntValue("imageCount");
                    // The name of the library.
                    String name = data.getString("name");
                    // The region where the library resides.
                    String region = data.getString("region");
                } else {
                    /**
                     * The request failed. Analyze the response to determine the cause.
                     */
                    System.out.println("the whole request failed. response:" + JSON.toJSONString(scrResponse));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}