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

背景信息

图片审核支持同步检测和异步检测两种方式。

  • 同步检测实时返回检测结果。
  • 异步检测需要您轮询结果或者通过callback回调通知获取检测结果。

支持传入检测的图片内容媒介包括互联网图片URL、本地图片文件路径和二进制图片文件流。

准备工作

在进行具体的服务调用之前,请完成以下准备工作:

(推荐)同步图片检测

接口名 描述 支持的Region
ImageSyncScanRequest 提交图片同步检测任务,对图片进行多个风险场景的识别,包括色情、暴恐涉政、广告、二维码、不良场景、Logo(商标台标)识别。
  • cn-shanghai
  • cn-beijing
  • cn-shenzhen
  • ap-southeast-1
  • us-west-1
示例代码
  • 传图片URL进行检测
    #coding=utf-8
    # 以下代码将调用图片同步检测接口并实时返回检测结果。
    from aliyunsdkcore import client
    from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest
    from aliyunsdkgreenextension.request.extension import HttpContentHelper
    import json
    import uuid
    
    # 请使用您自己的AccessKey信息。
    clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret","cn-shanghai")
    # 每次请求时需要新建request,请勿复用request对象。
    request = ImageSyncScanRequest.ImageSyncScanRequest()
    request.set_accept_format('JSON')
    task = {
        "dataId": str(uuid.uuid1()),
        "url": "https://test1.jpg"
        }
    
    # 设置待检测的图片,一张图片对应一个检测任务。
    # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
    # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。
    # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。
    # 一次请求中可以检测多张图片,每张图片支持检测多个风险场景,计费按照单图片单场景检测叠加计算。
    # 例如:检测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 aliyunsdkgreenextension.request.extension import ClientUploader
    from aliyunsdkgreenextension.request.extension import HttpContentHelper
    import json
    import uuid
    import sys
    
    # 设置编码规则,以便支持本地中文路径。
    # Python2中添加以下内容,Python3无需添加。
    if sys.version_info[0] == 2:
        reload(sys)
        sys.setdefaultencoding('utf-8')
    
    # 请使用您自己的AccessKey信息。
    clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret", "cn-shanghai")
    # 每次请求时需要新建request,请勿复用request对象。
    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
            }
    
    # 设置待检测的图片,一张图片对应一个检测任务。
    # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
    # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。
    # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。
    # 一次请求中可以检测多张图片,每张图片支持检测多个风险场景,计费按照单图片单场景检测叠加计算。
    # 例如:检测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 aliyunsdkgreenextension.request.extension import ClientUploader
    from aliyunsdkgreenextension.request.extension import HttpContentHelper
    import json
    import uuid
    import sys
    
    # 设置编码规则,以便支持本地中文路径。
    # Python2中添加以下内容,Python3无需添加。
    if sys.version_info[0] == 2:
        reload(sys)
        sys.setdefaultencoding('utf-8')
    
    # 请使用您自己的AccessKey信息。
    clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret","cn-shanghai")
    # 每次请求时需要新建request,请勿复用request对象。
    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
    }
    
    # 设置待检测的图片,一张图片对应一个检测任务。
    # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
    # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。
    # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。
    # 一次请求中可以检测多张图片,每张图片支持检测多个风险场景,计费按照单图片单场景检测叠加计算。
    # 例如:检测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 提交图片异步检测任务,对图片进行多个风险场景的识别,包括色情、暴恐涉政、广告、二维码、不良场景、Logo(商标台标)识别。
说明 可配合ImageAsyncScanResultsRequest接口来轮询检测结果。
  • cn-shanghai
  • cn-beijing
  • cn-shenzhen
  • ap-southeast-1
  • us-west-1
示例代码
# coding=utf-8
# 以下代码将调用图片异步检测接口,您需要根据接口返回的taskId查询检测结果。
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20180509 import ImageAsyncScanRequest
from aliyunsdkgreenextension.request.extension import HttpContentHelper
import json
import uuid

# 请使用您自己的AccessKey信息。
clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret","cn-shanghai")
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')
# 每次请求需要新建request,请勿复用request对象。
request = ImageAsyncScanRequest.ImageAsyncScanRequest()
request.set_accept_format('JSON')


task1 = {
    "dataId": str(uuid.uuid1()),
    "url":"http://xxx.jpg"
}
# 设置待检测的图片,一张图片对应一个检测任务。
# 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
# 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。
# 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。
# 一次请求中可以检测多张图片,每张图片支持检测多个风险场景,计费按照单图片单场景检测叠加计算。
# 例如:检测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。间隔一段时间后使用taskId查询检测结果。
           print(taskId)

查询异步检测结果

接口 描述 支持的region
ImageAsyncScanResultsRequest 查询图片异步检测任务的结果。支持同时查询多个检测任务的返回结果。
  • cn-shanghai
  • cn-beijing
  • cn-shenzhen
  • ap-southeast-1
  • us-west-1
示例代码
# coding=utf-8
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20180509 import ImageAsyncScanResultsRequest
from aliyunsdkgreenextension.request.extension import HttpContentHelper
import json 

# 请使用您自己的AccessKey信息。
clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret","cn-shanghai")
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')
# 每次请求需要新建request,请勿复用request对象。
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"]