本文介绍了如何使用.NET SDK视频审核接口,检测视频中是否包含风险内容。
功能描述
前提条件
(推荐)提交视频异步检测任务
接口 | 描述 | 支持的地域 |
VideoAsyncScanRequest | 提交视频异步检测任务,对视频进行多个风险场景的识别,包括色情、暴恐涉政、广告 、不良场景、Logo(商标台标)识别。 |
|
示例代码
提交视频URL进行检测
using System; using Newtonsoft.Json; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Http; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Green.Model.V20180509; using System.Collections.Generic; namespace csharp_sdk_sample { class Program { static void Main(string[] args) { /** * 常见获取环境变量方式: * 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"); * 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ DefaultProfile profile = DefaultProfile.GetProfile( "cn-shanghai", "建议从环境变量中获取RAM用户AccessKey ID", "建议从环境变量中获取RAM用户AccessKey Secret"); // 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。 DefaultAcsClient client = new DefaultAcsClient(profile); VideoAsyncScanRequest request = new VideoAsyncScanRequest(); request.AcceptFormat = FormatType.JSON; request.ContentType = FormatType.JSON; request.Method = MethodType.POST; request.Encoding = "UTF-8"; Dictionary<string, object> task1 = new Dictionary<string, object>(); task1.Add("dataId", "检测数据ID"); task1.Add("url", "待检测视频链接地址"); // scenes:检测场景,支持指定多个场景。 // callback、seed用于回调通知,可选参数。 Dictionary<string, object> httpBody = new Dictionary<string, object>(); httpBody.Add("scenes", new List<string> { "porn", "terrorism" }); httpBody.Add("bizType", "业务场景"); httpBody.Add("callback", "回调地址"); httpBody.Add("seed", "随机字符串"); httpBody.Add("tasks", new List<Dictionary<string, object>> { task1 }); request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(httpBody)), "utf-8", FormatType.JSON); try { VideoAsyncScanResponse response = client.GetAcsResponse(request); if (response.HttpResponse.Status != 200) { Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status); } Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content)); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } } } }
提交视频直播流进行检测
using System; using Newtonsoft.Json; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Http; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Green.Model.V20180509; using System.Collections.Generic; namespace csharp_sdk_sample { class Program { static void Main(string[] args) { /** * 常见获取环境变量方式: * 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"); * 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ DefaultProfile profile = DefaultProfile.GetProfile( "cn-shanghai", "建议从环境变量中获取RAM用户AccessKey ID", "建议从环境变量中获取RAM用户AccessKey Secret"); // 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。 DefaultAcsClient client = new DefaultAcsClient(profile); VideoAsyncScanRequest request = new VideoAsyncScanRequest(); request.AcceptFormat = FormatType.JSON; request.ContentType = FormatType.JSON; request.Method = MethodType.POST; request.Encoding = "UTF-8"; Dictionary<string, object> task1 = new Dictionary<string, object>(); task1.Add("dataId", "检测数据ID"); // url填写直播流地址。 task1.Add("url", "待检测视频链接地址"); // scenes:检测场景,支持指定多个场景。 // callback、seed用于回调通知,可选参数。 Dictionary<string, object> httpBody = new Dictionary<string, object>(); httpBody.Add("scenes", new List<string> { "porn", "terrorism" }); httpBody.Add("live", "true"); httpBody.Add("bizType", "业务场景"); httpBody.Add("callback", "回调地址"); httpBody.Add("seed", "随机字符串"); httpBody.Add("tasks", new List<Dictionary<string, object>> { task1 }); request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(httpBody)), "utf-8", FormatType.JSON); try { VideoAsyncScanResponse response = client.GetAcsResponse(request); if (response.HttpResponse.Status != 200) { Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status); } Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content)); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } } } }
提交视频语音进行综合检测
using System; using Newtonsoft.Json; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Http; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Green.Model.V20180509; using System.Collections.Generic; namespace csharp_sdk_sample { class Program { static void Main(string[] args) { /** * 常见获取环境变量方式: * 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"); * 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ DefaultProfile profile = DefaultProfile.GetProfile( "cn-shanghai", "建议从环境变量中获取RAM用户AccessKey ID", "建议从环境变量中获取RAM用户AccessKey Secret"); // 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。 DefaultAcsClient client = new DefaultAcsClient(profile); VideoAsyncScanRequest request = new VideoAsyncScanRequest(); request.AcceptFormat = FormatType.JSON; request.ContentType = FormatType.JSON; request.Method = MethodType.POST; request.Encoding = "UTF-8"; Dictionary<string, object> task1 = new Dictionary<string, object>(); task1.Add("dataId", "检测数据ID"); // url填写直播流地址。 task1.Add("url", "待检测视频链接地址"); // scenes:检测场景,支持指定多个场景。 // callback、seed用于回调通知,可选参数。 Dictionary<string, object> httpBody = new Dictionary<string, object>(); httpBody.Add("scenes", new List<string> { "porn", "terrorism" }); httpBody.Add("live", "true"); httpBody.Add("audioScenes", new List<string> { "antispam" }); httpBody.Add("bizType", "业务场景"); httpBody.Add("callback", "回调地址"); httpBody.Add("seed", "随机字符串"); httpBody.Add("tasks", new List<Dictionary<string, object>> { task1 }); request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(httpBody)), "utf-8", FormatType.JSON); try { VideoAsyncScanResponse response = client.GetAcsResponse(request); if (response.HttpResponse.Status != 200) { Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status); } Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content)); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } } } }
查询视频异步检测结果
接口 | 描述 | 支持的地域 |
VideoAsyncScanResultsRequest | 查询视频异步检测任务的结果。 说明 该方法需要轮询结果,建议使用callback的方式获取结果。 |
|
示例代码
using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20180509;
using System.Collections.Generic;
namespace csharp_sdk_sample
{
class Program
{
static void Main(string[] args)
{
/**
* 常见获取环境变量方式:
* 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
* 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
DefaultProfile profile = DefaultProfile.GetProfile(
"cn-shanghai",
"建议从环境变量中获取RAM用户AccessKey ID",
"建议从环境变量中获取RAM用户AccessKey Secret");
// 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
DefaultAcsClient client = new DefaultAcsClient(profile);
VideoAsyncScanResultsRequest request = new VideoAsyncScanResultsRequest();
request.AcceptFormat = FormatType.JSON;
request.ContentType = FormatType.JSON;
request.Method = MethodType.POST;
request.Encoding = "UTF-8";
List<string> taskIdList = new List<string> { "视频异步检测任务ID" };
request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(taskIdList)), "utf-8", FormatType.JSON);
try
{
VideoAsyncScanResultsResponse response = client.GetAcsResponse(request);
if (response.HttpResponse.Status != 200)
{
Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status);
}
Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
}
}
}
视频截帧同步检测
接口 | 描述 | 支持的地域 |
VideoSyncScanRequest | 提交视频同步检测任务,同步检测视频中的风险内容。 说明 同步检测只支持传递视频帧序列,不支持检测视频文件,推荐使用异步检测接口。 |
|
示例代码
以下示例代码中使用帧序列方式提交待检测的视频。
using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20180509;
using System.Collections.Generic;
namespace csharp_sdk_sample
{
class Program
{
static void Main(string[] args)
{
/**
* 常见获取环境变量方式:
* 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
* 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
DefaultProfile profile = DefaultProfile.GetProfile(
"cn-shanghai",
"建议从环境变量中获取RAM用户AccessKey ID",
"建议从环境变量中获取RAM用户AccessKey Secret");
// 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
DefaultAcsClient client = new DefaultAcsClient(profile);
VideoSyncScanRequest request = new VideoSyncScanRequest();
request.AcceptFormat = FormatType.JSON;
request.ContentType = FormatType.JSON;
request.Method = MethodType.POST;
request.Encoding = "UTF-8";
Dictionary<string, object> frame1 = new Dictionary<string, object>();
frame1.Add("offset", "0");
frame1.Add("url", "您的视频截帧链接地址1");
Dictionary<string, object> frame2 = new Dictionary<string, object>();
frame2.Add("offset", "5");
frame2.Add("url", "您的视频截帧链接地址2");
Dictionary<string, object> frame3 = new Dictionary<string, object>();
frame3.Add("offset", "10");
frame3.Add("url", "您的视频截帧链接地址3");
Dictionary<string, object> task1 = new Dictionary<string, object>();
task1.Add("dataId", "检测数据ID");
task1.Add("frames", new List<Dictionary<string, object>> { frame1, frame2, frame3 });
Dictionary<string, object> httpBody = new Dictionary<string, object>();
// scenes:检测场景,支持指定多个场景。
httpBody.Add("scenes", new List<string> { "porn", "terrorism" });
httpBody.Add("bizType", "业务场景");
httpBody.Add("tasks", new List<Dictionary<string, object>> { task1 });
request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(httpBody)), "utf-8", FormatType.JSON);
try
{
VideoSyncScanResponse response = client.GetAcsResponse(request);
if (response.HttpResponse.Status != 200)
{
Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status);
}
Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
}
}
}
视频检测结果反馈
如果您认为视频检测结果与您的预期不符,可以通过视频检测结果反馈接口,对检测结果进行纠正(系统会根据您反馈的结果,将视频截帧添加到相似图片的黑名单库或者白名单库)。当您再次提交相似的内容进行检测时,以您反馈的label返回结果。
关于接口的说明,请参见检测结果反馈。
接口 | 描述 | 支持的Region |
VideoFeedbackRequest | 提交视频检测结果的反馈,以人工反馈的检测结果纠正算法检测结果。 |
|
示例代码
using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20180509;
using System.Collections.Generic;
namespace csharp_sdk_sample
{
class Program
{
static void Main(string[] args)
{
/**
* 常见获取环境变量方式:
* 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
* 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
DefaultProfile profile = DefaultProfile.GetProfile(
"cn-shanghai",
"建议从环境变量中获取RAM用户AccessKey ID",
"建议从环境变量中获取RAM用户AccessKey Secret");
// 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
DefaultAcsClient client = new DefaultAcsClient(profile);
VideoFeedbackRequest request = new VideoFeedbackRequest();
request.AcceptFormat = FormatType.JSON;
request.ContentType = FormatType.JSON;
request.Method = MethodType.POST;
request.Encoding = "UTF-8";
Dictionary<string, object> frame1 = new Dictionary<string, object>();
frame1.Add("offset", "0");
frame1.Add("url", "您的视频截帧链接地址1");
Dictionary<string, object> frame2 = new Dictionary<string, object>();
frame2.Add("offset", "0");
frame2.Add("url", "您的视频截帧链接地址2");
List<Dictionary<string, object>> frames = new List<Dictionary<string, object>> { frame1, frame2 };
// scenes:检测场景,支持指定多个场景。
// suggestion:期望的检测结果,pass:正常;block:违规。
Dictionary<string, object> httpBody = new Dictionary<string, object>();
httpBody.Add("scenes", new List<string> { "porn", "terrorism" });
httpBody.Add("suggestion", "block");
httpBody.Add("taskId", "视频审核任务ID");
httpBody.Add("dataId", "检测数据ID");
httpBody.Add("url", "视频链接地址");
httpBody.Add("frames", frames);
httpBody.Add("note", "备注信息");
request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(httpBody)), "utf-8", FormatType.JSON);
try
{
VideoFeedbackResponse response = client.GetAcsResponse(request);
if (response.HttpResponse.Status != 200)
{
Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status);
}
Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
}
}
}