日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

視頻審核

本文介紹了如何使用Java SDK視頻審核接口,檢測視頻中是否包含風險內容。

功能描述

視頻審核接口支持同步檢測和異步檢測兩種方式。

  • 同步檢測只支持傳遞視頻的截幀圖片序列。關于參數的詳細介紹,請參見同步檢測

  • (推薦)異步檢測支持對原始視頻或視頻的截幀圖片序列進行檢測。關于參數的詳細介紹,請參見異步檢測

前提條件

  • 安裝Java依賴。關于安裝Java依賴的具體操作,請參見安裝Java依賴

    說明

    請一定按照安裝Java依賴頁面中的版本安裝,否則會導致調用失敗。

  • 如果使用本地文件或者二進制文件檢測,請下載并在項目工程中引入Extension.Uploader工具類

(推薦)提交視頻異步檢測任務

接口

描述

支持的地域

VideoAsyncScanRequest

提交視頻異步檢測任務,對視頻進行多個風險場景的識別,包括色情、暴恐涉政、廣告 、不良場景、Logo(商標臺標)識別。

  • cn-shanghai:華東2(上海)

  • cn-beijing:華北2(北京)

  • cn-shenzhen:華南1(深圳)

  • ap-southeast-1:新加坡

示例代碼

  • 傳視頻URL進行檢測

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.green.model.v20180509.VideoAsyncScanRequest;
    import com.aliyuncs.http.FormatType;
    import com.aliyuncs.http.HttpResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.UUID;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            /**
             * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
             * 常見獲取環境變量方式:
             * 方式一:
             *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方式二:
             *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-shanghai",
                    "建議從環境變量中獲取RAM用戶AccessKey ID",
                    "建議從環境變量中獲取RAM用戶AccessKey Secret");
            DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
            // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
            IAcsClient client = new DefaultAcsClient(profile);
    
            VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
            videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
            videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定請求方法。
    
            List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
            Map<String, Object> task = new LinkedHashMap<String, Object>();
            task.put("dataId", UUID.randomUUID().toString());
            task.put("url", "請填寫公網可訪問的視頻HTTP、HTTPS URL地址");
    
            tasks.add(task);
            /**
             * 設置要檢測的場景。計費是依據此處傳遞的場景計算。
             * 視頻默認1秒截取一幀,您可以自行控制截幀頻率。收費按照視頻的截幀數量以及每一幀的檢測場景計算。
             * 舉例:1分鐘的視頻截幀60張,檢測色情(對應場景參數porn)和暴恐涉政(對應場景參數terrorism)2個場景,收費按照60張色情+60張暴恐涉政進行計費。
             */
            JSONObject data = new JSONObject();
            data.put("scenes", Arrays.asList("porn", "terrorism"));
            data.put("tasks", tasks);
            data.put("callback", "http://www.aliyundoc.com/xxx.json");
            data.put("seed", "yourPersonalSeed");
    
            videoAsyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
    
            /**
             * 請務必設置超時時間。
             */
            videoAsyncScanRequest.setConnectTimeout(3000);
            videoAsyncScanRequest.setReadTimeout(6000);
            try {
                HttpResponse httpResponse = client.doAction(videoAsyncScanRequest);
    
                if (httpResponse.isSuccess()) {
                    JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                    System.out.println(JSON.toJSONString(scrResponse, true));
                    int requestCode = scrResponse.getIntValue("code");
                    // 每一個視頻的檢測結果。
                    JSONArray taskResults = scrResponse.getJSONArray("data");
                    if (200 == requestCode) {
                        for (Object taskResult : taskResults) {
                            // 單個視頻的處理結果。
                            int taskCode = ((JSONObject) taskResult).getIntValue("code");
                            if (200 == taskCode) {
                                // 保存taskId用于輪詢結果。
                                System.out.println(((JSONObject) taskResult).getString("taskId"));
                            } else {
                                // 單個視頻處理失敗,原因視具體的情況詳細分析。
                                System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                            }
                        }
                    } else {
                        /**
                         * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                         */
                        System.out.println("the whole scan request failed. response:" + JSON.toJSONString(scrResponse));
                    }
                } else {
                    System.out.println("response not success. status:" + httpResponse.getStatus());
                }
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }
  • 傳本地視頻文件進行檢測

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.green.extension.uploader.ClientUploader;
    import com.aliyuncs.green.model.v20180509.VideoAsyncScanRequest;
    import com.aliyuncs.http.FormatType;
    import com.aliyuncs.http.HttpResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.UUID;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            /**
             * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
             * 常見獲取環境變量方式:
             * 方式一:
             *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方式二:
             *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-shanghai",
                    "建議從環境變量中獲取RAM用戶AccessKey ID",
                    "建議從環境變量中獲取RAM用戶AccessKey Secret");
            DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
            // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
            IAcsClient client = new DefaultAcsClient(profile);
    
            VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
            videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
            videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定請求方法。
    
            /**
             * 如果您要檢測的文件存儲在本地服務器上,可以通過下述代碼生成URL作為視頻地址傳遞到服務端進行檢測。
             */
            String url = null;
            ClientUploader uploader = ClientUploader.getVideoClientUploader(profile, false);
            try {
                url = uploader.uploadFile("您的本地文件的絕對路徑");
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
            Map<String, Object> task = new LinkedHashMap<String, Object>();
            task.put("dataId", UUID.randomUUID().toString());
            task.put("url", url);
    
            tasks.add(task);
            /**
             * 設置要檢測的場景。計費是依據此處傳遞的場景計算。
             * 視頻默認1秒截取一幀,您可以自行控制截幀頻率。收費按照視頻的截幀數量以及每一幀的檢測場景進行計算。
             * 舉例:1分鐘的視頻截幀60張,檢測色情(對應場景參數porn)和暴恐涉政(對應場景參數terrorism)2個場景,收費按照60張色情+60張暴恐涉政進行計算。
             */
            JSONObject data = new JSONObject();
            data.put("scenes", Arrays.asList("porn", "terrorism"));
            data.put("tasks", tasks);
            data.put("callback", "http://www.aliyundoc.com/xxx.json");
            data.put("seed", "yourPersonalSeed");
    
            videoAsyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
    
            /**
             * 請務必設置超時時間。
             */
            videoAsyncScanRequest.setConnectTimeout(3000);
            videoAsyncScanRequest.setReadTimeout(10000);
            try {
                HttpResponse httpResponse = client.doAction(videoAsyncScanRequest);
    
                if (httpResponse.isSuccess()) {
                    JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                    System.out.println(JSON.toJSONString(scrResponse, true));
                    int requestCode = scrResponse.getIntValue("code");
                    // 每一個視頻的檢測結果。
                    JSONArray taskResults = scrResponse.getJSONArray("data");
                    if (200 == requestCode) {
                        for (Object taskResult : taskResults) {
                            // 單個視頻的處理結果。
                            int taskCode = ((JSONObject) taskResult).getIntValue("code");
                            if (200 == taskCode) {
                                // 保存taskId用于輪詢結果。
                                System.out.println(((JSONObject) taskResult).getString("taskId"));
                            } else {
                                // 單個視頻處理失敗,原因視具體的情況詳細分析。
                                System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                            }
                        }
                    } else {
                        /**
                         * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                         */
                        System.out.println("the whole image scan request failed. response:" + JSON.toJSONString(scrResponse));
                    }
                } else {
                    System.out.println("response not success. status:" + httpResponse.getStatus());
                }
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }
  • 傳視頻文件二進制數據進行檢測

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.green.extension.uploader.ClientUploader;
    import com.aliyuncs.green.model.v20180509.VideoAsyncScanRequest;
    import com.aliyuncs.http.FormatType;
    import com.aliyuncs.http.HttpResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.UUID;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            /**
             * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
             * 常見獲取環境變量方式:
             * 方式一:
             *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方式二:
             *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-shanghai",
                    "建議從環境變量中獲取RAM用戶AccessKey ID",
                    "建議從環境變量中獲取RAM用戶AccessKey Secret");
            DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
            // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
            IAcsClient client = new DefaultAcsClient(profile);
    
            VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
            videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
            videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定請求方法。
    
            /**
             * 如果您要檢測的文件存儲在本地服務器上,可以通過下述代碼生成URL作為視頻地址傳遞到服務端進行檢測。
             */
            ClientUploader uploader = ClientUploader.getVideoClientUploader(profile, false);
            byte[] videoBytes = null;
            String url = null;
            try {
                // 讀取本地文件作為二進制數據當做輸入做為示例。實際使用中請直接替換成您的視頻二進制數據。
                videoBytes = FileUtils.readFileToByteArray(new File("您的本地文件路徑"));
                // 上傳到服務端。
                url = uploader.uploadBytes(videoBytes);
            } catch (Exception e) {
                System.out.println("upload file to server fail." + e.toString());
            }
    
            List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
            Map<String, Object> task = new LinkedHashMap<String, Object>();
            task.put("dataId", UUID.randomUUID().toString());
            task.put("url", url);
    
            tasks.add(task);
            /**
             * 設置要檢測的場景。計費依據此處傳遞的場景計算。
             * 視頻默認1秒截取一幀,您可以自行控制截幀頻率。收費按照視頻的截幀數量以及每一幀的檢測場景進行計算。
             * 舉例:1分鐘的視頻截幀60張,檢測色情(對應場景參數porn)和暴恐涉政(對應場景參數terrorism)2個場景,收費按照60張色情+60張暴恐涉政進行計算。
             */
            JSONObject data = new JSONObject();
            data.put("scenes", Arrays.asList("porn", "terrorism"));
            data.put("tasks", tasks);
            data.put("callback", "http://www.aliyundoc.com/xxx.json");
            data.put("seed", "yourPersonalSeed");
    
            videoAsyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
    
            /**
             * 請務必設置超時時間。
             */
            videoAsyncScanRequest.setConnectTimeout(3000);
            videoAsyncScanRequest.setReadTimeout(10000);
            try {
                HttpResponse httpResponse = client.doAction(videoAsyncScanRequest);
    
                if (httpResponse.isSuccess()) {
                    JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                    System.out.println(JSON.toJSONString(scrResponse, true));
                    int requestCode = scrResponse.getIntValue("code");
                    // 每一個視頻的檢測結果。
                    JSONArray taskResults = scrResponse.getJSONArray("data");
                    if (200 == requestCode) {
                        for (Object taskResult : taskResults) {
                            // 單個視頻的處理結果。
                            int taskCode = ((JSONObject) taskResult).getIntValue("code");
                            if (200 == taskCode) {
                                // 保存taskId用于輪詢結果。
                                System.out.println(((JSONObject) taskResult).getString("taskId"));
                            } else {
                                // 單個視頻處理失敗,原因視具體的情況詳細分析。
                                System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                            }
                        }
                    } else {
                        /**
                         * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                         */
                        System.out.println("the whole scan request failed. response:" + JSON.toJSONString(scrResponse));
                    }
                } else {
                    System.out.println("response not success. status:" + httpResponse.getStatus());
                }
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }
  • 傳視頻直播流進行檢測

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.green.model.v20180509.VideoAsyncScanRequest;
    import com.aliyuncs.http.FormatType;
    import com.aliyuncs.http.HttpResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            /**
             * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
             * 常見獲取環境變量方式:
             * 方式一:
             *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方式二:
             *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-shanghai",
                    "建議從環境變量中獲取RAM用戶AccessKey ID",
                    "建議從環境變量中獲取RAM用戶AccessKey Secret");
            DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
            // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
            IAcsClient client = new DefaultAcsClient(profile);
    
            VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
            videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
            videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定請求方法。
    
            List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
            Map<String, Object> task = new LinkedHashMap<String, Object>();
            task.put("dataId", "業務ID");
            // URL填寫直播流地址。
            task.put("url", "待檢測視頻鏈接地址");
    
            tasks.add(task);
            /**
             * 設置要檢測的場景。計費依據此處傳遞的場景計算。
             * 視頻默認1秒截取一幀,您可以自行控制截幀頻率。收費按照視頻的截幀數量以及每一幀的檢測場景進行計算。
             * 舉例:1分鐘的視頻截幀60張,檢測色情(對應場景參數porn)和暴恐涉政(對應場景參數terrorism)2個場景,收費按照60張色情+60張暴恐涉政進行計算。
             */
            JSONObject data = new JSONObject();
            data.put("scenes", Arrays.asList("porn", "terrorism"));
            data.put("live", true);
            data.put("tasks", tasks);
            data.put("callback", "您的回調地址");
            data.put("seed", "yourPersonalSeed");
    
            videoAsyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
    
            /**
             * 請務必設置超時時間。
             */
            videoAsyncScanRequest.setConnectTimeout(3000);
            videoAsyncScanRequest.setReadTimeout(10000);
            try {
                HttpResponse httpResponse = client.doAction(videoAsyncScanRequest);
    
                if (httpResponse.isSuccess()) {
                    JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                    System.out.println(JSON.toJSONString(scrResponse, true));
                    int requestCode = scrResponse.getIntValue("code");
                    // 每一個視頻的檢測結果。
                    JSONArray taskResults = scrResponse.getJSONArray("data");
                    if (200 == requestCode) {
                        for (Object taskResult : taskResults) {
                            // 單個視頻的處理結果。
                            int taskCode = ((JSONObject) taskResult).getIntValue("code");
                            if (200 == taskCode) {
                                // 保存taskId用于輪詢結果。
                                System.out.println(((JSONObject) taskResult).getString("taskId"));
                            } else {
                                // 單個視頻處理失敗,原因視具體的情況詳細分析。
                                System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                            }
                        }
                    } else {
                        /**
                         * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                         */
                        System.out.println("the whole scan request failed. response:" + JSON.toJSONString(scrResponse));
                    }
                } else {
                    System.out.println("response not success. status:" + httpResponse.getStatus());
                }
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }
  • 傳視頻語音進行綜合檢測

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.green.model.v20180509.VideoAsyncScanRequest;
    import com.aliyuncs.http.FormatType;
    import com.aliyuncs.http.HttpResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    public class Main {
    
        public static void main(String[] args) throws Exception {
            /**
             * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
             * 常見獲取環境變量方式:
             * 方式一:
             *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方式二:
             *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-shanghai",
                    "建議從環境變量中獲取RAM用戶AccessKey ID",
                    "建議從環境變量中獲取RAM用戶AccessKey Secret");
            DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
            // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
            IAcsClient client = new DefaultAcsClient(profile);
    
            VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
            videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
            videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定請求方法。
    
            List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
            Map<String, Object> task = new LinkedHashMap<String, Object>();
            task.put("dataId", "業務數據ID");
            // URL填寫直播流地址。
            task.put("url", "待檢測的視頻鏈接地址");
    
            tasks.add(task);
            /**
             * 設置要檢測的場景。計費依據此處傳遞的場景計算。
             * 視頻默認1秒截取一幀,您可以自行控制截幀頻率。收費按照視頻的截幀數量以及每一幀的檢測場景進行計算。
             * 舉例:1分鐘的視頻截幀60張,檢測色情(對應場景參數porn)和暴恐涉政(對應場景參數terrorism)2個場景,收費按照60張色情+60張暴恐涉政進行計費。
             */
            JSONObject data = new JSONObject();
            data.put("scenes", Arrays.asList("porn", "terrorism"));
            data.put("live", true);
            data.put("tasks", tasks);
            data.put("callback", "您的回調地址");
            data.put("seed", "yourPersonalSeed");
            /**
             * 如果檢測視頻畫面的同時需要檢測語音是否有風險內容,傳遞以下參數。
             * 注意語音的計費是按照時長進行,即該視頻的時長*語音反垃圾的單價。
             */
            data.put("audioScenes", Arrays.asList("antispam"));
    
            videoAsyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
    
            /**
             * 請務必設置超時時間。
             */
            videoAsyncScanRequest.setConnectTimeout(3000);
            videoAsyncScanRequest.setReadTimeout(10000);
            try {
                HttpResponse httpResponse = client.doAction(videoAsyncScanRequest);
    
                if (httpResponse.isSuccess()) {
                    JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                    System.out.println(JSON.toJSONString(scrResponse, true));
                    int requestCode = scrResponse.getIntValue("code");
                    // 每一個視頻的檢測結果。
                    JSONArray taskResults = scrResponse.getJSONArray("data");
                    if (200 == requestCode) {
                        for (Object taskResult : taskResults) {
                            // 單個視頻的處理結果。
                            int taskCode = ((JSONObject) taskResult).getIntValue("code");
                            if (200 == taskCode) {
                                // 保存taskId,用于輪詢結果。
                                System.out.println(((JSONObject) taskResult).getString("taskId"));
                            } else {
                                // 單個視頻處理失敗,原因視具體的情況詳細分析。
                                System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                            }
                        }
                    } else {
                        /**
                         * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                         */
                        System.out.println("the whole scan request failed. response:" + JSON.toJSONString(scrResponse));
                    }
                } else {
                    System.out.println("response not success. status:" + httpResponse.getStatus());
                }
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

查詢視頻異步檢測結果

接口

描述

支持的地域

VideoAsyncScanResultsRequest

查詢視頻異步檢測任務的結果。

說明

該方法需要輪詢結果,建議使用callback的方式獲取結果。

  • cn-shanghai:華東2(上海)

  • cn-beijing:華北2(北京)

  • cn-shenzhen:華南1(深圳)

  • ap-southeast-1:新加坡

示例代碼

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.green.model.v20180509.VideoAsyncScanResultsRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) throws Exception {
        /**
         * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
         * 常見獲取環境變量方式:
         * 方式一:
         *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * 方式二:
         *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-shanghai",
                "建議從環境變量中獲取RAM用戶AccessKey ID",
                "建議從環境變量中獲取RAM用戶AccessKey Secret");
        DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
        // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
        IAcsClient client = new DefaultAcsClient(profile);

        VideoAsyncScanResultsRequest videoAsyncScanResultsRequest = new VideoAsyncScanResultsRequest();
        videoAsyncScanResultsRequest.setAcceptFormat(FormatType.JSON);

        List<String> taskList = new ArrayList<String>();
        // 這里添加要查詢的taskId。提交任務的時候需要自行保存taskId。
        taskList.add("視頻檢測任務ID");

        videoAsyncScanResultsRequest.setHttpContent(JSON.toJSONString(taskList).getBytes("UTF-8"), "UTF-8", FormatType.JSON);

        /**
         * 請務必設置超時時間。
         */
        videoAsyncScanResultsRequest.setConnectTimeout(3000);
        videoAsyncScanResultsRequest.setReadTimeout(6000);
        try {
            HttpResponse httpResponse = client.doAction(videoAsyncScanResultsRequest);
            if (httpResponse.isSuccess()) {
                JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                System.out.println(JSON.toJSONString(scrResponse, true));
                int requestCode = scrResponse.getIntValue("code");
                // 每一個視頻的檢測結果。
                JSONArray taskResults = scrResponse.getJSONArray("data");
                if (200 == requestCode) {
                    for (Object taskResult : taskResults) {
                        // 單個視頻的處理結果。
                        int taskCode = ((JSONObject) taskResult).getIntValue("code");
                        if (280 == taskCode) {
                            // 檢測中。
                            // taskId。
                            System.out.println(((JSONObject) taskResult).getString("taskId"));
                        } else if (200 == taskCode) {
                            // taskId。
                            System.out.println(((JSONObject) taskResult).getString("taskId"));
                            // 檢測結果。
                            JSONArray results = ((JSONObject) taskResult).getJSONArray("results");
                            for (Object result : results) {
                                // 視頻檢測結果的分類。
                                System.out.println(((JSONObject) result).getString("label"));
                                // 置信度分數,取值范圍:0(表示置信度最低)~100(表示置信度最高)。
                                System.out.println(((JSONObject) result).getString("rate"));
                                // 視頻檢測場景,與調用請求中的檢測場景一致。
                                System.out.println(((JSONObject) result).getString("scene"));
                                // 建議您執行的后續操作。取值:
                                // pass:結果正常,無需進行其他操作。
                                // review:結果不確定,需要人工審核。
                                // block:結果違規,建議直接刪除或者限制公開。
                                System.out.println(((JSONObject) result).getString("suggestion"));
                            }
                        } else {
                            // 單個視頻處理失敗,原因視具體的情況詳細分析。
                            System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                        }
                    }
                } else {
                    /**
                     * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                     */
                    System.out.println("the whole scan request failed. response:" + JSON.toJSONString(scrResponse));
                }
            } else {
                System.out.println("response not success. status:" + httpResponse.getStatus());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

提交視頻同步檢測任務

接口

描述

支持的地域

VideoSyncScanRequest

提交視頻同步檢測任務,同步檢測視頻中的風險內容。

說明

同步檢測只支持傳遞視頻幀序列,不支持檢測視頻文件,推薦使用異步檢測接口。

  • cn-shanghai:華東2(上海)

  • cn-beijing:華北2(北京)

  • cn-shenzhen:華南1(深圳)

  • ap-southeast-1:新加坡

示例代碼

說明

以下代碼中使用幀序列的方式提交待檢測的視頻。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.green.model.v20180509.VideoSyncScanRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class Main {

    public static void main(String[] args) throws Exception {
        /**
         * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
         * 常見獲取環境變量方式:
         * 方式一:
         *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * 方式二:
         *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-shanghai",
                "建議從環境變量中獲取RAM用戶AccessKey ID",
                "建議從環境變量中獲取RAM用戶AccessKey Secret");
        DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
        // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
        IAcsClient client = new DefaultAcsClient(profile);

        VideoSyncScanRequest videoSyncScanRequest = new VideoSyncScanRequest();
        videoSyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
        videoSyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定請求方法。

        List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
        Map<String, Object> task = new LinkedHashMap<String, Object>();
        task.put("dataId", UUID.randomUUID().toString());

        List<Map<String, Object>> frames = new ArrayList<Map<String, Object>>();
        Map<String, Object> frame1 = new LinkedHashMap<String, Object>();
        frame1.put("offset", 0);
        frame1.put("url", "視頻截幀地址1");

        Map<String, Object> frame2 = new LinkedHashMap<String, Object>();
        frame2.put("offset", 5);
        frame2.put("url", "視頻截幀地址2");

        Map<String, Object> frame3 = new LinkedHashMap<String, Object>();
        frame3.put("offset", 10);
        frame3.put("url", "視頻截幀地址3");
        frames.addAll(Arrays.asList(frame1, frame2, frame3));

        task.put("frames", frames);
        tasks.add(task);
        /**
         * 設置要檢測的場景。計費依據此處傳遞的場景計算。
         * 視頻默認1秒截取一幀,您可以自行控制截幀頻率,收費按照視頻的截幀數量以及每一幀的檢測場景進行計算。
         * 舉例:1分鐘的視頻截幀60張,檢測色情(對應場景參數porn)和暴恐涉政(對應場景參數terrorism)2個場景,收費按照60張色情+60張暴恐涉政進行計算。
         */
        JSONObject data = new JSONObject();
        data.put("scenes", Arrays.asList("porn", "terrorism"));
        data.put("tasks", tasks);

        videoSyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);

        /**
         * 請務必設置超時時間。
         */
        videoSyncScanRequest.setConnectTimeout(3000);
        videoSyncScanRequest.setReadTimeout(10000);
        try {
            HttpResponse httpResponse = client.doAction(videoSyncScanRequest);

            if (httpResponse.isSuccess()) {
                JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                System.out.println(JSON.toJSONString(scrResponse, true));
                int requestCode = scrResponse.getIntValue("code");
                // 每一個視頻的檢測結果。
                JSONArray taskResults = scrResponse.getJSONArray("data");
                if (200 == requestCode) {
                    for (Object taskResult : taskResults) {
                        // 單個視頻的處理結果。
                        int taskCode = ((JSONObject) taskResult).getIntValue("code");
                        if (200 == taskCode) {
                            // taskId。
                            System.out.println(((JSONObject) taskResult).getString("taskId"));
                            // 檢測結果。
                            JSONArray results = scrResponse.getJSONArray("results");
                            for (Object result : results) {
                                // 視頻檢測結果的分類。
                                System.out.println(((JSONObject) result).getString("label"));
                                // 置信度分數,取值范圍:0(表示置信度最低)~100(表示置信度最高)。
                                System.out.println(((JSONObject) result).getString("rate"));
                                // 視頻檢測場景,和調用請求中的場景對應。
                                System.out.println(((JSONObject) result).getString("scene"));
                                // 建議您執行的后續操作。取值:
                                // pass:結果正常,無需進行其余操作。
                                // review:結果不確定,需要進行人工審核。
                                // block:結果違規,建議直接刪除或者限制公開。
                                System.out.println(((JSONObject) result).getString("suggestion"));
                            }
                        } else {
                            // 單個視頻處理失敗,原因視具體的情況詳細分析。
                            System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));
                        }
                    }
                } else {
                    /**
                     * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                     */
                    System.out.println("the whole scan request failed. response:" + JSON.toJSONString(scrResponse));
                }
            } else {
                System.out.println("response not success. status:" + httpResponse.getStatus());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

視頻檢測結果反饋

如果您認為視頻檢測結果與您的預期不符,可以通過視頻檢測結果反饋接口,對檢測結果進行糾正(系統會根據您反饋的結果,將視頻截幀添加到相似圖片的黑名單庫或者白名單庫)。當您再次提交相似的內容進行檢測時,以您反饋的label返回結果。

關于接口的說明,請參見檢測結果反饋

接口

描述

支持的Region

VideoFeedbackRequest

提交視頻檢測結果的反饋,以人工反饋的檢測結果糾正算法檢測結果。

  • cn-shanghai:華東2(上海)

  • cn-beijing:華北2(北京)

  • cn-shenzhen:華南1(深圳)

  • ap-southeast-1:新加坡

示例代碼

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.green.model.v20180509.VideoFeedbackRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class VideoFeedbackSample {

    public static void main(String[] args) throws Exception {
        /**
         * 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 
         * 常見獲取環境變量方式:
         * 方式一:
         *     獲取RAM用戶AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     獲取RAM用戶AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * 方式二:
         *     獲取RAM用戶AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     獲取RAM用戶AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-shanghai",
                "建議從環境變量中獲取RAM用戶AccessKey ID",
                "建議從環境變量中獲取RAM用戶AccessKey Secret");
        DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
        // 注意:此處實例化的client盡可能重復使用,提升檢測性能。避免重復建立連接。
        IAcsClient client = new DefaultAcsClient(profile);

        VideoFeedbackRequest videoFeedbackRequest = new VideoFeedbackRequest();
        // 指定API返回格式。
        videoFeedbackRequest.setAcceptFormat(FormatType.JSON);
        // 指定請求方法。
        videoFeedbackRequest.setMethod(MethodType.POST);
        videoFeedbackRequest.setEncoding("utf-8");
        // 支持HTTP和HTTPS。
        videoFeedbackRequest.setProtocol(ProtocolType.HTTP);

        List<JSONObject> framesList = new ArrayList();
        JSONObject frame1 = new JSONObject();
        frame1.put("url", "視頻截幀鏈接_1");
        frame1.put("offset", 100);
        framesList.add(frame1);
        // scenes:檢測場景,支持指定多個場景。
        // suggestion:期望的檢測結果,pass:正常;block:違規。
        JSONObject httpBody = new JSONObject();
        httpBody.put("dataId", "檢測數據ID");
        httpBody.put("taskId", "視頻審核任務ID");
        httpBody.put("url", "視頻鏈接");
        httpBody.put("suggestion", "block");
        httpBody.put("frames", framesList);
        httpBody.put("scenes", Arrays.asList("ad", "terrorism"));
        httpBody.put("note", "備注信息");

        videoFeedbackRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()),
                "UTF-8", FormatType.JSON);

        videoFeedbackRequest.setConnectTimeout(3000);
        videoFeedbackRequest.setReadTimeout(10000);
        try {
            HttpResponse httpResponse = client.doAction(videoFeedbackRequest);

            if (httpResponse.isSuccess()) {
                JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
                System.out.println(JSON.toJSONString(scrResponse, true));
                int requestCode = scrResponse.getIntValue("code");
                if (200 == requestCode) {
                    // 調用成功
                } else {
                    /**
                     * 表明請求整體處理失敗,原因視具體的情況詳細分析。
                     */
                    System.out.println("the whole request failed. response:" + JSON.toJSONString(scrResponse));
                }
            } else {
                System.out.println("response not success. status:" + httpResponse.getStatus());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}