tencent cloud

数据万象

动态与公告
产品动态
产品公告
产品简介
产品概述
产品优势
应用场景
功能概览
地域与域名
使用限制
产品计费
计费概述
计费方式
计费项
免费额度
欠费说明
查看消费明细
常见问题
快速入门
注册与登录
绑定存储桶
上传和处理文件
下载和删除文件
解绑存储桶
通过 COS 使用数据万象
能力地图
图片处理
媒体处理
内容审核
AI 内容识别
文档处理
智能语音
文件处理
用户指南
概览
存储桶管理
智能工具箱
任务与工作流
数据监控
用量统计
实践教程
版权保护解决方案
图片处理实践
API 授权策略使用指引
工作流实践
API 文档
API 概览
结构体
公共请求头部
公共响应头部
开通万象服务
图片处理
AI 内容识别
智能语音
媒体处理
内容审核
文档处理
文件处理
任务与工作流
云查毒
错误码
请求签名
SDK 文档
SDK 概览
图片处理 Android SDK
图片处理 iOS SDK
COS Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Go SDK
COS iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
小程序 SDK
SDK 产品个人信息保护规则
安全与合规
权限管理
常见问题
基础设置
文档处理
媒体处理
内容识别
智能语音
服务协议
Service Level Agreement
联系我们
词汇表

视频审核

PDF
聚焦模式
字号
最后更新时间: 2024-03-13 15:17:11

简介

内容审核功能是由 数据万象(Cloud Infinite,CI)提供的,数据万象将处理能力与 COS SDK 完全结合,您可以直接按照本篇文档指引进行使用。
说明:
使用内容审核服务需拥有数据万象使用权限:
主账号请 单击此处 进行角色授权。
子账号请参见 授权子账号接入数据万象服务 文档。
本文档提供关于视频审核的 API 概览和 SDK 示例代码。
API
操作描述
用于提交一个视频审核任务
用于查询指定的视频审核任务

提交视频审核任务

功能说明

用于提交一个视频审核任务。

方法原型

cos_status_t *ci_create_video_auditing_job(const cos_request_options_t *options,
const cos_string_t *bucket,
const ci_video_auditing_job_options_t *job_options,
cos_table_t *headers,
cos_table_t **resp_headers,
ci_video_auditing_job_result_t **job_result);

参数说明

参数名称
参数描述
类型
options
COS 请求选项
Struct
bucket
存储桶名称,Bucket 的命名规则为 BucketName-APPID ,此处填写的存储桶名称必须为此格式
String
job_options
提交视频审核任务的参数配置
Struct
input_object
对象名
String
detect_type
审核的场景类型,有效值:Porn(涉黄)、Ads(广告),可以传入多种类型,不同类型以逗号分隔,例如:Porn,Ads
String
callback
回调地址,以http://或者https://开头的地址
String
callback_version
回调内容的结构,有效值:Simple(回调内容包含基本信息)、Detail(回调内容包含详细信息)。默认为 Simple
String
biz_type
审核策略,不带审核策略时使用默认策略
String
detect_content
用于指定是否审核视频声音,当值为0时:表示只审核视频画面截图;值为1时:表示同时审核视频画面截图和视频声音。默认值为0
Integer
snapshot
视频画面的审核通过视频截帧能力截取出一定量的截图,通过对截图逐一审核而实现的,该参数用于指定视频截帧的配置
Struct
mode
截帧模式。Interval 表示间隔模式,Average 表示平均模式,Fps 表示固定帧率模式。
Interval 模式:TimeInterval,Count 参数生效。当设置 Count,未设置 TimeInterval 时,表示截取所有帧,共 Count 张图片
Average 模式:Count 参数生效。表示整个视频,按平均间隔截取共 Count 张图片
Fps 模式:TimeInterval 表示每秒截取多少帧,Count 表示共截取多少帧
String
count
视频截帧数量,范围为(0, 10000]
Integer
time_interval
视频截帧频率,范围为(0, 60],单位为秒,支持 float 格式,执行精度精确到毫秒
Float
headers
COS 请求附加头域
Struct
resp_headers
返回 HTTP 响应消息的头域
Struct
job_result
返回提交任务的响应信息
Struct
job_id
本次视频审核任务的 ID
String
state
视频审核任务的状态,值为 Submitted(已提交审核)、Snapshoting(视频截帧中)、Success(审核成功)、Failed(审核失败)、Auditing(审核中)其中一个
String
creation_time
视频审核任务的创建时间
String

