Эх сурвалжийг харах

增加阿里云视频鉴å黄

north 8 жил өмнө
parent
commit
1cc142bec2

+ 171 - 41
www/protected/components/CommonFn.php

@@ -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);
+        }
+    }
 }