使用Python SDK图片审核接口检测图片中是否包含风险内容。

  • 图片审核支持同步检测和异步检测两种方式:同步检测实时返回检测结果;异步检测需要您轮询结果或者通过callback回调通知获取检测结果。
  • 图片支持传入互联网图片URL、本地图片文件路径以及二进制图片文件流。

准备工作

在进行具体的服务调用之前,请参考以下步骤,完整准备工作:
  1. 创建阿里云AccessKeyId和AccessKeySecret。具体请参考创建AccessKey
  2. 安装Python依赖。具体请参考安装Python依赖

(推荐)同步图片检测

接口描述
接口 功能 支持的Region 描述
ImageSyncScanRequest 同步图片风险检测 cn-shanghaicn-beijing 对图片进行多个风险场景的识别,包括色情、暴恐涉政、广告、二维码、不良场景、Logo(商标台标)识别。
示例代码
  • 传图片url检测
    #coding=utf-8
    #同步图片检测服务接口, 会实时返回检测的结果
    from aliyunsdkcore import client
    from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest
    from aliyunsdkgreen.request.extension import HttpContentHelper
    import json
    import uuid
    
    # 请替换成您的accessKeyId、accessKeySecret
    clt = client.AcsClient("您自己的AccessKeyId", "您自己的AccessKeySecret","cn-shanghai")
    request = ImageSyncScanRequest.ImageSyncScanRequest()
    request.set_accept_format('JSON')
    task = {
        "dataId": str(uuid.uuid1()),
        "url": "https://test1.jpg"
        }
    
    # 设置待检测图片, 一张图片一个task,
    # 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
    # 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
    # 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
    # 计费按照该处传递的场景进行
    # 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照场景计算
    # 例如:检测2张图片,场景传递porn,terrorism,计费会按照2张图片鉴黄,2张图片暴恐检测计算
    request.set_content(HttpContentHelper.toValue({"tasks": [task], "scenes": ["porn"]}))
    response = clt.do_action_with_exception(request)
    print(response)
    result = json.loads(response)
    if 200 == result["code"]:
        taskResults = result["data"]
        for taskResult in taskResults:
            if (200 == taskResult["code"]):
                sceneResults = taskResult["results"]
                for sceneResult in sceneResults:
                    scene = sceneResult["scene"]
                    suggestion = sceneResult["suggestion"]
                    #根据scene和suggetion做相关的处理
                    #do something
                    print(suggestion)
                    print(scene)
  • 传本地图片文件检测
    #coding=utf-8
    #同步图片检测服务接口, 会实时返回检测的结果
    from aliyunsdkcore import client
    from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest
    from aliyunsdkgreen.request.extension import ClientUploader
    from aliyunsdkgreen.request.extension import HttpContentHelper
    import json
    import uuid
    import sys
    
    # 设置一下编码, 以支持本地中文路径
    # python2使用,python3中请去掉
    if sys.version_info[0] == 2:
        reload(sys)
        sys.setdefaultencoding('utf-8')
    
    # 请替换成您的accessKeyId、accessKeySecret
    clt = client.AcsClient("您的accessKeyId", "您的accessKeySecret", "cn-shanghai")
    request = ImageSyncScanRequest.ImageSyncScanRequest()
    request.set_accept_format('JSON')
    
    # 修改成您自己的本地文件路径
    # 上传本地文件到服务端
    uploader = ClientUploader.getImageClientUploader(clt)
    url = uploader.uploadFile('d:/test/test.jpg')
    
    # 取上传后的url进行检测
    task = {"dataId": str(uuid.uuid1()),
             "url":url
            }
    
    # 设置待检测图片, 一张图片一个task,
    # 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
    # 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
    # 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
    # 计费按照该处传递的场景进行
    # 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照场景计算
    # 例如:检测2张图片,场景传递porn,terrorism,计费会按照2张图片鉴黄,2张图片暴恐检测计算
    request.set_content(HttpContentHelper.toValue({"tasks": [task], "scenes": ["porn"]}))
    response = clt.do_action_with_exception(request)
    print(response)
    result = json.loads(response)
    if 200 == result["code"]:
        taskResults = result["data"]
        for taskResult in taskResults:
            if (200 == taskResult["code"]):
                sceneResults = taskResult["results"]
                for sceneResult in sceneResults:
                    #根据scene和suggetion做相关的处理
                    #do something
                    scene = sceneResult["scene"]
                    suggestion = sceneResult["suggestion"]
  • 传图片二进制内容检测
    #coding=utf-8
    #同步图片检测服务接口, 会实时返回检测的结果
    from aliyunsdkcore import client
    from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest
    from aliyunsdkgreen.request.extension import ClientUploader
    from aliyunsdkgreen.request.extension import HttpContentHelper
    import json
    import uuid
    import sys
    
    # 设置一下编码, 以支持本地中文路径
    # python2使用,python3中请去掉
    if sys.version_info[0] == 2:
        reload(sys)
        sys.setdefaultencoding('utf-8')
    
    # 请替换成您的accessKeyId、accessKeySecret
    clt = client.AcsClient("您的accessKeyId", "您的accessKeySecret","cn-shanghai")
    request = ImageSyncScanRequest.ImageSyncScanRequest()
    request.set_accept_format('JSON')
    
    # 模拟二进制数据检测
    # 读取本地为二进制数据,修改成您自己的本地文件路径
    f = open('d:/test/test.jpg',"rb+")
    imageBytes = f.read()
    f.close()
    
    # 上传二进制文件到服务端
    uploader = ClientUploader.getImageClientUploader(clt)
    url = uploader.uploadBytes(imageBytes)
    
    # 取上传后的url进行检测
    task = {
        "dataId": str(uuid.uuid1()),
        "url":url
    }
    
    # 设置待检测图片, 一张图片一个task,
    # 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
    # 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
    # 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
    # 计费按照该处传递的场景进行
    # 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照场景计算
    # 例如:检测2张图片,场景传递porn,terrorism,计费会按照2张图片鉴黄,2张图片暴恐检测计算
    request.set_content(HttpContentHelper.toValue({"tasks": [task], "scenes": ["porn"]}))
    response = clt.do_action_with_exception(request)
    print(response)
    result = json.loads(response)
    if 200 == result["code"]:
        taskResults = result["data"]
        for taskResult in taskResults:
            if (200 == taskResult["code"]):
                sceneResults = taskResult["results"]
                for sceneResult in sceneResults:
                    #根据scene和suggetion做相关的处理
                    #do something
                    scene = sceneResult["scene"]
                    suggestion = sceneResult["suggestion"]

