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

功能描述

图片审核支持同步检测和异步检测两种方式。

  • 同步检测实时返回检测结果。关于参数的详细信息,请参见同步检测
  • 异步检测需要您轮询结果或者通过callback回调通知获取检测结果。关于参数的详细信息,请参见异步检测

支持传入检测的图片内容媒介包括互联网图片URL、本地图片文件路径和二进制图片文件流。

前提条件

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

(推荐)图片同步检测

接口 描述 支持的地域
ImageSyncScanRequest 提交图片同步检测任务,对图片进行多个风险场景的识别,包括色情、暴恐涉政、广告、二维码、不良场景、Logo(商标台标)识别。
  • cn-shanghai:华东2(上海)
  • cn-beijing:华北2(北京)
  • cn-shenzhen:华南1(深圳)
  • ap-southeast-1:新加坡
示例代码
  • 传图片URL进行检测
    <?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\ImageSyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    $task1 = array('dataId' => '检测数据ID',
        'url' => '待检测图像的URL',
        'time' => round(microtime(true) * 1000)
    );
    $request->setContent(json_encode(array("tasks" => array($task1),
        "scenes" => array("图片检测场景"))));
    
    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做相应的处理。
                        print_r($scene);
                        print_r($suggestion);
                    }
                } 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\ImageSyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    
    // 先上传本地文件再进行检测。
    $uploader = ClientUploader::getImageClientUploader($client);
    $url = $uploader->uploadFile("您本地图片的路径");
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => $url
    );
    // 设置待检测的图片,一张图片对应一个检测任务。
    // 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
    // 通常情况下批量检测的平均响应时间比单张检测要长。一次批量提交的图片数越多,响应时间被拉长的概率越高。
    // 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个检测任务。
    // 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照单图片单场景检测叠加计算。
    // 例如,检测2张图片,场景传递porn和terrorism,则计费按照2张图片鉴黄和2张图片暴恐检测计算。
    $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设置后续操作。
                        // 根据不同的suggestion结果做业务上的不同处理。例如,将违规数据删除等。
                    }
                }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\ImageSyncScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    $uploader = ClientUploader::getImageClientUploader($client);
    
    // 读取本地文件,模拟二进制数据检测。
    $bytes = file_get_contents("您本地文件的路径");
    $url = $uploader->uploadBytes($bytes);
    $task1 = array('dataId' =>  '检测数据ID',
        'url' => $url
    );
    // 设置待检测的图片,一张图片对应一个检测任务。
    // 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
    // 通常情况下批量检测的平均响应时间比单张检测要长。一次批量提交的图片数越多,响应时间被拉长的概率越高。
    // 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个检测任务。
    // 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照单图片单场景检测叠加计算。
    // 例如,检测2张图片,场景传递porn和terrorism,则计费按照2张图片鉴黄和2张图片暴恐检测计算。
    $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设置后续操作。
                        // 根据不同的suggestion结果做业务上的不同处理。例如,将违规数据删除等。
                        print_r($scene);
                        print_r($suggestion);
                    }
                }else{
                    print_r("task process fail:" + $response->code);
                }
            }
        }else{
            print_r("detect not success. code:" + $response->code);
        }
    } catch (Exception $e) {
        print_r($e);
    }

提交图片异步检测任务

使用PHP SDK对图片进行风险检测,通过异步请求提交检测任务,结果可以通过提交请求时设置callback回调获取,也可以通过接口轮询获取。

异步检测支持的输入内容与同步检测一致(本地文件、图片URL、图片二进制流),以下仅以图片URL作为输入示例。

接口 描述 支持的地域
ImageAsyncScanRequest 提交图片异步检测任务,对图片进行多个风险场景的识别,包括色情、暴恐涉政、广告、二维码、不良场景、Logo(商标台标)识别。
  • 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\ImageAsyncScanRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");
$task1 = array('dataId' =>  uniqid(),
    'url' => 'http://xxx.jpg'
);

// 支持的场景包括:porn(色情)、terrorism(暴恐)、qrcode(二维码)、ad(图片广告)、 ocr(文字识别)。
$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);
}

查询异步检测结果

接口 描述 支持的地域
ImageAsyncScanResultsRequest 查询图片异步检测任务的结果。支持同时查询多个检测任务的返回结果。
  • 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\ImageAsyncScanResultsRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");
$request->setContent(json_encode(array('img4QZbr4m3rGh4Fqp$vsHWsK-1q5mP@')));

try {
    $response = $client->getAcsResponse($request);
    print_r($response, JSON_FORCE_OBJECT);
    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设置后续操作。
                    // 根据不同的suggestion结果做业务上的不同处理。例如,将违规数据删除等。
                }
            }else{
                print_r("task process fail:" + $response->code);
            }
        }
    }else{
        print_r("detect not success. code:" + $response->code);
    }
} catch (Exception $e) {
    print_r($e);
}

图片检测结果反馈

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

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

接口 描述 支持的Region
ImageScanFeedbackRequest 提交图片检测结果的反馈,以人工反馈的检测结果纠正算法检测结果。
示例代码
<?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\ImageScanFeedbackRequest();
$request->setMethod("POST");
$request->setAcceptFormat("JSON");

$request->setContent(json_encode(array("suggestion" => "block",
    "scenes" => array("porn", "terrorism"),
    "url" => "http://xxx.xxx.xxx.com")));
try {
    $response = $client->getAcsResponse($request);
    print_r($response);
} catch (Exception $e) {
    print_r($e);
}