本文介绍了内容检测API Java SDK提供的自定义图库管理接口。您可以通过这些接口自定义智能鉴黄、暴恐涉政识别、图片或视频广告的图片样本,满足个性化内容管控需求。

准备工作

在进行具体的服务调用之前,请参考以下步骤,完成准备工作:
  1. 创建阿里云AccessKeyId和AccessKeySecret。具体请参考创建AccessKey
  2. 安装Java依赖。具体请参考安装Java依赖
  3. 下载并在项目工程中引入Extension.Uploader工具类

获取自定义图库列表

您可以使用以下代码获取用户图库列表(包括用户自定义的图库列表和系统回流图库):
DescribeImageLibRequest describeImageLibRequest = new DescribeImageLibRequest();
        describeImageLibRequest.setServiceModule("open_api");

        try {
            //将所有的图库,包括自定义的图库以及回流图库
            DescribeImageLibResponse describeImageLibResponse = client.getAcsResponse(describeImageLibRequest);
            System.out.println(JSON.toJSONString(describeImageLibResponse));

            List<DescribeImageLibResponse.ImageLib> allLibs = describeImageLibResponse.getImageLibList();
            List<DescribeImageLibResponse.ImageLib> customImageLibs = new ArrayList<DescribeImageLibResponse.ImageLib>();
            for (DescribeImageLibResponse.ImageLib imageLib : allLibs) {
                String source =  imageLib.getSource();
                //过滤出用户自定义的图库
                if("MANUAL".equals(source)) {
                    customImageLibs.add(imageLib);
                }

                //过滤出系统回流(反馈)的图库
                if("FEEDBACK".equals(source)) {
                    customImageLibs.add(imageLib);
                }
            }

            System.out.println(JSON.toJSONString(customImageLibs));
        } catch (ClientException e) {
            e.printStackTrace();
        }

创建自定义图库

您可以使用以下代码创建自定义图库:
说明 请根据您所需要的业务场景设置不同的参数。
CreateImageLibRequest  createImageLibRequest = new CreateImageLibRequest();
        createImageLibRequest.setServiceModule("open_api");
        createImageLibRequest.setName("鉴黄黑库");
        createImageLibRequest.setScene("PORN");
        createImageLibRequest.setCategory("BLACK");

        try {
            CreateImageLibResponse createImageLibResponse = client.getAcsResponse(createImageLibRequest);
            System.out.println(JSON.toJSONString(createImageLibResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

修改自定义图库

您可以使用以下代码修改自定义图库的名称及其适用的bizType:
UpdateImageLibRequest  updateImageLibRequest = new UpdateImageLibRequest();
        //图库id
        updateImageLibRequest.setId(12345);
        updateImageLibRequest.setName("鉴黄黑库改名");
        updateImageLibRequest.setBizTypes(JSON.toJSONString(Arrays.asList("comment")));
        updateImageLibRequest.setCategory("WHITE");
        updateImageLibRequest.setScene("PORN");
        try {
            UpdateImageLibResponse updateImageLibResponse = client.getAcsResponse(updateImageLibRequest);
            System.out.println(JSON.toJSONString(updateImageLibResponse));
        } catch (ClientException e) {
            e.printStackTrace();

删除自定义图库

您可以使用以下代码删除自定义图库:
说明 删除自定义图库时,图库下的所有图片也将被删除。
DeleteImageLibRequest  deleteImageLibRequest = new DeleteImageLibRequest();
        //图库id
        deleteImageLibRequest.setId(12345);
        try {
            DeleteImageLibResponse deleteImageLibResponse = client.getAcsResponse(deleteImageLibRequest);
            System.out.println(JSON.toJSONString(deleteImageLibResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

获取自定义图库图片列表

您可以使用以下代码获取自定义图库中所有已添加的图片列表:
DescribeImageFromLibRequest describeImageFromLibRequest = new DescribeImageFromLibRequest();
        describeImageFromLibRequest.setImageLibId(1519);
        describeImageFromLibRequest.setPageSize(20);
        describeImageFromLibRequest.setCurrentPage(1);
        try {
            DescribeImageFromLibResponse describeImageFromLibResponse = client.getAcsResponse(describeImageFromLibRequest);
            System.out.println(JSON.toJSONString(describeImageFromLibResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

向自定义图库中添加图片

您可以使用以下代码向自定义图库中添加图片。添加图片的过程包括:
  1. 获取图片上传凭证。
  2. 上传图片到图片空间。
  3. 提交上传后的库信息、图片路径信息到服务器。
//获取上传凭证
        DescribeUploadInfoRequest describeUploadInfoRequest = new DescribeUploadInfoRequest();
        describeUploadInfoRequest.setBiz("customImageLib");
        DescribeUploadInfoResponse describeUploadInfoResponse = null;
        try {
            describeUploadInfoResponse = client.getAcsResponse(describeUploadInfoRequest);
            System.out.println(JSON.toJSONString(describeUploadInfoResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

        //上传图片
        CustomLibUploader customLibUploader = new CustomLibUploader();
        String object = null;
        try {
             object = customLibUploader.uploadFile(describeUploadInfoResponse.getHost(), describeUploadInfoResponse.getFolder(), describeUploadInfoResponse.getAccessid(),
                     describeUploadInfoResponse.getPolicy(), describeUploadInfoResponse.getSignature(),
                     "/Users/liuhai.lh/Desktop/a.jpg");
        } catch (Exception e) {
            e.printStackTrace();
        }

        if(org.apache.commons.lang.StringUtils.isNotBlank(object)){
            UploadImageToLibRequest imageToLibRequest = new UploadImageToLibRequest();
            imageToLibRequest.setImageLibId(1519);
            imageToLibRequest.setImages(JSON.toJSONString(Arrays.asList(object)));

            try {
                UploadImageToLibResponse uploadImageToLibResponse = client.getAcsResponse(imageToLibRequest);
                System.out.println(JSON.toJSONString(uploadImageToLibResponse));
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }

删除自定义图片

您可以使用以下代码删除自定义图库中的多张自定义图片:
DeleteImageFromLibRequest deleteImageFromLibRequest = new DeleteImageFromLibRequest();
deleteImageFromLibRequest.setIds(JSON.toJSONString(Arrays.asList(669310)));
try {
    DeleteImageFromLibResponse deleteImageFromLibResponse = client.getAcsResponse(deleteImageFromLibRequest);
    System.out.println(JSON.toJSONString(deleteImageFromLibResponse));
} catch (ClientException e) {
    e.printStackTrace();
}