内容审核

  • API调用视频审核

    最近更新时间:2019-09-25 11:03:04

    本文介绍了异步调用视频内容审核/v3/video/censor的接口,帮助您正确使用此 API 进行视频内容审核,支持基于API URL发起HTTP/HTTPS POST请求的方式调用。

    使用限制

    • 视频大小不超过1G。
    • 视频格式支持 mp4、flv、mov、avi、wmv、ts和mpg。
    • 支持用户设定截帧频率,但单个视频最大截帧数为3000帧。如根据截帧频率计算出来的截帧数大于3000帧,则会按最大3000帧对整个视频进行均匀截帧。
    • 接口响应时间依赖视频的下载时间。请保证被审核视频所在的存储服务稳定可靠,建议您使用七牛云存储或者CDN缓存等。

    功能描述

    视频内容审核 API 主要用于检测或识别视频中的不良信息,并给出审核结果管控建议。支持的审核类型包括:视频鉴黄、视频鉴暴恐、视频敏感人物识别。

    审核类型scenes与相应的label/group
    在提交内容审核任务时,您需要指定审核类型scenes;而在返回结果中,则包含了您指定的类型对应的label结果分类参数,具体label/group请参见图片内容审核

    请求说明

    请求方式: POST

    请求url: http://ai.qiniuapi.com/v3/video/censor

    请求Header

    字段 取值
    Content-Type application/json
    Authorization Qiniu <AccessKey>:<Sign>
    注意: 用户请根据 AccessKey 和 SecretKey 后生成鉴权,以便进行身份验证,<Sign>的取值请参考七牛鉴权

    请求参数

    字段 类型 是否必选 说明
    data.uri string Y 视频URL地址,目前支持http和https。
    params.scenes array Y 审核类型,必填字段,没有默认值,可选项:pulp/terror/politician。
    params.cut_param.interval_msecs int N 截帧频率,单位:毫秒,默认为5000(5s),取值范围为1000~60000(即1s~60s)。
    params.saver.bucket string N 视频截帧文件存入的bucket,目前只支持存入七牛云华东的bucket。如何创建七牛云bucket,请参见文档
    params.saver.prefix string N 保存的截帧文件的前缀。
    params.hook_url string N 视频检测结束后的回调地址。关于API调用视频审核回调文档,请参见文档
    params.hook_auth Boolean N true/false,默认为false,设置回调请求中加入请求头authorization,用于回调服务器鉴权

    请求示例

    POST /v3/video/censor HTTP/1.1
    Host: ai.qiniuapi.com
    Content-Type: application/json
    Authorization: Qiniu YnxrxOSvGotRZpqkZnMzl_euuoqRzOKUd6zwbRju:r6a-o2UpBg6A4puIMnkCExH8lE8=
    
    {
        "data": {
            "uri": "https://mars-assets.qnssl.com/scene.mp4"
        },
        "params": {
            "scenes": [
                "pulp",
                "terror",
                "politician"
            ],
            "cut_param": {
                "interval_msecs": 5000
            }
        }
    }
    

    注意: 请把 Authorization 换成您的账号七牛鉴权 QiniuToken

    系统接受到请求后,会立即返回job_id,视频审核结果通过job_id获得。

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "job": <job_id>
    }
    
    参数 类型 必选 说明
    job_id string 服务器返回的,唯一标识该视频任务的ID。

    通过job_id获取视频审核结果

    请求语法

    GET /v3/jobs/video/<job-id> HTTP/1.1
    Host: ai.qiniuapi.com
    Authorization: Qiniu <AccessKey>:<Sign>
    

    注意: 需要在请求的 head 部分添加七牛鉴权,以进行用户身份验证。

    参数 类型 必选 说明
    job_id string 服务器返回的,唯一标识该视频任务的ID。

    返回参数说明

    字段 取值 说明
    id string 服务器返回的,唯一标识该视频任务的ID。
    request json结构体 视频审核请求中的body。
    status string 任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED,RESCHEDULED是指等待重试中。
    result json结构体 视频内容审核的返回结果,详情请查看*表.视频内容审核的返回结果*
    created_at string 任务创建时间,如:2019-01-02T15:03:04。
    updated_at string 任务更新时间,如:2019-01-02T15:03:04。
    rescheduled_at string 任务重试时间,如:2019-01-02T16:03:04。

    表.视频内容审核的返回结果

    字段 取值 说明
    code int 处理状态:200 调用成功
    message string 与code对应的状态描述信息
    result.suggestion string 视频的审核结果管控建议说明
    根据内容审核中各种审核类型的返回结果,系统会将审核结果转换成对应的管控建议,取值包括:[“block”,”review”,”pass”]。
    suggestion=block:表示系统确认审核内容违规,建议您将其删除。
    suggestion=review:表示系统无法确认审核内容是否违规,建议您进行人工复核。
    suggestion=pass:表示系统确认审核内容正常,建议您忽略该文件。
    result.scenes.<type> json结构体 审核类型,目前支持"pulp", "terror", "politician"
    result.scenes.<type>.suggestion string 该审核类型的结果管控建议,参见result.suggestion
    result.scenes.<type>.cuts[] array 该审核类型的截帧审核结果数组
    result.scenes.<type>.cuts[].suggestion string 该审核类型的截帧审核结果管控建议,参见result.suggestion
    result.scenes.<type>.cuts[].offset int 该审核类型的截帧的时间位置
    result.scenes.<type>.cuts[].uri string 该审核类型的截帧uri
    result.scenes.<type>.cuts[].details[] array 该审核类型的截帧审核详细信息数组
    result.scenes.<type>.cuts[].details[].suggestion string 该审核类型的截帧审核结果详细的结果管控建议,参见result.suggestion
    result.scenes.<type>.cuts[].details[].label string 该审核类型的截帧审核结果标签,具体请参见图片内容审核的label/group
    result.scenes.<type>.cuts[].details[].score string 该审核类型的截帧审核结果置信度
    result.scenes.politician.cuts[].details[].group string 该审核类型的截帧审核结果分组,具体请参见图片内容审核的label/group
    result.scenes.politician.cuts[].details[].sample.uri string 该敏感人物的参考图链接
    result.scenes.politician.cuts[].details[].sample.pts array 参考图中敏感人物的人脸方框坐标
    result.scenes.politician.cuts[].details[].detections[].pts array 截帧中检测到的敏感人物人方框坐标
    result.scenes.politician.cuts[].details[].detections[].score string 截帧中检测到的人脸匹配为敏感人物的置信度
    result.scenes.terror.cuts[].details[].detections[].pts array 当截帧审核结果label为以下五种时,该字段用于返回检测到的物体方框坐标:
    “illegal_flag:违规旗帜类”
    ”guns:枪”
    ”knives:刀”
    ”anime_knives:二次元刀”
    “anime_guns:二次元枪”
    result.scenes.terror.cuts[].details[].detections[].score string 截帧中检测到的物体置信度

    返回示例

    {
        "id":"5c416b7afb09fe00089e37be",
        "request":{
            ...
        },
        "status":"FINISHED",
        "result":{
            "code":200,
            "message":"OK",
            "result":{
                "suggestion":"pass",
                "scenes":{
                    "politician":{
                        "cuts":[
                            {
                                "offset":0,
                                "suggestion":"pass"
                            },
                            {
                                "offset":657,
                                "suggestion":"pass"
                            }
                        ],
                        "suggestion":"pass"
                    },
                    "pulp":{
                        "cuts":[
                            {
                                "details":[
                                    {
                                        "label":"normal",
                                        "score":0.99976,
                                        "suggestion":"pass"
                                    }
                                ],
                                "offset":0,
                                "suggestion":"pass"
                            },
                            {
                                "details":[
                                    {
                                        "label":"normal",
                                        "score":0.99998,
                                        "suggestion":"pass"
                                    }
                                ],
                                "offset":657,
                                "suggestion":"pass"
                            }
                        ],
                        "suggestion":"pass"
                    },
                    "terror":{
                        "cuts":[
                            {
                                "details":[
                                    {
                                        "label":"normal",
                                        "score":0.76111,
                                        "suggestion":"pass"
                                    }
                                ],
                                "offset":0,
                                "suggestion":"pass"
                            },
                            {
                                "details":[
                                    {
                                        "label":"normal",
                                        "score":0.52299,
                                        "suggestion":"pass"
                                    }
                                ],
                                "offset":657,
                                "suggestion":"pass"
                            }
                        ],
                        "suggestion":"pass"
                    }
                }
            }
        },
        "created_at":"2019-01-18T14:00:26.865+08:00",
        "updated_at":"2019-01-18T14:01:01.148+08:00",
        "rescheduled_at":"2019-01-18T14:00:26.865+08:00"
    }
    

    获取视频审核任务状态

    请求语法

    GET /v3/jobs/video?status=<string> HTTP/1.1
    Host: ai.qiniuapi.com
    Authorization: Qiniu <AccessKey>:<Sign>
    

    注意: 需要在请求的 head 部分添加七牛鉴权,以进行用户身份验证。

    参数 类型 必选 说明
    status string 任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED,RESCHEDULED是指等待重试中

    响应语法

    [
        {
            "id": <string>,
            "status": <string>,
            "created_at": <string>,
            "updated_at": <string>
        },
        ...
    ]
    
    参数 类型 说明
    id string 服务器返回的,唯一标识该视频任务的ID。
    status string 任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED,RESCHEDULED是指等待重试中。
    created_at string 任务创建时间,如:2019-01-02T15:03:04。
    updated_at string 任务更新时间,如:2019-01-02T15:03:04。

    代码示例

    注意

    • 运行方法:python VideoReview.py <censor | pulp | terror | politician> <uri>,得到job_id
    • 代码中需填入账号的 aksk

    视频内容审核(VideoReview.py)

    # -*- coding: utf-8 -*-
    from qiniu import Auth, QiniuMacAuth, http
    import requests, json, sys
    
    access_key = '<ak>'
    secret_key = '<sk>'
    
    auth = QiniuMacAuth(access_key, secret_key)
    
    url = 'http://ai.qiniuapi.com/v3/video/censor'
    
    body = {
        "data": {
            "uri": "<uri>"
        },
        "params": {
            "scenes":[],
            "cut_param": {
                "interval_msecs": 5000
            }
        }
    }
    
    ops = {
        "censor": ["pulp","terror","politician"],
        "pulp": ["pulp"],
        "terror": ["terror"],
        "politician": ["politician"],
    }
    
    body["params"]["scenes"] = ops[sys.argv[1]]
    body["data"]["uri"] = sys.argv[2]
    
    ret, res = http._post_with_qiniu_mac(url, body, auth)
    
    headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log}
    
    print json.dumps(headers, indent=4, ensure_ascii=False)
    print json.dumps(ret, indent=4, ensure_ascii=False)
    

    注意

    • 调用命令:python VideoReview.py.py censor https://mars-assets.qnssl.com/scene.mp4
    {
        "reqid": "lSQAAPpUdoS3roUV, lSQAAPpUdoS3roUV",
        "code": 200,
        "xlog": "COMMON-GATE:2;AI:2"
    }
    {
        "job": "5c6fe7f59a0b0500082b774f"
    }
    

    注意

    • 运行方法:python AsyncResult.py <job_id>,得到视频审核结果
    • 代码中需填入账号的 aksk

    通过job_id获取视频审核结果(AsyncResult.py)

    # -*- coding: utf-8 -*-
    from qiniu import Auth, QiniuMacAuth
    import requests, json, sys
    
    access_key = '<ak>'
    secret_key = '<sk>'
    
    auth = QiniuMacAuth(access_key, secret_key)
    
    url = 'http://ai.qiniuapi.com/v3/jobs/video/' + sys.argv[1]
    
    token = "Qiniu " + auth.token_of_request("GET", "ai.qiniuapi.com", url, "")
    
    r = requests.get(url, headers={'Authorization': token})
    print json.dumps(json.loads(r.text), indent=4, ensure_ascii=False)
    

    注意

    • 调用命令:python AsyncResult.py 5c6fe7f59a0b0500082b774f
    {
        "status": "FINISHED",
        "vid": "",
        "rescheduled_at": "2019-02-22T20:15:49.931+08:00",
        "created_at": "2019-02-22T20:15:49.931+08:00",
        "request": {
            "params": {
                "cut_param": {
                    "interval_msecs": 5000
                },
                "sync": false,
                "scenes": [
                    "pulp",
                    "terror",
                    "politician"
                ]
            },
            "data": {
                "uri": "https://mars-assets.qnssl.com/scene.mp4"
            }
        },
        "updated_at": "2019-02-22T20:15:52.426+08:00",
        "result": {
            "message": "OK",
            "code": 200,
            "result": {
                "scenes": {
                    "terror": {
                        "suggestion": "pass",
                        "cuts": [
                            {
                                "details": [
                                    {
                                        "score": 0.8864266,
                                        "suggestion": "pass",
                                        "label": "normal"
                                    }
                                ],
                                "suggestion": "pass",
                                "offset": 520
                            },
                            {
                                "details": [
                                    {
                                        "score": 0.99499327,
                                        "suggestion": "pass",
                                        "label": "normal"
                                    }
                                ],
                                "suggestion": "pass",
                                "offset": 5520
                            }
                        ]
                    },
                    "politician": {
                        "suggestion": "pass",
                        "cuts": [
                            {
                                "suggestion": "pass",
                                "offset": 520
                            },
                            {
                                "suggestion": "pass",
                                "offset": 5520
                            }
                        ]
                    },
                    "pulp": {
                        "suggestion": "pass",
                        "cuts": [
                            {
                                "details": [
                                    {
                                        "score": 0.6159534,
                                        "suggestion": "pass",
                                        "label": "normal"
                                    }
                                ],
                                "suggestion": "pass",
                                "offset": 520
                            },
                            {
                                "details": [
                                    {
                                        "score": 0.65406007,
                                        "suggestion": "pass",
                                        "label": "normal"
                                    }
                                ],
                                "suggestion": "pass",
                                "offset": 5520
                            }
                        ]
                    }
                },
                "suggestion": "pass"
            }
        },
        "id": "5c6fe7f59a0b0500082b774f"
    }
    

    服务价格

    视频内容审核是对视频截帧后,进行截帧图片内容审核,所以视频内容审核的价格实际使用的是截帧图片审核的价格,与图片内容审核共用范围。

    1)按照设置的截帧频率对视频进行截帧,不额外收费
    2)对截帧进行图片内容审核
    图片内容审核价格请参考

    示例:

    某月客户视频文件使用视频鉴黄服务,视频截帧的数量为400万,即视频鉴黄产生的图片鉴黄量为400万;当月图片文件使用鉴黄服务,其调用量为106万。则这个月总的图片鉴黄调用量为506万,账单金额则为:
    图片鉴黄:

    3000000*0.155/100+2000000*0.145/100=4650+2900=7550元

    以上内容是否对您有帮助?
  • Icon free helper
    Close