内容安全技术是基于阿里云视觉分析技术和深度识别技术。本教程为您介绍如何通过视觉智能开放平台的图片内容安全能力保证内容安全。

背景信息

内容安全技术是基于阿里云视觉分析技术和深度识别技术,并经过在阿里经济体内和云上客户的多领域、多场景的广泛应用和不断优化,可提供风险和治理领域的图像识别、定位、检索等全面服务能力,不仅可以降低色情、涉恐、涉政、广告、垃圾信息等违规风险,而且能大幅度降低人工审核成本。

开通服务

首先,您需要开通内容安全服务,然后才能调用图片内容安全的API。其次,在进行图片内容检测时,我们需要先将图片上传至上海地域的OSS Bucket中生成URL链接,然后通过图片URL链接传入图片数据。关于如何开通OSS服务请参见开通OSS服务。下面为您介绍如何开通内容安全服务。

  1. 登录阿里云视觉智能开放平台
  2. 在顶部菜单栏的能力广场中单击内容安全
  3. 内容安全页面中单击免费使用
  4. 确认开通地域后单击立即购买
  5. 确认订单步骤中勾选我已阅读并同意《内容审核服务协议》后单击去支付
  6. 页面提示服务开通成功。
    说明
    • 当前平台还在公测阶段,所有服务均可以免费使用。
    • 开通了内容安全服务后,该服务下的所有API均可以直接调用,不需要再单独开通。

生成URL

例如我们需要对下图进行内容安全检测。风险人物
  1. 登录OSS管理控制台
  2. 创建存储空间(Bucket)
    创建Bucket选择区域时,需要选择与内容安全服务能力相同的区域华东2(上海)
    说明 如果您的OSS所在地域不是华东2(上海),那么请参见非上海地域OSS用户生成URL。
  3. 将上述示例图片上传到OSS服务。
    具体操作请参见上传文件
  4. 查看图片URL。
    在已上传图片列表中,单击详情查看并复制图片URL。
    http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E9%A3%8E%E9%99%A9%E4%BA%BA%E7%89%A9.jpg

添加依赖

请根据您的代码选择添加不同的依赖包。
  • Java
    在您的Java工程中添加POM依赖。
    <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-imageaudit -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-imageaudit</artifactId>
        <version>1.0.6</version>
    </dependency>
  • Python
    执行如下命令安装Python SDK。
    pip install aliyun-python-sdk-imageaudit
  • Node.js
    使用NPM安装Node.js SDK。
    npm install @alicloud/imageaudit20191230@^1.0.0 --save
  • PHP
    使用composer工具安装PHP SDK。
    composer require alibabacloud/imageaudit-20191230

请求示例