提交图片异步检测任务

使用Python SDK对图片进行风险检测,通过异步请求提交检测任务,结果可以通过提交请求时设置callback,也可以通过接口轮询。

异步检测支持的输入内容与同步一致(本地文件,图片url,图片二进制流),以下仅以图片url作为输入示例。

接口描述
接口 功能 支持的region 描述
ImageAsyncScanRequest 提交 图片风险异步检测任务。 cn-shanghaicn-beijing 对图片进行多个风险场景的识别,包括色情、暴恐涉政、广告、二维码、不良场景、Logo(商标台标)识别。
说明 可配合ImageAsyncScanResultsRequest接口来轮询检测结果。
示例代码
# coding=utf-8
# 调用异步图片检测服务接口,需要根据该接口返回的taskId来轮询结果
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20180509 import ImageAsyncScanRequest
from aliyunsdkgreen.request.extension import HttpContentHelper
import json
import uuid

# 请替换成您的accessKeyId、accessKeySecret
clt = client.AcsClient('您的accessKeyId', '您的accessKeySecret', 'cn-shanghai')
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')
request = ImageAsyncScanRequest.ImageAsyncScanRequest()
request.set_accept_format('JSON')


task1 = {
    "dataId": str(uuid.uuid1()),
    "url":"http://xxx.jpg"
}
# 设置待检测图片, 一张图片一个task,
# 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
# 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
# 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task
# 计费按照该处传递的场景进行
# 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照场景计算
# 例如:检测2张图片,场景传递porn,terrorism,计费会按照2张图片鉴黄,2张图片暴恐检测计算
request.set_content(HttpContentHelper.toValue({"tasks": [task1], "scenes": ["porn"]}))
response = clt.do_action_with_exception(request)
print(response)
result = json.loads(response)
if 200 == result["code"]:
    taskResults = result["data"]
    for taskResult in taskResults:
        if(200 == taskResult["code"]):
           taskId = taskResult["taskId"]
           # 将taskId 保存下来,间隔一段时间来轮询结果。具体请参照查询异步检测结果接口说明
           print(taskId)

查询异步检测结果

接口描述
接口 功能 支持的region 描述
ImageAsyncScanResultsRequest 查询图片风险异步检测任务结果。 cn-shanghaicn-beijing 可以同时查询多个检测任务的返回结果。
示例代码
# coding=utf-8
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20180509 import ImageAsyncScanResultsRequest
from aliyunsdkgreen.request.extension import HttpContentHelper
import json 

# 请替换成您的accessKeyId、accessKeySecret
clt = client.AcsClient("您的accessKeyId", "您的accessKeySecret","cn-shanghai")
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')
request = ImageAsyncScanResultsRequest.ImageAsyncScanResultsRequest()
request.set_accept_format('JSON')

# 通过taskId查询检测每个图片检测结果
taskIds = ["img5sO$Zsssss7RYuz4Yyhhe-1q51iZ"]
request.set_content(HttpContentHelper.toValue(taskIds))
response = clt.do_action_with_exception(request)
print(response)
result = json.loads(response)
if 200 == result["code"]:
    taskResults = result["data"]
    for taskResult in taskResults:
        if (200 == taskResult["code"]):
            sceneResults = taskResult["results"]
            for sceneResult in sceneResults:
                # 根据scene和suggetion做相关处理
                # do something
                scene = sceneResult["scene"]
                suggestion = sceneResult["suggestion"]