返回结果说明

返回结果
描述
类型
code
错误码
Int
error_code
错误码内容
String
error_msg
错误码描述
String
req_id
请求消息 ID
String

示例

完整代码请参见 cos_demo.c 中的 test_ci_video_auditing() 函数。
#include "cos_http_io.h"
#include "cos_api.h"
#include "cos_log.h"
#include <sys/stat.h>

// 数据万象的访问域名,详情请参见 https://www.tencentcloud.com/document/product/1045/33423 文档
static char TEST_CI_ENDPOINT[] = "https://ci.ap-guangzhou.myqcloud.com";
// 开发者拥有的项目身份ID/密钥,可在 https://console.tencentcloud.com/cam/capi 页面获取
static char *TEST_ACCESS_KEY_ID; //your secret_id
static char *TEST_ACCESS_KEY_SECRET; //your secret_key
// 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 https://console.tencentcloud.com/cam/capi 页面获取
static char TEST_APPID[] = "<APPID>"; //your appid
//the cos bucket name, syntax: [bucket]-[appid], for example: mybucket-1253666666,可在 https://console.tencentcloud.com/cos5/bucket 查看
static char TEST_BUCKET_NAME[] = "<bucketname-appid>";

void log_status(cos_status_t *s)
{
cos_warn_log("status->code: %d", s->code);
if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
}

static void log_video_auditing_result(ci_video_auditing_job_result_t *result)
{
cos_warn_log("jobid: %s", result->jobs_detail.job_id.data);
cos_warn_log("state: %s", result->jobs_detail.state.data);
cos_warn_log("creation_time: %s", result->jobs_detail.creation_time.data);
}

void test_ci_create_video_auditing()
{
cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers;
ci_video_auditing_job_options_t *job_options;
ci_video_auditing_job_result_t *job_result;

// 基本配置
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
cos_str_set(&options->config->endpoint, TEST_CI_ENDPOINT); // https://ci.<Region>.myqcloud.com
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

// 替换为您的配置信息,可参见文档 https://www.tencentcloud.com/document/product/436/48249
job_options = ci_video_auditing_job_options_create(p);
cos_str_set(&job_options->input_object, "test.mp4");
cos_str_set(&job_options->job_conf.detect_type, "Porn,Ads");
cos_str_set(&job_options->job_conf.callback_version, "Detail");
job_options->job_conf.detect_content = 1;
cos_str_set(&job_options->job_conf.snapshot.mode, "Interval");
job_options->job_conf.snapshot.time_interval = 1.5;
job_options->job_conf.snapshot.count = 10;

// 提交一个视频审核任务
s = ci_create_video_auditing_job(options, &bucket, job_options, NULL, &resp_headers, &job_result);
log_status(s);
if (s->code == 200) {
log_video_auditing_result(job_result);
}

// 销毁内存池
cos_pool_destroy(p);
}

int main(int argc, char *argv[])
{
// 通过环境变量获取 SECRETID 和 SECRETKEY
TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");

if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}

//set log level, default COS_LOG_WARN
cos_log_set_level(COS_LOG_WARN);

//set log output, default stderr
cos_log_set_output(NULL);

test_ci_create_video_auditing();

cos_http_io_deinitialize();

return 0;
}

查询视频审核任务

功能说明

用于查询视频审核任务执行情况和结果。

