|
@@ -1235,72 +1235,202 @@ class CommonFn
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 图片鉴黄
|
|
|
- * 同步图片检测样例,调用会实时返回检测结果
|
|
|
- * http://oscmpgu1a.bkt.clouddn.com/o_1bjrul60t1o4g1n6egb4sse1icl9.jpg
|
|
|
+ * 视频/图片鉴黄
|
|
|
+ * 同步图片检测,调用会实时返回检测结果
|
|
|
+ * 异步视频检测,上传视频后轮训获取检测结果
|
|
|
+ * http://oscmpgu1a.bkt.clouddn.com/o_1bjrul60t1o4g1n6egb4sse1icl9.jpg 测试url
|
|
|
*/
|
|
|
- public static function imageIdent($url) {
|
|
|
+ public static function imageIdent($url,$type ='image') {
|
|
|
Yii::$enableIncludePath = false;
|
|
|
Yii::import('ext.aliyuncs.aliyun-php-sdk-core.Config',1);
|
|
|
date_default_timezone_set("PRC");
|
|
|
//请替换成你自己的accessKeyId、accessKeySecret
|
|
|
$ak['accessKeyId']='LTAIsUUDuVvAmDMP';
|
|
|
$ak['accessKeySecret']='d8gz2BkKVWGQg77sjShH7TAhei6qIP';
|
|
|
+ if (empty($url)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
+ if ($type == 'image') {
|
|
|
+ DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "Green", "green.cn-hangzhou.aliyuncs.com");
|
|
|
+ $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", $ak["accessKeyId"], $ak["accessKeySecret"]);
|
|
|
+ $request = new Green\ImageSyncScanRequest();
|
|
|
+ $task1 = array('dataId' => uniqid(),
|
|
|
+ 'url' => $url,
|
|
|
+ 'time' => round(microtime(true)*1000)
|
|
|
+ );
|
|
|
|
|
|
- $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", $ak["accessKeyId"], $ak["accessKeySecret"]);
|
|
|
- DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "Green", "green.cn-hangzhou.aliyuncs.com");
|
|
|
- $client = new DefaultAcsClient($iClientProfile);
|
|
|
+ } else {
|
|
|
+ $request = new Green\VideoAsyncScanRequest();
|
|
|
+ $iClientProfile = DefaultProfile::getProfile("cn-shanghai", $ak["accessKeyId"], $ak["accessKeySecret"]);
|
|
|
+ DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
|
|
|
+ $frames = array();
|
|
|
+ for ($i=0; $i <4; $i ++) {
|
|
|
+ $frames[$i]['offset'] = $i*5;
|
|
|
+ $frames[$i]['url'] = $url."?vframe/jpg/offset/".$i*5;
|
|
|
|
|
|
- $request = new Green\ImageSyncScanRequest();
|
|
|
+ }
|
|
|
+ $task1 = array(
|
|
|
+ "dataId" => uniqid(),
|
|
|
+ "interval" => 5,
|
|
|
+ "length" => 3600,
|
|
|
+ "frames" => $frames
|
|
|
+ );
|
|
|
+ }
|
|
|
+ $client = new DefaultAcsClient($iClientProfile);
|
|
|
$request->setMethod("POST");
|
|
|
$request->setAcceptFormat("JSON");
|
|
|
- $task1 = array('dataId' => uniqid(),
|
|
|
- 'url' => $url,
|
|
|
- 'time' => round(microtime(true)*1000)
|
|
|
- );
|
|
|
-
|
|
|
$request->setContent(json_encode(array("tasks" => $task1,
|
|
|
"scenes" => array("porn"))));
|
|
|
- $data = array();
|
|
|
+
|
|
|
try {
|
|
|
$response = $client->getAcsResponse($request);
|
|
|
if(200 == $response->code){
|
|
|
- $taskResults = $response->data;
|
|
|
- foreach ($taskResults as $key => $taskResult) {
|
|
|
- $data[$key]['url'] = $taskResult->url;
|
|
|
- if(200 == $taskResult->code){
|
|
|
- $sceneResults = $taskResult->results;
|
|
|
- foreach ($sceneResults as $sceneResult) {
|
|
|
- $data[$key]['scene'] = $sceneResult->scene;
|
|
|
- if ($sceneResult->suggestion == 'pass') {
|
|
|
- $data[$key]['suggestion'] = '图片正常';
|
|
|
- } else if($sceneResult->suggestion == 'review') {
|
|
|
- $data[$key]['suggestion'] = '需要人工审核';
|
|
|
- } else if ($sceneResult->suggestion == 'block') {
|
|
|
- $data[$key]['suggestion'] = '图片违规,可以直接删除或者做限制处理';
|
|
|
- }
|
|
|
- $data[$key]['rate'] = $sceneResult->rate;//结果为该分类的概率;值越高,越趋于该分类
|
|
|
- if ($sceneResult->label == 'normal') {
|
|
|
- $data[$key]['label'] = '正常图片,无色情';
|
|
|
- } else if($sceneResult->label == 'sexy'){
|
|
|
- $data[$key]['label'] = '性感图片';
|
|
|
- }else if($sceneResult->label == 'porn'){
|
|
|
- $data[$key]['label'] = '色情图片';
|
|
|
- }
|
|
|
|
|
|
+ if ($type == 'image') {
|
|
|
+ return self::getResultData($response);//返回 图片鉴定结果
|
|
|
+ } else {
|
|
|
+ $flag = true;
|
|
|
+
|
|
|
+ while ($flag) {
|
|
|
+ sleep(2);
|
|
|
+ $request = new Green\VideoAsyncScanResultsRequest();
|
|
|
+ $request->setMethod("POST");
|
|
|
+ $request->setAcceptFormat("JSON");
|
|
|
+ $request->setContent(json_encode(array($response->data[0]->taskId)));
|
|
|
+
|
|
|
+ try {
|
|
|
+ $response = $client->getAcsResponse($request);
|
|
|
+ if(200 == $response->data[0]->code){//判断是否检测完
|
|
|
+ return self::getResultData($response);
|
|
|
+ }
|
|
|
+ } catch (Exception $e) {
|
|
|
+ print_r($e);exit;
|
|
|
}
|
|
|
- }else{
|
|
|
- // print_r("task process fail:" + $response->code);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
- echo json_encode($data);exit;
|
|
|
- }else{
|
|
|
- //print_r("detect not success. code:" + $response->code);
|
|
|
+
|
|
|
}
|
|
|
} catch (Exception $e) {
|
|
|
echo json_encode($e);exit;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param $response
|
|
|
+ * @return bool
|
|
|
+ * 处理鉴定数据 图片通过 返回true 图片违规 返回false
|
|
|
+ */
|
|
|
+ private static function getResultData($response) {
|
|
|
+ $taskResults = $response->data;
|
|
|
+ foreach ($taskResults as $key => $taskResult) {
|
|
|
+ if(200 == $taskResult->code){
|
|
|
+ $sceneResults = $taskResult->results;
|
|
|
+ foreach ($sceneResults as $sceneResult) {
|
|
|
+ if ($sceneResult->suggestion == 'pass') {
|
|
|
+ return true;
|
|
|
+ } else if($sceneResult->suggestion == 'review') {
|
|
|
+ //$data[$key]['suggestion'] = '需要人工审核';
|
|
|
+ if (intval($sceneResult->rate) >= 60) {//分数越大 越趋于该分类
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if ($sceneResult->suggestion == 'block') {
|
|
|
+ //$data[$key]['suggestion'] = '图片违规,可以直接删除或者做限制处理';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static function videoIdent() {
|
|
|
+ date_default_timezone_set("PRC");
|
|
|
+
|
|
|
+ Yii::$enableIncludePath = false;
|
|
|
+ Yii::import('ext.aliyuncs.aliyun-php-sdk-core.Config',1);
|
|
|
+ date_default_timezone_set("PRC");
|
|
|
+ //请替换成你自己的accessKeyId、accessKeySecret
|
|
|
+ $ak['accessKeyId']='LTAIsUUDuVvAmDMP';
|
|
|
+ $ak['accessKeySecret']='d8gz2BkKVWGQg77sjShH7TAhei6qIP';
|
|
|
+//请替换成你自己的accessKeyId、accessKeySecret
|
|
|
+ $iClientProfile = DefaultProfile::getProfile("cn-shanghai", $ak["accessKeyId"], $ak["accessKeySecret"]); // TODO
|
|
|
+ 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");
|
|
|
+ $url = 'http://wozhua-others.qiniudn.com/20160215-wozhua-2.MP4?';
|
|
|
+ $frames = array();
|
|
|
+ for ($i=0; $i <4; $i ++) {
|
|
|
+ $frames[$i]['offset'] = $i*5;
|
|
|
+ $frames[$i]['url'] = $url."vframe/jpg/offset/".$i*5;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ $task1 = array(
|
|
|
+ "dataId" => uniqid(),
|
|
|
+ "interval" => 5,
|
|
|
+ "length" => 3600,
|
|
|
+ "frames" => $frames
|
|
|
+ );
|
|
|
+ $request->setContent(json_encode(array("tasks" => array($task1),
|
|
|
+ "scenes" => array("porn"))));
|
|
|
+
|
|
|
+ try {
|
|
|
+ $response = $client->getAcsResponse($request);
|
|
|
+
|
|
|
+ if ($response->code == 200) {
|
|
|
+ $flag = true;
|
|
|
+ while ($flag) {
|
|
|
+ sleep(2);
|
|
|
+ $request = new Green\VideoAsyncScanResultsRequest();
|
|
|
+ $request->setMethod("POST");
|
|
|
+ $request->setAcceptFormat("JSON");
|
|
|
+
|
|
|
+ $request->setContent(json_encode(array($response->data[0]->taskId)));
|
|
|
+
|
|
|
+ try {
|
|
|
+ $response = $client->getAcsResponse($request);
|
|
|
+ if(200 == $response->code){
|
|
|
+ $taskResults = $response->data;
|
|
|
+ foreach ($taskResults as $key => $taskResult) {
|
|
|
+ if(200 == $taskResult->code){
|
|
|
+ $sceneResults = $taskResult->results;
|
|
|
+ foreach ($sceneResults as $sceneResult) {
|
|
|
+ if ($sceneResult->suggestion == 'pass') {
|
|
|
+ return true;
|
|
|
+ } else if($sceneResult->suggestion == 'review') {
|
|
|
+ //$data[$key]['suggestion'] = '需要人工审核';
|
|
|
+ if (intval($sceneResult->rate) >= 60) {//分数越大 越趋于该分类
|
|
|
+
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if ($sceneResult->suggestion == 'block') {
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } catch (Exception $e) {
|
|
|
+ print_r($e);exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception $e) {
|
|
|
+ print_r($e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|