热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php七牛视频鉴黄,API调用视频鉴黄v1(不推荐)

视频鉴黄提供视频内容检测,识别视频中是否存在色情内容。支持存储在七牛云bucket(支持华东、华北和华南bucket)或非七牛云bucket中的视频进行视频鉴黄。支持

视频鉴黄提供视频内容检测,识别视频中是否存在色情内容。

支持存储在七牛云 bucket(支持华东、华北和华南 bucket)或 非七牛云 bucket 中的视频进行视频鉴黄。

支持实时处理和异步处理两种方式:实时处理时,视频鉴黄结果会在识别完成后立即返回;异步处理时,会立即返回job_id,视频鉴黄结果通过job_id获得。

视频鉴黄结果会返回所有视频片段是属于色情、性感、还是正常的识别结果。同时为了让用户知道一个视频整体的分类,返回的结果会包含视频片段中出现过的分类,并显示属于这个分类的视频片段的最高的置信度。

可以通过设置请求参数,仅返回满足客户需求的视频片段(例如:用户仅需要返回色情的视频片段,以便对这部分内容做人工审核)。

支持一次调用同时请求鉴黄、鉴暴恐、敏感人物识别。请查看文档中三鉴(鉴黄、鉴暴恐和敏感人物识别)同时调用的示例。

视频片段segments:视频鉴黄是把视频截帧后,对截帧图片进行鉴黄。当连续帧推理结果一致时,表示这些帧都属于同一种类型,则把这一时段的视频认为是一个视频片段。

请求语法

POST /v1/video/

Host: ai.qiniuapi.com

Content-Type: application/json

Authorization: Qiniu :

{

"data": {

"uri": "http://www.qiniu.com/video.mp4"

},

"params": {

"async": ,

"vframe": {

"mode": ,

"interval":

},

"save": {

"bucket": ,

"prefix":

},

"hookURL": "http://yy.com/yyy"

},

"ops": [

{

"op": ,

"params": {

"labels": [

{

"label": ,

"select": ,

"score":

},

...

]

}

},

...

]

}

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

参数

类型

必选

说明

vid

string

调用者设置的视频唯一标识,异步处理的返回结果中会带上该信息

data.uri

string

视频地址

params.async

boolean

true是异步处理,false是同步处理,不填则取默认值false

params.vframe.mode

int

截帧逻辑,可选值为[0, 1]。0表示每隔固定时间截一帧,固定时间在vframe.interval中设定;1表示截关键帧。不填表示取默认值1。

params.vframe.interval

int

当params.vframe.mode取0时,用来设置每隔多长时间截一帧,单位s, 取值范围为1~60,不填则取默认值5s

params.save.bucket

string

保存截帧图片的Bucket名称,目前只支持华东的bucket。如何创建七牛云bucket,请参见文档。

params.save.prefix

string

截帧图片名称的前缀,图片名称的格式为// (图片命名格式仅供参考,业务请不要依赖此命名格式)

params.hookURL

string

视频检测结束后的回调地址

ops.op

string

视频检测执行的命令,支持多种视频检测操作。目前,视频鉴黄的命令就是pulp。

ops.op.params.labels.label

string

对某个命令返回label进行过滤,必须与ops.op.params.labels.select、ops.op.params.labels.score一起使用。例如,视频鉴黄的命令pulp的label有0色情, 1性感, 2正常。如果设置为label=0和select=2,则返回结果中只返回label=0的片段。注:score 越高,说明属于这一个分类(label)的概率越高。比如色情、性感、正常的label,正常这个label对应的score最高,则说明图片最有可能是正常的。

ops.op.params.labels.select

int

对ops.op.params.labels.label中设置的label,设置过滤条件,1表示忽略不选,2表示只选该类别。

ops.op.params.labels.score

float

过滤返回label结果的置信度参数,当ops.op.params.labels.select=1时表示忽略不选小于该设置的结果,当select=2时表示只选大于等于该设置的结果

响应语法

返回结果按照请求参数params.async分为两种:

params.async == false:实时处理请求,视频鉴黄完成后就返回结果

HTTP/1.1 200 OK

Content-Type: application/json

{

: {

"labels": [

{

"label": ,

"score":

},

...

],

"segments": [

{

"offset_begin": ,

"offset_end": ,

"labels": [

{

"label": ,

"score":

},

...

],

"cuts": [

{

"offset": ,

"uri": ,

"result": {}

},

...

]

},

...

]

}

}参数

类型

说明

op

string

视频检测命令

op.labels.label

string