方法原型

cos_status_t *ci_get_auditing_job(const cos_request_options_t *options,
const cos_string_t *bucket,
const cos_string_t *job_id,
cos_table_t *headers,
cos_table_t **resp_headers,
ci_auditing_job_result_t **job_result);

参数说明

参数名称
参数描述
类型
options
COS 请求选项
Struct
bucket
存储桶名称,Bucket 的命名规则为 BucketName-APPID ,此处填写的存储桶名称必须为此格式
String
job_id
本次视频审核任务的 ID
String
headers
COS 请求附加头域
Struct
resp_headers
返回 HTTP 响应消息的头域
Struct
job_result
返回查询任务的响应信息
Struct
nonexist_job_ids
查询的 ID 中不存在任务,所有任务都存在时不返回
String
jobs_detail
视频审核任务的详细信息
Struct
code
错误码,只有 State为 Failed 时有意义
String
message
错误描述,只有 State 为 Failed 时有意义
String
job_id
视频审核任务的 ID
String
state
视频审核任务的状态,值为 Submitted(已提交审核)、Snapshoting(视频截帧中)、Success(审核成功)、Failed(审核失败)、Auditing(审核中)其中一个
String
creation_time
视频审核任务的创建时间
String
object
被审核的视频文件的名称
String
snapshot_count
视频截图的总数量
String
result
该字段表示本次判定的审核结果,您可以根据该结果,进行后续的操作;建议您按照业务所需,对不同的审核结果进行相应处理。有效值:0(审核正常),1 (判定为违规敏感文件),2(疑似敏感,建议人工复核)
Integer
porn_info
审核场景为涉黄的审核结果信息
Struct
ads_info
审核场景为广告引导的审核结果信息
Struct
hit_flag
是否命中该审核分类,0表示未命中,1表示命中,2表示疑似
Integer
count
命中该审核分类的截图张数
Integer
snapshot_info_list
该字段用于返回视频中视频画面截图审核的结果。注意:每次查看数据的有效期为2小时,2小时后如需查看,请重新发起查询请求
Struct
audio_section_info_list
字段用于返回视频中视频声音审核的结果。注意:每次查看数据的有效期为2小时,2小时后如需查看,请重新发起查询请求
Struct

snapshot_info_list 所对应的结构体说明

参数名称
参数描述
类型
url
视频截图的访问地址,您可以通过该地址查看该截图内容,地址格式为标准 URL 格式
String
snapshot_time
该字段用于返回当前截图位于视频中的时间,单位为毫秒。例如5000(视频开始后5000毫秒)
Integer
text
本该字段用于返回当前截图的图片 OCR 文本识别的检测结果(仅在审核策略开启文本内容检测时返回),识别上限为5000字节
String
porn_info
审核场景为涉黄的审核结果信息
Struct
ads_info
审核场景为广告引导的审核结果信息
Struct
hit_flag
是否命中该审核分类,0表示未命中,1表示命中,2表示疑似
Integer
score
该字段表示审核结果命中审核信息的置信度,取值范围:0(置信度最低)-100(置信度最高 ),越高代表该内容越有可能属于当前返回审核信息。例如:色情 99,则表明该内容非常有可能属于色情内容
Integer
label
该字段为兼容旧版本的保留字段,表示该截图的结果标签(可能为 SubLabel,可能为人物名字等)
String
sub_lable
该字段表示审核命中的具体子标签,例如:Porn 下的 SexBehavior 子标签。注意:该字段可能返回空,表示未命中具体的子标签
String

audio_section_info_list 所对应的结构体说明

