本文介绍了如何使用PHP SDK视频审核接口,检测视频中是否包含风险内容。

功能描述

视频审核接口支持同步检测和异步检测两种方式。
  • 同步检测只支持传递视频的截帧图片序列。关于参数的详细介绍,请参见同步检测
  • 异步检测(推荐)支持对原始视频或视频的截帧图片序列进行检测。关于参数的详细介绍,请参见异步检测

视频支持传入互联网视频URL、本地视频文件路径以及二进制视频文件流。

前提条件

已安装PHP依赖。关于安装PHP依赖的具体操作,请参见安装PHP依赖
说明 请一定按照安装PHP依赖页面中的版本安装,否则会导致调用失败。

(推荐)提交视频异步检测任务

接口 描述 支持的地域
VideoAsyncScanRequest 提交视频异步检测任务,对视频进行多个风险场景的识别,包括色情、暴恐涉政、广告 、不良场景、Logo(商标台标)识别。
  • cn-shanghai:华东2(上海)
  • cn-beijing:华北2(北京)
  • cn-shenzhen:华南1(深圳)
  • ap-southeast-1:新加坡
示例代码
  • 提交视频URL进行检测
    <?php
    
    require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
    include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';
    
    use Green\Request\V20180509 as Green;
    
    // 请替换成您的AccessKey ID、AccessKey Secret。
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
    DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new Green\VideoAsyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    // 计费按照该处传递的场景进行。
    // 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算。
    // 例如:检测2个视频,场景传递porn和terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算。
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => '待检测视频URL'
    );
    $request->setContent(json_encode(array("tasks" => array($task1),
        "scenes" => array("porn", "terrorism"))));// 检测场景。
    try {
        $response = $client->getAcsResponse($request);
        print_r($response);
        if(200 == $response->code){
            $taskResults = $response->data;
            foreach ($taskResults as $taskResult) {
                if(200 == $taskResult->code){
                    $taskId = $taskResult->taskId;
                    // 将taskId保存下来,间隔一段时间来轮询结果。
                    print_r($taskId);
                }else{
                    print_r("task process fail:" + $response->code);
                }
            }
        }else{
            print_r("detect not success. code:" + $response->code);
        }
    } catch (Exception $e) {
        print_r($e);
    }
  • 提交本地视频文件进行检测
    <?php
    
    require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
    include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';
    
    use Green\Request\V20180509 as Green;
    use Green\Request\Extension\ClientUploader;
    
    // 请替换成您的AccessKey ID、AccessKey Secret。
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
    DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new Green\VideoAsyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    // 计费按照该处传递的场景进行。
    // 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算。
    // 例如:检测2个视频,场景传递porn和terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算。
    // 本地文件先进行上传,然后进行检测。
    $uploader = ClientUploader::getVideoClientUploader($client);
    $url = $uploader->uploadFile("您本地文件的路径");
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => $url
    );
    $request->setContent(json_encode(array("tasks" => array($task1),
        "scenes" => array("porn", "terrorism"))));// 检测场景。
    try {
        $response = $client->getAcsResponse($request);
        print_r($response);
        if(200 == $response->code){
            $taskResults = $response->data;
            foreach ($taskResults as $taskResult) {
                if(200 == $taskResult->code){
                    $taskId = $taskResult->taskId;
                    // 保存taskId用于查询检测结果。
                    print_r($taskId);
                }else{
                    print_r("task process fail:" + $response->code);
                }
            }
        }else{
            print_r("detect not success. code:" + $response->code);
        }
    } catch (Exception $e) {
        print_r($e);
    }
  • 提交视频文件二进制内容进行检测
    <?php
    
    require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
    include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';
    
    use Green\Request\V20180509 as Green;
    use Green\Request\Extension\ClientUploader;
    
    // 请替换成您的AccessKey ID、AccessKey Secret。
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
    DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new Green\VideoAsyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    // 计费按照该处传递的场景进行。
    // 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算。
    // 例如:检测2个视频,场景传递porn和terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算。
    $uploader = ClientUploader::getVideoClientUploader($client);
    $bytes = file_get_contents('您本地文件的路径');
    $url = $uploader->uploadBytes($bytes);
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => $url
    );
    $request->setContent(json_encode(array("tasks" => array($task1),
        "scenes" => array("porn", "terrorism"))));// 检测场景。
    try {
        $response = $client->getAcsResponse($request);
        print_r($response);
        if(200 == $response->code){
            $taskResults = $response->data;
            foreach ($taskResults as $taskResult) {
                if(200 == $taskResult->code){
                    $taskId = $taskResult->taskId;
                    // 保存taskId用于查询检测结果。
                    print_r($taskId);
                }else{
                    print_r("task process fail:" + $response->code);
                }
            }
        }else{
            print_r("detect not success. code:" + $response->code);
        }
    } catch (Exception $e) {
        print_r($e);
    }
  • 提交视频直播流进行检测
    <?php
    
    require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
    include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';
    
    use Green\Request\V20180509 as Green;
    
    // 请替换成您的AccessKey ID、AccessKey Secret。
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
    DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new Green\VideoAsyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    // 计费按照该处传递的场景进行。
    // 一次请求中可以同时检测多个视频流,每个视频流可以同时检测多个风险场景,计费按照场景和视频截帧数计算。
    // 例如:检测2个视频,场景传递porn和terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算。
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => '您的直播流URL'
    );
    $request->setContent(json_encode(array("tasks" => array($task1),
        "scenes" => array("porn", "terrorism"), "live" => true)));
    try {
        $response = $client->getAcsResponse($request);
        print_r($response);
        if(200 == $response->code){
            $taskResults = $response->data;
            foreach ($taskResults as $taskResult) {
                if(200 == $taskResult->code){
                    $taskId = $taskResult->taskId;
                    // 保存taskId用于查询检测结果。
                    print_r($taskId);
                }else{
                    print_r("task process fail:" + $response->code);
                }
            }
        }else{
            print_r("detect not success. code:" + $response->code);
        }
    } catch (Exception $e) {
        print_r($e);
    }
  • 提交视频语音进行综合检测
    <?php
    
    require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
    include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';
    
    use Green\Request\V20180509 as Green;
    
    // 请替换成您的AccessKey ID、AccessKey Secret。
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
    DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new Green\VideoAsyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    # 设置待检测视频,默认一次请求只支持1个task,如果需要开放到更多,请通过工单联系我们。
    # 计费按照该处传递的场景进行。
    # 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算。
    # 例如:检测2个视频,场景传递porn和terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算。
    # 如果同时检测视频画面和视频中的语音,视频中的画面还是按照上述示例计费,语音部分按照视频语音的总时长进行计费。
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => '您本地文件的路径'
    );
    $request->setContent(json_encode(array("tasks" => array($task1),
        "scenes" => array("porn", "terrorism"), "audioScenes" => 'antispam')));// 检测场景。
    try {
        $response = $client->getAcsResponse($request);
        print_r($response);
        if(200 == $response->code){
            $taskResults = $response->data;
            foreach ($taskResults as $taskResult) {
                if(200 == $taskResult->code){
                    $taskId = $taskResult->taskId;
                    // 保存taskId用于查询检测结果。
                    print_r($taskId);
                }else{
                    print_r("task process fail:" + $response->code);
                }
            }
        }else{
            print_r("detect not success. code:" + $response->code);
        }
    } catch (Exception $e) {
        print_r($e);
    }