视频维度的标签,与op.lables.score 成对返回。例如,某个视频进行视频鉴黄处理,视频片断中有若干个标签为0色情和1性感的结果,那么就表示这个视频有0色情和1性感两类标签。

op.lables.score

float

显示的是op.labels.label这类标签的置信度。这个值取的是该视频中属于这类的所有视频片断的置信度的最大值。

op.segments.offset_begin

int

视频片段起始的时间位置。

op.segments.offset_end

int

视频片段结束的时间位置。

op.segments.labels.label

string

视频片断所属的标签,一个视频片断只会有一个标签。

op.segments.labels.score

float

视频片断所属标签的置信度。这个值取的是该视频片断中所有帧的置信度的最大值。

op.segments.cuts.offset

int

视频截帧的时间位置

op.segments.cuts.uri

string

视频截帧的保存路径

op.segments.cuts.result

interface

视频截帧得到的图片的检测标签,结果与具体的命令有关。例如,视频鉴黄的命令pulp的标签有0色情, 1性感, 2正常。

params.async == true:异步处理请求,立即返回job_id

HTTP/1.1 200 OK

Content-Type: application/json

{

"job":

}参数

类型

必选

说明

job_id

string

服务器返回的,唯一标识该视频任务的ID。

异步处理的结果

异步处理后,获取单个视频鉴黄的结果

请求语法

GET /v1/jobs/video/ HTTP/1.1

Host: ai.qiniuapi.com

Authorization: Qiniu :

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

参数

类型

必选

说明

job_id

string

服务器返回的,唯一标识该视频任务的ID。

响应语法

{

"id": ,

"vid": ,

"request": {},

"status": ,

"result": {

: {

},

...

},

"error": ,

"created_at": ,

"updated_at":

}参数

类型

说明

id

string

服务器返回的,唯一标识该视频任务的ID

vid

string

视频唯一标识,申请任务时传入的vid

request

object

视频分析请求

status

string

任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED,RESCHEDULED是指等待重试中

result

object

详细解释见实时处理请求返回结果

error

string

处理视频的过程中遇到的错误,会返回相应的错误信息,详细解释见错误代码含义

created_at

string

任务创建时间,like: 2006-01-02T15:03:04

updated_at

string

任务更新时间,like: 2006-01-02T15:03:04

错误代码含义

Error Code

Error Message

Desc

400

"bad op"

输入的op值不支持

400

"invalid interval, allow mode is [0, 10]"

输入的vframe的interval值不在[0-10]的范围

400

"invalid mode, allow mode is [0, 1]"

输入的vframe的mode值不在[0-1]的范围

424

"cannot find the video"

找不到输入的视频文件

400

"cannot open the file"

打不开输入的视频文件

500

"cannot allow memory"

发生内存不足等情况

异步处理时,获取视频处理任务状态

请求语法

GET /v1/jobs/video?status= HTTP/1.1

Host: ai.qiniuapi.com

Authorization: Qiniu :

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

参数

类型

必选

说明

status

string

任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED,RESCHEDULED是指等待重试中

响应语法

[

{

"id": ,

"status": ,

"created_at": ,

"updated_at":

},

...

]参数

类型

说明

id

string

服务器返回的,唯一标识该视频任务的ID

status

string

任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED,RESCHEDULED是指等待重试中

created_at

string

任务创建时间,like: 2006-01-02T15:03:04

updated_at

string

任务更新时间,like: 2006-01-02T15:03:04

视频处理的结果回调

所有op处理结束后的结果回调CALLBACK /v1/video/result

请求语法

POST /xxxxx HTTP/1.1

Content-Type: application/json

{

"id": ,

"result": {

: {

},

...

}

}参数

类型

说明

id

string

调用者设置的视频唯一标识

result

object

详细解释见实时处理请求返回结果

请求示例

{

"data": {

"uri": "http://foo.com/foo.mp4"

},

"params": {

"vframe": {

"interval": 5

}

},

"ops": [

{

"op": "pulp",

}

]

}

返回示例