参数名称
参数描述
类型
url
视频声音片段的访问地址,您可以通过该地址获取该声音片段的内容,地址格式为标准 URL 格式
String
text
该字段用于返回当前视频声音的 ASR 文本识别的检测结果(仅在审核策略开启文本内容检测时返回),识别上限为5小时
String
offset_time
视该字段用于返回当前声音片段位于视频中的时间,单位为毫秒,例如5000(视频开始后5000毫秒)
Integer
duration
当前视频声音片段的时长,单位毫秒
Integer
porn_info
审核场景为涉黄的审核结果信息
Struct
ads_info
审核场景为广告引导的审核结果信息
Struct
hit_flag
是否命中该审核分类,0表示未命中,1表示命中,2表示疑似
Integer
score
该字段表示审核结果命中审核信息的置信度,取值范围:0(置信度最低)-100(置信度最高 ),越高代表该内容越有可能属于当前返回审核信息。例如:色情 99,则表明该内容非常有可能属于色情内容
Integer
key_words
在当前审核场景下命中的关键词
String

返回结果说明

返回结果
描述
类型
code
错误码
Int
error_code
错误码内容
String
error_msg
错误码描述
String
req_id
请求消息 ID
String

示例

完整代码请参见 cos_demo.c 中的 test_ci_video_auditing() 函数。
#include "cos_http_io.h"
#include "cos_api.h"
#include "cos_log.h"
#include <unistd.h>

// 数据万象的访问域名,详情请参见 https://www.tencentcloud.com/document/product/1045/33423 文档
static char TEST_CI_ENDPOINT[] = "https://ci.ap-guangzhou.myqcloud.com";
// 开发者拥有的项目身份ID/密钥,可在 https://console.tencentcloud.com/cam/capi 页面获取
static char *TEST_ACCESS_KEY_ID; //your secret_id
static char *TEST_ACCESS_KEY_SECRET; //your secret_key
// 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 https://console.tencentcloud.com/cam/capi 页面获取
static char TEST_APPID[] = "<APPID>"; //your appid
//the cos bucket name, syntax: [bucket]-[appid], for example: mybucket-1253666666,可在 https://console.tencentcloud.com/cos5/bucket 查看
static char TEST_BUCKET_NAME[] = "<bucketname-appid>";

void log_status(cos_status_t *s)
{
cos_warn_log("status->code: %d", s->code);
if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
}

