# 图片鉴黄服务(异步)

# 服务说明

基于瀑布型深度卷积神经网络技术和CascadeNet识别技术,通过学习和分析图片影像的肤色、姿态和场景等,让机器替代人工进行图像审核。支持提供图片文件或者下载地址,自动获取图片进行智能识别,并返回图片的色情分值,可高效识别色情图片和性感图片,有效降低业务风险,减少人力成本。

说明

当前接口为异步接口,先添加任务,需要通过任务编号查询扫描结果。

# 应用场景

对文章配图、图片相册等UGC内容、用户的头像、用户上传的图片进行实时自动审核,迅速准确定位不良内容,告别传统人工审核时代,提高效率。

# 接口说明

鉴定图片包含色情信息,文件存储依赖云存储服务https://scs.sinacloud.com (opens new window),图片原文件需要存储到云存储的bucket,任务完成后文件也会写到云存储中;此接口为异步完成,添加任务后会马上返回任务ID,通过任务状态接口可以查询任务的状态。

# 接口地址

http://g.sae.sina.com.cn/pictureidentificate/task/add (opens new window)

# 签名规则

新增任务时需要签名,签名规则请参考签名规则章节。

# 请求方式

POST

# 请求参数列表

参数 说明 是否必选 样例
task_type 任务类型 必须填写pron/detect
bucket 视频源文件的bucket名称 opensource
accesskey SCS Bucket的accesskey
secretkey SCS Bucket的secretkey
source_video_path 待处理文件在SCS中的路径 2018apple/1.jpg
success_callback 成功后的回调地址 http://2.robotsae.sinaapp.com/3.php,调用接口后接口应该返回1表示通知成功,最多会回调5次,全部失败后不再回调。回调时携带的参数(POST请求)请参考以下表格。

# 执行完成时回调

如果在添加任务时添加了success_callback参数,则在任务执行成功时会回调您设置的通知地址,并以POST的方式带上以下参数:

array(3) {
  ["code"]=>
  int(0)
  ["desc"]=>
  string(0) ""
  ["result"]=>
  array(1) {
    ["rows"]=>
    array(1) {
      [0]=>
      array(2) {
        ["data"]=>
        array(4) {
          ["result"]=>
          int(1)
          ["score"]=>
          float(0.92569363117218)
          ["label"]=>
          int(2)
          ["name"]=>
          string(4) "porn"
        }
        ["type"]=>
        string(5) "porn4"
      }
    }
  }
}
回调的参数 说明 样例
code 返回值 0为成功, 其他为错误
desc 错误描述 -
result 执行结果 -

result中包含多个数组,表示检测结果数据集,每种检测结果一行,其中type表示检测类型,data为检测结果详情,字段意义如下:

字段 说明
result 是否坚定为色情图片,1表示是,0表示否
score 检测值,值越大概率越大
label 类型,当前分为低速类和色情类
name 类型名称(avanime, avposter, nakedbody, normal, oralcoitus, porn, sexy)

name中字段的含义如下:

名称 说明
Avanime 动漫
Avposter 色情海报
Nakedbody 裸体
Normal 正常
Oralcoitus 性交色情
Porn 混杂色情
Sexy 性感

# 回调接口输出格式

回调接口的输出:

  • 你的程序收到调用时,如果处理成功,则输出1,表示执行成功
  • 回调的接口返回非1均认为回调失败

# 添加任务的输出示例

{
	"code": 0,
	"message": "success",
	"data": 7475878
}

data字段是异步任务的ID。

# 查询任务结果

从任务状态接口返回中Result字段可以获取执行状态:

{
	"code": 0,
	"message": "success",
	"data": {
		"Id": 14067333,
		"RunAt": "2018-12-12T14:42:23+08:00",
		"UpdateAt": "2018-12-12T14:42:34+08:00",
		"ErrorCount": 0,
		"MaxRetry": 2,
		"LastError": "",
		"Result": "{\"code\":0,\"message\":\"success\",\"data\":{\"code\":0,\"desc\":\"\",\"result\":{\"rows\":[{\"data\":{\"result\":1,\"score\":0.92569363117218,\"label\":2,\"name\":\"porn\"},\"type\":\"porn4\"}]}}}",
		"Status": "DONE"
	}
}

Result中字段的含义同执行完成时回调处的说明。

# PHP调用示例

# 添加检测任务

<?php 
require('gapi.php');
use sinacloud\sae\Gapi;
// SAE_ACCESSKEY和SAE_SECRETKEY需要改为你的应用的accesskey和secretkey
$i = new Gapi(SAE_ACCESSKEY, SAE_SECRETKEY);
$post_data = array();
$post_data['task_type'] = 'pron/detect';
$post_data['accesskey'] = '云存储的accesskey';
$post_data['secretkey'] = '云存储的secretkey';
$post_data['bucket'] = '云存储的bucket';
// 图片在云存储下的路径
$post_data['source_file_path'] = '2018apple/1.jpg';
$ret = $i->post('/pictureidentificate/task/add', $post_data);
var_dump($ret);

调用完成后,接口会返回:

{"code":0,"message":"success","data":14096057}

其中data字段为异步任务的id。

# 查询任务状态

通过以上获取的异步任务id,通过任务查询接口可以查询当前任务的执行状态:

<?php 
// 换成你的任务id
$id = 14096057;
require('gapi.php');
use sinacloud\sae\Gapi;
// SAE_ACCESSKEY和SAE_SECRETKEY需要改为你的应用的accesskey和secretkey
$i = new Gapi(SAE_ACCESSKEY, SAE_SECRETKEY);
$post_data = array();
$post_data['task_id'] = $id;
$ret = $i->post('/pictureidentificate/task/status', $post_data);
echo($ret);

接口会返回异步任务的状态:

{
	"code": 0,
	"message": "success",
	"data": {
		"Id": 14096057,
		"RunAt": "2018-12-13T16:29:38+08:00",
		"UpdateAt": "2018-12-13T16:29:50+08:00",
		"ErrorCount": 0,
		"MaxRetry": 2,
		"LastError": "",
		"Result": "{\"code\":0,\"message\":\"success\",\"data\":{\"code\":0,\"desc\":\"\",\"result\":{\"rows\":[{\"data\":{\"result\":1,\"score\":0.92569363117218,\"label\":2,\"name\":\"porn\"},\"type\":\"porn4\"}]}}}",
		"Status": "DONE"
	}
}

# 下载代码

以上demo代码可以从这里点击下载