{

"pulp": {

"labels": [{

"label": "2",

"score": 0.9991879

}, {

"label": "0",

"score": 0.49774298

}],

"segments": [{

"offset_begin": 0,

"offset_end": 2233,

"labels": [{

"label": "2",

"score": 0.99896765

}],

"cuts": [{

"offset": 0,

"result": {

"label": 2,

"score": 0.99896765,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99896765

}, {

"index": 1,

"class": "sexy",

"score": 0.000120945006

}, {

"index": 0,

"class": "pulp",

"score": 0.000070455964

}]

}

}, {

"offset": 2233,

"result": {

"label": 2,

"score": 0.99812955,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99812955

}, {

"index": 0,

"class": "pulp",

"score": 0.00028895753

}, {

"index": 1,

"class": "sexy",

"score": 0.00005779577

}]

}

}]

}, {

"offset_begin": 5300,

"offset_end": 5300,

"labels": [{

"label": "0",

"score": 0.49774298

}],

"cuts": [{

"offset": 5300,

"result": {

"label": 0,

"score": 0.49774298,

"review": true,

"confidences": [{

"index": 0,

"class": "pulp",

"score": 0.49774298

}, {

"index": 2,

"class": "normal",

"score": 0.14850456

}, {

"index": 1,

"class": "sexy",

"score": 0.027909799

}]

}

}]

}, {

"offset_begin": 10800,

"offset_end": 37800,

"labels": [{

"label": "2",

"score": 0.9991879

}],

"cuts": [{

"offset": 10800,

"result": {

"label": 2,

"score": 0.9991879,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.9991879

}, {

"index": 1,

"class": "sexy",

"score": 0.00008958933

}, {

"index": 0,

"class": "pulp",

"score": 0.000060963135

}]

}

}, {

"offset": 11666,

"result": {

"label": 2,

"score": 0.99494386,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99494386

}, {

"index": 0,

"class": "pulp",

"score": 0.00061269634

}, {

"index": 1,

"class": "sexy",

"score": 0.00032472512

}]

}

}, {

"offset": 17466,

"result": {

"label": 2,

"score": 0.9978196,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.9978196

}, {

"index": 1,

"class": "sexy",

"score": 0.00024165121

}, {

"index": 0,

"class": "pulp",

"score": 0.00016254994

}]

}

}, {

"offset": 23133,

"result": {

"label": 2,

"score": 0.99635637,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99635637

}, {

"index": 1,

"class": "sexy",

"score": 0.00047670802

}, {

"index": 0,

"class": "pulp",

"score": 0.00019879821

}]

}

}, {

"offset": 26600,

"result": {

"label": 2,

"score": 0.98734176,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.98734176

}, {

"index": 1,

"class": "sexy",

"score": 0.002269196

}, {

"index": 0,

"class": "pulp",

"score": 0.00007761171

}]

}

}, {

"offset": 31999,

"result": {

"label": 2,

"score": 0.99583465,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99583465

}, {

"index": 1,

"class": "sexy",

"score": 0.00071806915

}, {

"index": 0,

"class": "pulp",

"score": 0.0000541617

}]

}

}, {

"offset": 37800,

"result": {

"label": 2,

"score": 0.99828905,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99828905

}, {

"index": 1,

"class": "sexy",

"score": 0.00028825115

}, {

"index": 0,

"class": "pulp",

"score": 0.000028989076

}]

}

}]

}]

}

}

三鉴同时调用的示例

{

"data": {

"uri": "http://os4v3rzk2.bkt.clouddn.com/20180901184507plUL4y.mp4"

},

"params": {

"vframe": {

"interval": 5

}

},

"ops": [

{

"op": "pulp"

},

{

"op": "terror"

},

{

"op": "politician"

}

]

}

三鉴同时调用的返回示例