请求示例如下:
  • Java请求示例
    说明 请将如下代码示例中的<accessKeyId><accessSecret>替换为您的真实AK信息。如何获取AK请参见创建AccessKey
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.imageaudit.model.v20191230.*;
    
    public class ScanImage {
    
        public static void main(String[] args) {
            DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "<accessKeyId>", "<accessSecret>");
            IAcsClient client = new DefaultAcsClient(profile);
    
            ScanImageRequest request = new ScanImageRequest();
            request.setRegionId("cn-shanghai");
    
            List<ScanImageRequest.Task> taskList = new ArrayList<ScanImageRequest.Task>();
    
            ScanImageRequest.Task task1 = new ScanImageRequest.Task();
            task1.setDataId("1111");
            task1.setImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E9%A3%8E%E9%99%A9%E4%BA%BA%E7%89%A9.jpg");
            taskList.add(task1);
            request.setTasks(taskList);
    
            List<String> sceneList = new ArrayList<String>();
            sceneList.add("terrorism");
            request.setScenes(sceneList);
    
            try {
                ScanImageResponse response = client.getAcsResponse(request);
                System.out.println(new Gson().toJson(response));
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                System.out.println("ErrCode:" + e.getErrCode());
                System.out.println("ErrMsg:" + e.getErrMsg());
                System.out.println("RequestId:" + e.getRequestId());
            }
    
        }
    }
                            
  • Python请求示例
    说明 请将如下代码示例中的<accessKeyId><accessSecret>替换为您的真实AK信息。如何获取AK请参见创建AccessKey
    #!/usr/bin/env python
    #coding=utf-8
    
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkcore.acs_exception.exceptions import ClientException
    from aliyunsdkcore.acs_exception.exceptions import ServerException
    from aliyunsdkimageaudit.request.v20191230.ScanImageRequest import ScanImageRequest
    
    client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-shanghai')
    
    request = ScanImageRequest()
    request.set_accept_format('json')
    
    request.set_Tasks([
      {
        "ImageURL": "http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E9%A3%8E%E9%99%A9%E4%BA%BA%E7%89%A9.jpg"
      }
    ])
    request.set_Scenes(["terrorism"])
    
    response = client.do_action_with_exception(request)
    # python2:  print(response)
    print(str(response, encoding='utf-8'))
  • Node.js请求示例
    说明 请将如下代码示例中的<accessKeyId><accessSecret>替换为您的真实AK信息。如何获取AK请参见创建AccessKey
    const Core = require('@alicloud/pop-core');
    
    var client = new Core({
      accessKeyId: '<accessKeyId>',
      accessKeySecret: '<accessSecret>',
      endpoint: 'https://imageaudit.cn-shanghai.aliyuncs.com',
      apiVersion: '2019-12-30'
    });
    
    var params = {
      "RegionId": "cn-shanghai",
      "Task.1.ImageURL": "http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E9%A3%8E%E9%99%A9%E4%BA%BA%E7%89%A9.jpg",
      "Scene.1": "terrorism"
    }
    
    var requestOption = {
      method: 'POST'
    };
    
    client.request('ScanImage', params, requestOption).then((result) => {
      console.log(JSON.stringify(result));
    }, (ex) => {
      console.log(ex);
    })
  • PHP请求示例
    说明 请将如下代码示例中的<accessKeyId><accessSecret>替换为您的真实AK信息。如何获取AK请参见创建AccessKey
    <?php
    use AlibabaCloud\Client\AlibabaCloud;
    use AlibabaCloud\Client\Exception\ClientException;
    use AlibabaCloud\Client\Exception\ServerException;
    
    // Download:https://github.com/aliyun/openapi-sdk-php
    // Usage:https://github.com/aliyun/openapi-sdk-php/blob/master/README.md
    
    AlibabaCloud::accessKeyClient('<accessKeyId>', '<accessSecret>')
                            ->regionId('cn-shanghai')
                            ->asDefaultClient();
    
    try {
        $result = AlibabaCloud::rpc()
                              ->product('imageaudit')
                              // ->scheme('https') // https | http
                              ->version('2019-12-30')
                              ->action('ScanImage')
                              ->method('POST')
                              ->host('imageaudit.cn-shanghai.aliyuncs.com')
                              ->options([
                                            'query' => [
                                              'RegionId' => "cn-shanghai",
                                              'Task.1.ImageURL' => "http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E9%A3%8E%E9%99%A9%E4%BA%BA%E7%89%A9.jpg",
                                              'Scene.1' => "terrorism",
                                            ],
                                        ])
                              ->request();
        print_r($result->toArray());
    } catch (ClientException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    } catch (ServerException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    }

结果示例

该接口的请求结果示例如下。
{
    "RequestId": "873E1F98-8F16-48AB-A8E5-85D2DACB924B",
    "Data": {
        "Results": [
            {
                "DataId": "1111",
                "ImageURL": "http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E9%A3%8E%E9%99%A9%E4%BA%BA%E7%89%A9.jpg",
                "SubResults": [
                    {
                        "Suggestion": "block",
                        "SfaceDataList": [
                            {
                                "X": 245,
                                "Y": 44,
                                "Faces": [
                                    {
                                        "Rate": 97.2,
                                        "Id": "AliFace_0018177",
                                        "Name": "奥萨马·本·拉登"
                                    }
                                ]
                            }
                        ],
                        "Rate": 97.2,
                        "Label": "politics",
                        "Scene": "terrorism"
                    }
                ]
            }
        ]
    }
}
从返回结果来看,该图片中包含暴恐内容。具体信息如下:
  • Name:图片风险人物为奥萨马·本·拉登。
  • Rate:检测结果置信度为97.2。
  • Label:图片包含涉政内容。
  • Scene:图片检测场景为图片风险人物识别。