static void log_get_auditing_result(ci_auditing_job_result_t *result)
{
int index = 0;
ci_auditing_snapshot_result_t *snapshot_info;
ci_auditing_audio_section_result_t *audio_section_info;

cos_warn_log("nonexist_job_ids: %s", result->nonexist_job_ids.data);
cos_warn_log("code: %s", result->jobs_detail.code.data);
cos_warn_log("message: %s", result->jobs_detail.message.data);
cos_warn_log("state: %s", result->jobs_detail.state.data);
cos_warn_log("creation_time: %s", result->jobs_detail.creation_time.data);
cos_warn_log("object: %s", result->jobs_detail.object.data);
cos_warn_log("snapshot_count: %s", result->jobs_detail.snapshot_count.data);
cos_warn_log("result: %d", result->jobs_detail.result);

cos_warn_log("porn_info.hit_flag: %d", result->jobs_detail.porn_info.hit_flag);
cos_warn_log("porn_info.count: %d", result->jobs_detail.porn_info.count);
cos_warn_log("ads_info.hit_flag: %d", result->jobs_detail.ads_info.hit_flag);
cos_warn_log("ads_info.count: %d", result->jobs_detail.ads_info.count);

cos_list_for_each_entry(ci_auditing_snapshot_result_t, snapshot_info, &result->jobs_detail.snapshot_info_list, node) {
cos_warn_log("snapshot index:%d", ++index);
cos_warn_log("snapshot_info->url: %s", snapshot_info->url.data);
cos_warn_log("snapshot_info->snapshot_time: %d", snapshot_info->snapshot_time);
cos_warn_log("snapshot_info->text: %s", snapshot_info->text.data);

cos_warn_log("snapshot_info->porn_info.hit_flag: %d", snapshot_info->porn_info.hit_flag);
cos_warn_log("snapshot_info->porn_info.score: %d", snapshot_info->porn_info.score);
cos_warn_log("snapshot_info->porn_info.label: %s", snapshot_info->porn_info.label.data);
cos_warn_log("snapshot_info->porn_info.sub_lable: %s", snapshot_info->porn_info.sub_lable.data);
cos_warn_log("snapshot_info->ads_info.hit_flag: %d", snapshot_info->ads_info.hit_flag);
cos_warn_log("snapshot_info->ads_info.score: %d", snapshot_info->ads_info.score);
cos_warn_log("snapshot_info->ads_info.label: %s", snapshot_info->ads_info.label.data);
cos_warn_log("snapshot_info->ads_info.sub_lable: %s", snapshot_info->ads_info.sub_lable.data);
}

index = 0;
cos_list_for_each_entry(ci_auditing_audio_section_result_t, audio_section_info, &result->jobs_detail.audio_section_info_list, node) {
cos_warn_log("audio_section index:%d", ++index);
cos_warn_log("audio_section_info->url: %s", audio_section_info->url.data);
cos_warn_log("audio_section_info->text: %s", audio_section_info->text.data);
cos_warn_log("audio_section_info->offset_time: %d", audio_section_info->offset_time);
cos_warn_log("audio_section_info->duration: %d", audio_section_info->duration);

cos_warn_log("audio_section_info->porn_info.hit_flag: %d", audio_section_info->porn_info.hit_flag);
cos_warn_log("audio_section_info->porn_info.score: %d", audio_section_info->porn_info.score);
cos_warn_log("audio_section_info->porn_info.key_words: %s", audio_section_info->porn_info.key_words.data);
cos_warn_log("audio_section_info->ads_info.hit_flag: %d", audio_section_info->ads_info.hit_flag);
cos_warn_log("audio_section_info->ads_info.score: %d", audio_section_info->ads_info.score);
cos_warn_log("audio_section_info->ads_info.key_words: %s", audio_section_info->ads_info.key_words.data);
}
}

void test_ci_get_video_auditing()
{
cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers;
ci_video_auditing_job_options_t *job_options;
ci_video_auditing_job_result_t *job_result;
ci_auditing_job_result_t *auditing_result;

// 基本配置
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
cos_str_set(&options->config->endpoint, TEST_CI_ENDPOINT); // https://ci.<Region>.myqcloud.com
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

// 替换为您的配置信息,可参见文档 https://www.tencentcloud.com/document/product/436/48249
job_options = ci_video_auditing_job_options_create(p);
cos_str_set(&job_options->input_object, "test.mp4");
cos_str_set(&job_options->job_conf.detect_type, "Porn,Ads");
cos_str_set(&job_options->job_conf.callback_version, "Detail");
job_options->job_conf.detect_content = 1;
cos_str_set(&job_options->job_conf.snapshot.mode, "Interval");
job_options->job_conf.snapshot.time_interval = 1.5;
job_options->job_conf.snapshot.count = 10;

// 提交一个视频审核任务
s = ci_create_video_auditing_job(options, &bucket, job_options, NULL, &resp_headers, &job_result);
log_status(s);

// 等待视频审核任务完成,此处可修改您的等待时间
sleep(300);

// 获取审核任务结果
s = ci_get_auditing_job(options, &bucket, &job_result->jobs_detail.job_id, NULL, &resp_headers, &auditing_result);
log_status(s);
if (s->code == 200) {
log_get_auditing_result(auditing_result);
}

// 销毁内存池
cos_pool_destroy(p);
}

int main(int argc, char *argv[])
{
// 通过环境变量获取 SECRETID 和 SECRETKEY
TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");

if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}

//set log level, default COS_LOG_WARN
cos_log_set_level(COS_LOG_WARN);

//set log output, default stderr
cos_log_set_output(NULL);

test_ci_get_video_auditing();

cos_http_io_deinitialize();

return 0;
}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