查询视频异步检测结果

接口 描述 支持的地域
VideoAsyncScanResultsRequest 查询视频异步检测任务的结果。
说明 该方法需要轮询结果,建议使用callback的方式获取结果。
  • cn-shanghai:华东2(上海)
  • cn-beijing:华北2(北京)
  • cn-shenzhen:华南1(深圳)
  • ap-southeast-1:新加坡
示例代码
<?php
include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';
use Green\Request\V20180509 as Green;

// 请替换成您的AccessKey ID、AccessKey Secret。
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);
$request = new Green\VideoAsyncScanResultsRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

//提交异步检测任务返回的taskId。
$request->setContent(json_encode(array("异步检测任务返回的taskId")));
try {
    $response = $client->getAcsResponse($request);
    print_r($response);
    if(200 == $response->code){
        $taskResults = $response->data;
        foreach ($taskResults as $taskResult) {
            if(200 == $taskResult->code){
                $sceneResults = $taskResult->results;
                foreach ($sceneResults as $sceneResult) {
                    $scene = $sceneResult->scene;
                    $suggestion = $sceneResult->suggestion;
                    //根据scene和suggetion做相关处理。
                }
            }else{
                print_r("task process fail:" + $response->code);
            }
        }
    }else{
        print_r("detect not success. code:" + $response->code);
    }
} catch (Exception $e) {
    print_r($e);
}