{

"politician": {

"segments": null

},

"pulp": {

"labels": [{

"label": "2",

"score": 0.9991879

}, {

"label": "0",

"score": 0.49775043

}],

"segments": [{

"offset_begin": 0,

"offset_end": 2233,

"labels": [{

"label": "2",

"score": 0.99896765

}],

"cuts": [{

"offset": 0,

"result": {

"label": 2,

"score": 0.99896765,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99896765

}, {

"index": 1,

"class": "sexy",

"score": 0.000120948236

}, {

"index": 0,

"class": "pulp",

"score": 0.00007045435

}]

}

}, {

"offset": 2233,

"result": {

"label": 2,

"score": 0.99812955,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99812955

}, {

"index": 0,

"class": "pulp",

"score": 0.00028895302

}, {

"index": 1,

"class": "sexy",

"score": 0.000057794834

}]

}

}]

}, {

"offset_begin": 5300,

"offset_end": 5300,

"labels": [{

"label": "0",

"score": 0.49775043

}],

"cuts": [{

"offset": 5300,

"result": {

"label": 0,

"score": 0.49775043,

"review": true,

"confidences": [{

"index": 0,

"class": "pulp",

"score": 0.49775043

}, {

"index": 2,

"class": "normal",

"score": 0.14849894

}, {

"index": 1,

"class": "sexy",

"score": 0.027908035

}]

}

}]

}, {

"offset_begin": 10800,

"offset_end": 37800,

"labels": [{

"label": "2",

"score": 0.9991879

}],

"cuts": [{

"offset": 10800,

"result": {

"label": 2,

"score": 0.9991879,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.9991879

}, {

"index": 1,

"class": "sexy",

"score": 0.00008958942

}, {

"index": 0,

"class": "pulp",

"score": 0.000060963186

}]

}

}, {

"offset": 11666,

"result": {

"label": 2,

"score": 0.99494386,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99494386

}, {

"index": 0,

"class": "pulp",

"score": 0.00061269663

}, {

"index": 1,

"class": "sexy",

"score": 0.00032472447

}]

}

}, {

"offset": 17466,

"result": {

"label": 2,

"score": 0.9978196,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.9978196

}, {

"index": 1,

"class": "sexy",

"score": 0.00024165121

}, {

"index": 0,

"class": "pulp",

"score": 0.00016254994

}]

}

}, {

"offset": 23133,

"result": {

"label": 2,

"score": 0.99635637,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99635637

}, {

"index": 1,

"class": "sexy",

"score": 0.00047670802

}, {

"index": 0,

"class": "pulp",

"score": 0.00019879821

}]

}

}, {

"offset": 26600,

"result": {

"label": 2,

"score": 0.9873413,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.9873413

}, {

"index": 1,

"class": "sexy",

"score": 0.002269225

}, {

"index": 0,

"class": "pulp",

"score": 0.000077612145

}]

}

}, {

"offset": 31999,

"result": {

"label": 2,

"score": 0.99583465,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99583465

}, {

"index": 1,

"class": "sexy",

"score": 0.00071806915

}, {

"index": 0,

"class": "pulp",

"score": 0.0000541617

}]

}

}, {

"offset": 37800,

"result": {

"label": 2,

"score": 0.99828905,

"review": false,

"confidences": [{

"index": 2,

"class": "normal",

"score": 0.99828905

}, {

"index": 1,

"class": "sexy",

"score": 0.00028824853

}, {

"index": 0,

"class": "pulp",

"score": 0.00002898877

}]

}

}]

}]

},

"terror": {

"labels": [{

"label": "0",

"score": 0.99663216

}, {

"label": "1",

"score": 0.946602

}],

"segments": [{

"offset_begin": 0,

"offset_end": 0,

"labels": [{

"label": "0",

"score": 0.9935556

}],

"cuts": [{

"offset": 0,

"result": {

"label": 0,

"score": 0.9935556,

"review": false

}

}]

}, {

"offset_begin": 2233,

"offset_end": 2233,

"labels": [{

"label": "1",

"score": 0.946602

}],

"cuts": [{

"offset": 2233,

"result": {

"label": 1,

"score": 0.946602,

"review": false

}

}]

}, {

"offset_begin": 5300,

"offset_end": 37800,

"labels": [{

"label": "0",

"score": 0.99663216

}],

"cuts": [{

"offset": 5300,

"result": {

"label": 0,

"score": 0.83630264,

"review": false

}

}, {

"offset": 10800,

"result": {

"label": 0,

"score": 0.5058211,

"review": false

}

}, {

"offset": 11666,

"result": {

"label": 0,

"score": 0.99561405,

"review": false

}

}, {

"offset": 17466,

"result": {

"label": 0,

"score": 0.99663216,

"review": false

}

}, {

"offset": 23133,

"result": {

"label": 0,

"score": 0.95209014,

"review": false

}

}, {

"offset": 26600,

"result": {

"label": 0,

"score": 0.18816724,

"review": false

}

}, {

"offset": 31999,

"result": {

"label": 0,

"score": 0.86865,

"review": false

}

}, {

"offset": 37800,

"result": {

"label": 0,

"score": 0.97071385,

"review": false

}

}]

}]

}

}

价格

视频鉴黄的工作流程如下:

1)按照API里面的设置对视频进行截帧,不额外收费

2)对截帧进行图片鉴黄

所以,视频鉴黄的价格最终还是图片鉴黄的价格,具体价格请参考。

服务价格

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

例:

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

图片鉴黄:

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



推荐阅读
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了福昕软件公司开发的Foxit PDF SDK ActiveX控件(版本5.20),并提供了关于其在64位Windows 7系统和Visual Studio 2013环境下的使用方法。该控件文件名为FoxitPDFSDKActiveX520_Std_x64.ocx,适用于集成PDF功能到应用程序中。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
author-avatar
丁志翔64164
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有