视频截帧同步检测

接口 描述 支持的地域
VideoSyncScanRequest 提交视频同步检测任务,同步检测视频中的风险内容。
说明 同步检测只支持传递视频帧序列,不支持检测视频文件,推荐使用异步检测接口。
  • cn-shanghai:华东2(上海)
  • cn-beijing:华北2(北京)
  • cn-shenzhen:华南1(深圳)
  • ap-southeast-1:新加坡
示例代码
<?php

require_once 'aliyuncs/aliyun-oss-php-sdk/autoload.php';
include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';

use Green\Request\V20180509 as Green;

// 请替换成您的AccessKey ID、AccessKey Secret。
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);
$request = new Green\VideoSyncScanRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

// 计费按照该处传递的场景进行。
// 一次请求中可以同时检测多个视频,每个视频可以同时检测多个风险场景,计费按照场景和视频截帧数计算。
// 例如:检测2个视频,场景传递porn和terrorism,计费会按照2个视频的截帧总数乘以鉴黄场景的价格加上2个视频的截帧总数乘以暴恐检测场景的费用计算。
$task1 = array('frames' => array(['offset' => '0', 'url'=>'视频截帧URL1'] ,
    ['offset' => '1', 'url'=>'视频截帧URL2'] ,
    ['offset' => '2', 'url'=>'视频截帧URL3'] ));

$request->setContent(json_encode(array("tasks" => array($task1),
    "scenes" => array("porn", "terrorism"))));
try {
    $response = $client->getAcsResponse($request);
    print_r($response);
    if(200 == $response->code){
        $taskResults = $response->data;
        foreach ($taskResults as $taskResult) {
            if(200 == $taskResult->code){
                $sceneResults = $taskResult->results;
                foreach ($sceneResults as $sceneResult) {
                    $scene = $sceneResult->scene;
                    $suggestion = $sceneResult->suggestion;
                    // 根据scene和suggetion做相关处理。
                }
        }else{
                print_r("task process fail:" + $response->code);
            }
        }
    }
} catch (Exception $e) {
    print_r($e);
}

视频检测结果反馈

如果您认为视频检测结果与您的预期不符,可以通过视频检测结果反馈接口,对检测结果进行纠正(系统会根据您反馈的结果,将视频截帧添加到相似图片的黑名单库或者白名单库)。当您再次提交相似的内容进行检测时,以您反馈的label返回结果。

关于接口的说明,请参见检测结果反馈

接口 描述 支持的Region
VideoFeedbackRequest 提交视频检测结果的反馈,以人工反馈的检测结果纠正算法检测结果。
示例代码
<?php

include_once 'aliyuncs/aliyun-php-sdk-core/Config.php';

use Green\Request\V20180509 as Green;

// 请替换成您自己的AccessKey ID、AccessKey Secret。
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "您的AccessKey ID", "您的AccessKey Secret");
DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);
$request = new Green\VideoFeedbackRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

$request->setContent(json_encode(array("taskId" => '检测任务返回的taskId',
    "dataId" => "检测数据ID",
    "url" => "检测视频的URL",
    "frames" => array(array("url" => "检测视频的URL1", "offset" => "100"), array("url" => "检测视频的URL2", "offset" => "200")),
    "suggestion" => '您自定义的检测结果',
    "scenes" => array("检测场景1", "检测场景2"),
    "note" => "说明")));
try {
    $response = $client->getAcsResponse($request);
    print_r($response);
} catch (Exception $e) {
    print_r($e);
}