Video Moderation 2.0 supports API calls through software development kits (SDKs) and native HTTPS requests. We recommend that you use an SDK to simplify integration. SDKs handle details such as signature verification and body format construction. This topic describes how to integrate with Video Moderation 2.0.
Step 1: Activate the service
Go to the Activate Content Moderation 2.0 service page to activate the Video Moderation 2.0 service. After you call API operations, you are automatically charged based on your usage. For more information, see Billing.
After you activate the Video Moderation 2.0 service, the default billing method is pay-as-you-go. Daily fees are calculated based on your actual usage. You are not charged if you do not call the service.
Step 2: Grant permissions to a RAM user
Before you integrate with the SDK or API, grant permissions to a Resource Access Management (RAM) user. Create an AccessKey pair for the RAM user. You must use the AccessKey pair to complete identity verification when you call Alibaba Cloud API operations. For more information, see Obtain an AccessKey pair.
Procedure
Log on to the RAM console as a RAM administrator.
- Create a RAM user.
For more information, see Create a RAM user.
- Grant the
AliyunYundunGreenWebFullAccesssystem policy to the RAM user.For more information, see Grant permissions to a RAM user.
After completing the preceding operations, you can call the Content Moderation API as the RAM user.
Step 3: Install and integrate with the video moderation service
The following regions are supported:
Region | Public endpoint | VPC endpoint | Supported services |
Singapore | green-cip.ap-southeast-1.aliyuncs.com | green-cip-vpc.ap-southeast-1.aliyuncs.com | videoDetection_global, videoDetectionByVL_global, liveStreamDetection_global, liveStreamDetectionByVL_global |
US (Virginia) | https://green-cip.us-east-1.aliyuncs.com | https://green-cip-vpc.us-east-1.aliyuncs.com | videoDetection_global, liveStreamDetection_global |
US (Silicon Valley) | https://green-cip.us-west-1.aliyuncs.com | Not available | |
Germany (Frankfurt) | green-cip.eu-central-1.aliyuncs.com | Not available |
If you need SDK sample code in other programming languages, you can debug API operations in OpenAPI Explorer. This tool automatically generates SDK sample code for the corresponding API operations. The following API operations are available for online debugging:
In Alibaba Cloud SDK code, you can create a default access credential by defining ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables. When you call API operations of Alibaba Cloud services, the system directly accesses the credential, reads your AccessKey pair, and then automatically completes authentication. Before you use the SDK sample code, you must configure environment variables. For more information, see Configure credentials.
For more information about the API parameters, see Video File Moderation 2.0 API and Live Stream Moderation 2.0 API.
SDK for Java
Java 1.8 or later is supported.
For the source code, see SDK source code for Java or SDK source code for Java (OSS path).
The following three types of video moderation are supported.
Detecting publicly accessible videos
Scenarios
If the video that you want to moderate is accessible over the internet, Video Moderation 2.0 can retrieve the file using the URL and then perform moderation.
Add the following dependency to the pom.xml file to use the SDK in your Maven project.
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>Integrate with the SDK for Java.
Sample code for submitting a video moderation task
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationRequest; import com.aliyun.green20220302.models.VideoModerationResponse; import com.aliyun.green20220302.models.VideoModerationResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); serviceParameters.put("url", "https://xxx.oss.aliyuncs.com/xxx.mp4"); VideoModerationRequest videoModerationRequest = new VideoModerationRequest(); // Moderation service: videoDetection_global videoModerationRequest.setService("videoDetection_global"); videoModerationRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResponse response = client.videoModeration(videoModerationRequest); if (response.getStatusCode() == 200) { VideoModerationResponseBody result = response.getBody(); System.out.println(JSON.toJSONString(result)); System.out.println("requestId = " + result.getRequestId()); System.out.println("code = " + result.getCode()); System.out.println("msg = " + result.getMessage()); Integer code = result.getCode(); if (200 == code) { VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData(); System.out.println("taskId = [" + data.getTaskId() + "]"); } else { System.out.println("Video moderation failed. Code:" + code); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }Code example: Retrieving a video detection task
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationResultRequest; import com.aliyun.green20220302.models.VideoModerationResultResponse; import com.aliyun.green20220302.models.VideoModerationResultResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationResultDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // The ID of the task that is returned when you submit the task. serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest(); // Moderation service: videoDetection_global videoModerationResultRequest.setService("videoDetection_global"); videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest); if (response.getStatusCode() == 200) { VideoModerationResultResponseBody result = response.getBody(); System.out.println("requestId=" + result.getRequestId()); System.out.println("code=" + result.getCode()); System.out.println("msg=" + result.getMessage()); if (200 == result.getCode()) { VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData(); System.out.println("dataId = " + data.getDataId()); System.out.println("riskLevel = " + data.getRiskLevel()); System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult())); System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult())); } else { System.out.println("Failed to query the video moderation result. Code:" + result.getCode()); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }Sample code for canceling a live stream moderation task
import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationCancelRequest; import com.aliyun.green20220302.models.VideoModerationCancelResponse; import com.aliyun.green20220302.models.VideoModerationCancelResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationCancelDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // The ID of the task that is returned when you submit the task. serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest(); videoModerationCancelRequest.setService("liveStreamDetection_global"); videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest); if (response.getStatusCode() == 200) { VideoModerationCancelResponseBody result = response.getBody(); System.out.println("requestId=" + result.getRequestId()); System.out.println("code=" + result.getCode()); System.out.println("msg=" + result.getMessage()); if (200 != result.getCode()) { System.out.println("Failed to cancel the video moderation task. Code:" + result.getCode()); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
Detecting local videos
Scenarios
If the video that you want to moderate is on a local machine and does not have a public URL, you can upload the video to an Object Storage Service (OSS) bucket that is provided by Content Moderation. Video Moderation 2.0 can directly access OSS, retrieve the video content, and then perform moderation.
Add the following dependency to the pom.xml file to use the SDK in your Maven project.
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>Install the OSS SDK:
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.3</version> </dependency>Integrate with the SDK for Java.
Sample code for submitting a video moderation task
import com.alibaba.fastjson.JSON; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.DescribeUploadTokenResponse; import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody; import com.aliyun.green20220302.models.VideoModerationRequest; import com.aliyun.green20220302.models.VideoModerationResponse; import com.aliyun.green20220302.models.VideoModerationResponseBody; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.UUID; public class LocalVideoModeration { //Specifies whether the service is deployed in a VPC. public static boolean isVPC = false; //The token used to upload the file. The key is the endpoint and the value is the token. public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>(); //The client for file upload requests. public static OSS ossClient = null; /** * Create a request client. * * @param accessKeyId * @param accessKeySecret * @param endpoint * @return * @throws Exception */ public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { Config config = new Config(); config.setAccessKeyId(accessKeyId); config.setAccessKeySecret(accessKeySecret); // Modify the region and endpoint as needed. config.setEndpoint(endpoint); return new Client(config); } /** * Create a file upload client. * * @param tokenData * @param isVPC */ public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) { //Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. if (isVPC) { ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken()); } else { ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken()); } } /** * Upload the file. * * @param filePath * @param tokenData * @return * @throws Exception */ public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception { String[] split = filePath.split("\\."); String objectName; if (split.length > 1) { objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1]; } else { objectName = tokenData.getFileNamePrefix() + UUID.randomUUID(); } PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath)); ossClient.putObject(putObjectRequest); return objectName; } public static VideoModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { //Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. Client client = createClient(accessKeyId, accessKeySecret, endpoint); RuntimeOptions runtime = new RuntimeOptions(); //The full path of the local file. Example: D:\localPath\exampleFile.mp4. String filePath = "D:\localPath\exampleFile.mp4"; //Obtain the token for file upload. if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) { DescribeUploadTokenResponse tokenResponse = client.describeUploadToken(); tokenMap.put(endpoint, tokenResponse.getBody().getData()); } //The client for file upload requests. getOssClient(tokenMap.get(endpoint), isVPC); //Upload the file. String objectName = uploadFile(filePath, tokenMap.get(endpoint)); // Construct moderation parameters. Map<String, String> serviceParameters = new HashMap<>(); //File upload information. serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName()); serviceParameters.put("ossObjectName", objectName); serviceParameters.put("dataId", UUID.randomUUID().toString()); VideoModerationRequest request = new VideoModerationRequest(); // Moderation service: videoDetection_global request.setService("videoDetection_global"); request.setServiceParameters(JSON.toJSONString(serviceParameters)); VideoModerationResponse response = null; try { response = client.videoModerationWithOptions(request, runtime); } catch (Exception e) { e.printStackTrace(); } return response; } public static void main(String[] args) throws Exception { /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ String accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable."; String accessKeySecret = "Obtain the AccessKey secret of your RAM user from an environment variable."; // Modify the region and endpoint as needed. VideoModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com"); try { // Print the moderation result. if (response != null) { if (response.getStatusCode() == 200) { VideoModerationResponseBody body = response.getBody(); System.out.println(JSON.toJSONString(body)); System.out.println("requestId = " + body.getRequestId()); System.out.println("code = " + body.getCode()); System.out.println("msg = " + body.getMessage()); Integer code = body.getCode(); if (200 == code) { VideoModerationResponseBody.VideoModerationResponseBodyData data = body.getData(); System.out.println("taskId = [" + data.getTaskId() + "]"); } else { System.out.println("Video moderation failed. Code:" + code); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } } catch (Exception e) { e.printStackTrace(); } } }Code example for a video detection task
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationResultRequest; import com.aliyun.green20220302.models.VideoModerationResultResponse; import com.aliyun.green20220302.models.VideoModerationResultResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationResultDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // The ID of the task that is returned when you submit the task. serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest(); // Moderation service: videoDetection_global videoModerationResultRequest.setService("videoDetection_global"); videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest); if (response.getStatusCode() == 200) { VideoModerationResultResponseBody result = response.getBody(); System.out.println("requestId=" + result.getRequestId()); System.out.println("code=" + result.getCode()); System.out.println("msg=" + result.getMessage()); if (200 == result.getCode()) { VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData(); System.out.println("dataId = " + data.getDataId()); System.out.println("riskLevel = " + data.getRiskLevel()); System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult())); System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult())); } else { System.out.println("Failed to query the video moderation result. Code:" + result.getCode()); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }Sample code to cancel a live stream moderation task
import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationCancelRequest; import com.aliyun.green20220302.models.VideoModerationCancelResponse; import com.aliyun.green20220302.models.VideoModerationCancelResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationCancelDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // The ID of the task that is returned when you submit the task. serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest(); videoModerationCancelRequest.setService("liveStreamDetection_global"); videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest); if (response.getStatusCode() == 200) { VideoModerationCancelResponseBody result = response.getBody(); System.out.println("requestId=" + result.getRequestId()); System.out.println("code=" + result.getCode()); System.out.println("msg=" + result.getMessage()); if (200 != result.getCode()) { System.out.println("Failed to cancel the video moderation task. Code:" + result.getCode()); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
Moderate videos in OSS
Scenarios
If the video file that you want to moderate is already stored in Object Storage Service (OSS), you can create a service role to grant Content Moderation the permissions to access OSS. Video Moderation 2.0 can retrieve the file from OSS through the service role and then perform moderation. Go to the Cloud Resource Access Authorization page to create a service role.
Add the following dependency to the pom.xml file to use the SDK in your Maven project.
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>Integrate with the SDK for Java.
Sample code for submitting a video moderation task
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationRequest; import com.aliyun.green20220302.models.VideoModerationResponse; import com.aliyun.green20220302.models.VideoModerationResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); serviceParameters.put("ossBucketName", "bucket_01"); serviceParameters.put("ossObjectName", "20240307/07/28/test.flv"); serviceParameters.put("ossRegionId", "ap-southeast-1"); VideoModerationRequest videoModerationRequest = new VideoModerationRequest(); // Moderation service: videoDetection_global videoModerationRequest.setService("videoDetection_global"); videoModerationRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResponse response = client.videoModeration(videoModerationRequest); if (response.getStatusCode() == 200) { VideoModerationResponseBody result = response.getBody(); System.out.println(JSON.toJSONString(result)); System.out.println("requestId = " + result.getRequestId()); System.out.println("code = " + result.getCode()); System.out.println("msg = " + result.getMessage()); Integer code = result.getCode(); if (200 == code) { VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData(); System.out.println("taskId = [" + data.getTaskId() + "]"); } else { System.out.println("Video moderation failed. Code:" + code); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }Sample code for a video detection task
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationResultRequest; import com.aliyun.green20220302.models.VideoModerationResultResponse; import com.aliyun.green20220302.models.VideoModerationResultResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationResultDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // The ID of the task that is returned when you submit the task. serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest(); // Moderation service: videoDetection_global videoModerationResultRequest.setService("videoDetection_global"); videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest); if (response.getStatusCode() == 200) { VideoModerationResultResponseBody result = response.getBody(); System.out.println("requestId=" + result.getRequestId()); System.out.println("code=" + result.getCode()); System.out.println("msg=" + result.getMessage()); if (200 == result.getCode()) { VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData(); System.out.println("dataId = " + data.getDataId()); System.out.println("riskLevel = " + data.getRiskLevel()); System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult())); System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult())); } else { System.out.println("Failed to query the video moderation result. Code:" + result.getCode()); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }Sample code for canceling a live stream moderation task
import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationCancelRequest; import com.aliyun.green20220302.models.VideoModerationCancelResponse; import com.aliyun.green20220302.models.VideoModerationCancelResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationCancelDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Common methods to obtain environment variables: * Method 1: * Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Method 2: * Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable."); config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable."); //Modify the region and endpoint as needed. config.setRegionId("ap-southeast-1"); config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com"); //Connection timeout in milliseconds (ms). config.setReadTimeout(6000); //Read timeout in milliseconds (ms). config.setConnectTimeout(3000); //Set the HTTP proxy. //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); //Set the HTTPS proxy. //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // The ID of the task that is returned when you submit the task. serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest(); videoModerationCancelRequest.setService("liveStreamDetection_global"); videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest); if (response.getStatusCode() == 200) { VideoModerationCancelResponseBody result = response.getBody(); System.out.println("requestId=" + result.getRequestId()); System.out.println("code=" + result.getCode()); System.out.println("msg=" + result.getMessage()); if (200 != result.getCode()) { System.out.println("Failed to cancel the video moderation task. Code:" + result.getCode()); } } else { System.out.println("Request failed. Status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
SDK for Python
Python 3.6 or later is supported.
For the source code, see SDK source code for Python.
The following three types of video moderation are supported.
Moderate videos accessible over the public internet
Scenarios
If the video that you want to moderate is accessible over the internet, Video Moderation 2.0 can retrieve the file using the URL and then perform moderation.
You can run the following command to install pip.
pip install alibabacloud_green20220302==2.2.11Integrate with the SDK for Python.
Sample code for submitting a video moderation task
#encoding:utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', #Connection timeout in milliseconds (ms). connect_timeout=3000, #Read timeout in milliseconds (ms). read_timeout=6000, # Modify the region and endpoint as needed. region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) serviceParameters = { 'url': 'https://xxx.oss.aliyuncs.com/xxx.mp4' } videoModerationRequest = models.VideoModerationRequest( # Moderation service: videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation(videoModerationRequest) if response.status_code == 200: # The request is successful. # Obtain the moderation result. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)Obtain video detection task results
# coding=utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', #Connection timeout in milliseconds (ms). connect_timeout=3000, #Read timeout in milliseconds (ms). read_timeout=6000, # Modify the region and endpoint as needed. region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # The ID of the task that is returned when you submit the task. serviceParameters = { "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****' } videoModerationResultRequest = models.VideoModerationResultRequest( # Moderation service: videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_result(videoModerationResultRequest) if response.status_code == 200: # The request is successful. # Obtain the moderation result. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)Sample code for canceling a live stream moderation task
# coding=utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', # Connection timeout in milliseconds (ms). connect_timeout=10000, # Read timeout in milliseconds (ms). read_timeout=3000, region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # The ID of the task that is returned when you submit the task. serviceParameters = { "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****' } videoModerationCancelRequest = models.VideoModerationCancelRequest( # Moderation service service='liveStreamDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_cancel(videoModerationCancelRequest) if response.status_code == 200: # The request is successful. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)
Detecting local videos
Scenarios
If the video that you want to moderate is on a local machine and does not have a public URL, you can upload the video to an Object Storage Service (OSS) bucket that is provided by Content Moderation. Video Moderation 2.0 can directly access OSS, retrieve the video content, and then perform moderation.
Run the following command to install pip.
pip install alibabacloud_green20220302==2.2.11Install the OSS SDK:
pip install oss2Integrate with the SDK for Python.
Sample code for submitting a video moderation task
from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_tea_util import models as util_models import json import uuid import oss2 import time config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', #Connection timeout in milliseconds (ms). connect_timeout=10000, #Read timeout in milliseconds (ms). read_timeout=10000, # Modify the region and endpoint as needed. region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) # Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. client = Client(config) bucket = None upload_token = None def get_oss_client(is_vpc): global upload_token global bucket if (upload_token == None) or int(upload_token.expiration) <= int(time.time()): response = client.describe_upload_token() upload_token = response.body.data auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token) end_point = upload_token.oss_internet_end_point if (is_vpc): end_point = upload_token.oss_internal_end_point bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name) def upload_file(file_name, is_vpc): get_oss_client(is_vpc) object_name = upload_token.file_name_prefix + str(uuid.uuid4()) + '.' + file_name.split('.')[-1] bucket.put_object_from_file(object_name, file_name) return object_name def video_moderation_by_local_file(file_path, is_vpc): # 1. Upload the file. object_name = upload_file(file_path, is_vpc) # 2. Perform video moderation. service_parameters = { 'dataId': str(uuid.uuid4()), 'ossBucketName': upload_token.bucket_name, 'ossObjectName': object_name } video_moderation_request = models.VideoModerationRequest( # Moderation service: videoDetection_global service='videoDetection_global', service_parameters=json.dumps(service_parameters) ) # Create a RuntimeObject instance and configure runtime parameters. runtime = util_models.RuntimeOptions() runtime.read_timeout = 10000 runtime.connect_timeout = 10000 try: global client response = client.video_moderation_with_options(video_moderation_request, runtime) if response.status_code == 200: # The request is successful. # Obtain the moderation result. result = response.body print('Request successful. Result:{}'.format(result)) if result.code == 200: result_data = result.data print('result: {}'.format(result_data)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err) if __name__ == '__main__': # The path of the local file. file_path = 'D:/test/video/b652.mp4' # Specifies whether the service is deployed in a VPC. is_vpc = False # True video_moderation_by_local_file(file_path, is_vpc)Retrieving task results for video detection
# coding=utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', #Connection timeout in milliseconds (ms). connect_timeout=3000, #Read timeout in milliseconds (ms). read_timeout=6000, # Modify the region and endpoint as needed. region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # The ID of the task that is returned when you submit the task. serviceParameters = { "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****' } videoModerationResultRequest = models.VideoModerationResultRequest( # Moderation service: videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_result(videoModerationResultRequest) if response.status_code == 200: # The request is successful. # Obtain the moderation result. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)Sample code for canceling a live stream moderation task
# coding=utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', # Connection timeout in milliseconds (ms). connect_timeout=10000, # Read timeout in milliseconds (ms). read_timeout=3000, region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # The ID of the task that is returned when you submit the task. serviceParameters = { "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****' } videoModerationCancelRequest = models.VideoModerationCancelRequest( # Moderation service service='liveStreamDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_cancel(videoModerationCancelRequest) if response.status_code == 200: # The request is successful. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)
Moderate videos in OSS
Scenarios
If the video file that you want to moderate is already stored in Object Storage Service (OSS), you can create a service role to grant Content Moderation the permissions to access OSS. Video Moderation 2.0 can retrieve the file from OSS through the service role and then perform moderation. Go to the Cloud Resource Access Authorization page to create a service role.
Run the following command to install pip.
pip install alibabacloud_green20220302==2.2.11Integrate with the SDK for Python.
Sample code for submitting a video moderation task
#encoding:utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', #Connection timeout in milliseconds (ms). connect_timeout=3000, #Read timeout in milliseconds (ms). read_timeout=6000, # Modify the region and endpoint as needed. region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) serviceParameters = { 'ossBucketName': 'bucket_01', 'ossObjectName': '20240307/07/28/test.flv', 'ossRegionId': 'ap-southeast-1' } videoModerationRequest = models.VideoModerationRequest( # Moderation service: videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation(videoModerationRequest) if response.status_code == 200: # The request is successful. # Obtain the moderation result. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)Retrieving video detection task results
# coding=utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', #Connection timeout in milliseconds (ms). connect_timeout=3000, #Read timeout in milliseconds (ms). read_timeout=6000, # Modify the region and endpoint as needed. region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # The ID of the task that is returned when you submit the task. serviceParameters = { "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****' } videoModerationResultRequest = models.VideoModerationResultRequest( # Moderation service: videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_result(videoModerationResultRequest) if response.status_code == 200: # The request is successful. # Obtain the moderation result. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)Sample code for canceling a live stream moderation task
# coding=utf-8 # python version >= 3.6 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config import json config = Config( # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. # Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. # Common methods to obtain environment variables: # Obtain the AccessKey ID of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # Obtain the AccessKey secret of the RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='Obtain the AccessKey ID of your RAM user from an environment variable.', access_key_secret='Obtain the AccessKey secret of your RAM user from an environment variable.', # Connection timeout in milliseconds (ms). connect_timeout=10000, # Read timeout in milliseconds (ms). read_timeout=3000, region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # The ID of the task that is returned when you submit the task. serviceParameters = { "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****' } videoModerationCancelRequest = models.VideoModerationCancelRequest( # Moderation service service='liveStreamDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_cancel(videoModerationCancelRequest) if response.status_code == 200: # The request is successful. result = response.body print('Request successful. Result:{}'.format(result)) else: print('Request failed. Status:{} ,Result:{}'.format(response.status_code, response)) except Exception as err: print(err)
SDK for PHP
PHP 5.6 or later is supported.
For the source code, see SDK source code for PHP.
The following three types of video moderation are supported.
Detecting publicly accessible videos
Scenarios
If the video that you want to moderate is accessible over the internet, Video Moderation 2.0 can retrieve the file using the URL and then perform moderation.
Run the following command to add the dependencies.
composer require alibabacloud/green-20220302 2.2.10Integrate with the SDK for PHP.
Sample code for submitting a video moderation task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationRequest(); // Moderation service: videoDetection_global for video file moderation and liveStreamDetection_global for live stream moderation. $request->service = "videoDetection_global"; $serviceParameters = array("url" => "https://xxx.oss.aliyuncs.com/xxx.mp4"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationWithOptions($request, $runtime); print_r($response->body); if (200 != $response->statusCode) { print_r("Request failed. Code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (200 != $body->code) { print_r("Video moderation failed. Code:" . $body->code); } $data = $body->data; print_r("taskId = " . $data->taskId); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }Obtaining sample code for video detection tasks
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationResultRequest(); // Moderation service: videoDetection for video file moderation and liveStreamDetection for live stream moderation. $request->service = "videoDetection_global"; $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationResultWithOptions($request, $runtime); if (200 != $response->statusCode) { print_r("Request failed. Code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (280 == $body->code) { print_r("The video moderation task is being processed. Code:" . $body->code); return; } if (200 != $body->code) { print_r("Failed to query the video moderation result. Code:" . $body->code); return; } $data = $body->data; print_r("liveId = " . $data->liveId . "\n"); print_r("dataId = " . $data->dataId . "\n"); print_r("riskLevel = " . $data->RiskLevel . "\n"); print_r("audioResult = " . json_encode($data->audioResult) . "\n"); print_r("frameResult = " . json_encode($data->frameResult) . "\n"); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }Sample code for canceling a live stream moderation task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationCancelRequest(); // Moderation service: videoDetection for video file moderation and liveStreamDetection for live stream moderation. $request->service = "liveStreamDetection_global"; $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****'); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationCancel($request, $runtime); print_r($response->body); if (200 == $response->statusCode) { $body = $response->body; print_r("requestId = " . $body->requestId); print_r("code = " . $body->code); print_r("message = " . $body->message); if (200 != $body->code) { print_r("Failed to cancel the video moderation task. Code:" . $body->code); } } else { print_r("Request failed. Code:" . $response->statusCode); } } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
Detecting a local video
Scenarios
If the video that you want to moderate is on a local machine and does not have a public URL, you can upload the video to an Object Storage Service (OSS) bucket that is provided by Content Moderation. Video Moderation 2.0 can directly access OSS, retrieve the video content, and then perform moderation.
Run the following command to add the dependencies.
composer require alibabacloud/green-20220302 2.2.10Install the OSS SDK:
composer require aliyuncs/oss-sdk-phpIntegrate with the SDK for PHP.
Sample code for submitting a video moderation task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResponse; use AlibabaCloud\Tea\Utils\Utils; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest; use OSS\OssClient; // Specifies whether the service is deployed in a VPC. $isVPC = false; // The token for file upload. $tokenArray = array(); // The client for file upload requests. $ossClient = null; /** * Create a request client. * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return Green */ function create_client($accessKeyId, $accessKeySecret, $endpoint): Green { $config = new Config([ "accessKeyId" => $accessKeyId, "accessKeySecret" => $accessKeySecret, // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://username:password@xxx.xxx.xxx.xxx:9999", "endpoint" => $endpoint, ]); return new Green($config); } /** * Create a file upload client. * @param $tokenData * @return void */ function create_upload_client($tokenData): void { global $isVPC; global $ossClient; // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. if ($isVPC) { $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternalEndPoint, false, $tokenData->securityToken); } else { $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternetEndPoint, false, $tokenData->securityToken); } } /** * Upload the file. * @param $fileName * @param $tokenData * @return string * @throws \OSS\Core\OssException */ function upload_file($filePath, $tokenData): string { global $ossClient; //Initialize an OssClient instance. create_upload_client($tokenData); $split = explode(".", $filePath); if (count($split) > 1) { $objectName = $tokenData->fileNamePrefix . uniqid() . "." . explode(".", $filePath)[count($split) - 1]; } else { $objectName = $tokenData->fileNamePrefix . uniqid(); } //Upload the file. $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath); return $objectName; } /** * Submit a moderation task. * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return VideoModerationResponse * @throws \OSS\Core\OssException */ function invoke($accessKeyId, $accessKeySecret, $endpoint): VideoModerationResponse { global $tokenArray; // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = create_client($accessKeyId, $accessKeySecret, $endpoint); // Create a RuntimeObject instance and configure runtime parameters. $runtime = new RuntimeOptions([]); // The full path of the local file. Example: D:\\localPath\\exampleFile.mp4. $filePath = "D:\\test\\video\\b652.mp4"; //Obtain the token for file upload. if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) { $token = $client->describeUploadToken(); $tokenArray[$endpoint] = $token->body->data; } // Upload the file. $objectName = upload_file($filePath, $tokenArray[$endpoint]); // Construct moderation parameters. $request = new VideoModerationRequest(); // Example: videoDetection_global $request->service = "videoDetection_global"; // The OSS information of the file to be moderated. $serviceParameters = array( 'ossObjectName' => $objectName, 'ossBucketName' => $tokenArray[$endpoint]->bucketName, 'dataId' => uniqid()); $request->serviceParameters = json_encode($serviceParameters); // Submit the moderation task. return $client->videoModerationWithOptions($request, $runtime); } /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $accessKeyId = 'Obtain the AccessKey ID of your RAM user from an environment variable.'; $accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.'; // Modify the region and endpoint as needed. $endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; try { $response = invoke($accessKeyId, $accessKeySecret, $endpoint); print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE)); } catch (Exception $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }Code examples for a video detection task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationResultRequest(); // Moderation service: videoDetection for video file moderation and liveStreamDetection for live stream moderation. $request->service = "videoDetection_global"; $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationResultWithOptions($request, $runtime); if (200 != $response->statusCode) { print_r("Request failed. Code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (280 == $body->code) { print_r("The video moderation task is being processed. Code:" . $body->code); return; } if (200 != $body->code) { print_r("Failed to query the video moderation result. Code:" . $body->code); return; } $data = $body->data; print_r("liveId = " . $data->liveId . "\n"); print_r("dataId = " . $data->dataId . "\n"); print_r("riskLevel = " . $data->RiskLevel . "\n"); print_r("audioResult = " . json_encode($data->audioResult) . "\n"); print_r("frameResult = " . json_encode($data->frameResult) . "\n"); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }Sample code for canceling a live stream moderation task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * An AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * We strongly recommend that you do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked, which compromises the security of all resources in your account. * Common ways to obtain environment variables: * Obtain the AccessKey ID of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'We recommend that you obtain the AccessKey ID of a RAM user from environment variables', "accessKeySecret" => 'We recommend that you obtain the AccessKey secret of a RAM user from environment variables', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and to improve detection performance. $client = new Green($config); $request = new VideoModerationCancelRequest(); // Moderation type: videoDetection for video file moderation, and liveStreamDetection for live stream moderation. $request->service = "liveStreamDetection_global"; $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****'); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationCancel($request, $runtime); print_r($response->body); if (200 == $response->statusCode) { $body = $response->body; print_r("requestId = " . $body->requestId); print_r("code = " . $body->code); print_r("message = " . $body->message); if (200 != $body->code) { print_r("video moderation cancel not success. code:" . $body->code); } } else { print_r("response not success. code:" . $response->statusCode); } } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
Moderate videos in OSS
Scenarios
If the video file that you want to moderate is already stored in Object Storage Service (OSS), you can create a service role to grant Content Moderation the permissions to access OSS. Video Moderation 2.0 can retrieve the file from OSS through the service role and then perform moderation. Go to the Cloud Resource Access Authorization page to create a service role.
Run the following command to add the dependencies.
composer require alibabacloud/green-20220302 2.2.10Integrate with the SDK for PHP.
Sample code for submitting a video moderation task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationRequest(); // Moderation service: videoDetection_global for video file moderation and liveStreamDetection_global for live stream moderation. $request->service = "videoDetection_global"; $serviceParameters = array( // The file to be moderated. Example: video/001.mp4 'ossObjectName' => 'video/001.mp4', // The region where the bucket is located. Example: cn-shanghai 'ossRegionId' => 'ap-southeast-1', // The name of the bucket. Example: bucket001 'ossBucketName' => 'bucket001', // The unique ID of the data. 'dataId' => uniqid()); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationWithOptions($request, $runtime); print_r($response->body); if (200 != $response->statusCode) { print_r("Request failed. Code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (200 != $body->code) { print_r("Video moderation failed. Code:" . $body->code); } $data = $body->data; print_r("taskId = " . $data->taskId); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }Obtain a code sample for a video detection task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationResultRequest(); // Moderation service: videoDetection for video file moderation and liveStreamDetection for live stream moderation. $request->service = "videoDetection_global"; $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationResultWithOptions($request, $runtime); if (200 != $response->statusCode) { print_r("Request failed. Code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (280 == $body->code) { print_r("The video moderation task is being processed. Code:" . $body->code); return; } if (200 != $body->code) { print_r("Failed to query the video moderation result. Code:" . $body->code); return; } $data = $body->data; print_r("liveId = " . $data->liveId . "\n"); print_r("dataId = " . $data->dataId . "\n"); print_r("riskLevel = " . $data->RiskLevel . "\n"); print_r("audioResult = " . json_encode($data->audioResult) . "\n"); print_r("frameResult = " . json_encode($data->frameResult) . "\n"); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }Sample code for canceling a live stream moderation task
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; $config = new Config([ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ "accessKeyId" => 'Obtain the AccessKey ID of your RAM user from an environment variable.', "accessKeySecret" => 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Set the HTTP proxy. // "httpProxy" => "http://10.10.xx.xx:xxxx", // Set the HTTPS proxy. // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. $client = new Green($config); $request = new VideoModerationCancelRequest(); // Moderation service: videoDetection for video file moderation and liveStreamDetection for live stream moderation. $request->service = "liveStreamDetection_global"; $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****'); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationCancel($request, $runtime); print_r($response->body); if (200 == $response->statusCode) { $body = $response->body; print_r("requestId = " . $body->requestId); print_r("code = " . $body->code); print_r("message = " . $body->message); if (200 != $body->code) { print_r("Failed to cancel the video moderation task. Code:" . $body->code); } } else { print_r("Request failed. Code:" . $response->statusCode); } } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
SDK for Go
The following three types of video moderation are supported.
Moderate videos accessible over the public internet
Scenarios
If the video that you want to moderate is accessible over the internet, Video Moderation 2.0 can retrieve the file using the URL and then perform moderation.
Run the following command to add the dependencies.
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Integrate with the SDK for Go.
Sample code for submitting a video moderation task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "url": "https://xxx.oss.aliyuncs.com/xxx.mp4", }, ) request := green20220302.VideoModerationRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("Video moderation failed. Code:%d\n", *body.Code) return } data := body.Data fmt.Printf("Video moderation taskId:%s\n", *data.TaskId) }Retrieve video detection task results
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****", }, ) request := green20220302.VideoModerationResultRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationResultWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code == 280 { fmt.Printf("The video moderation task is being processed. Code:%d\n", *body.Code) return } if *body.Code != http.StatusOK { fmt.Printf("Failed to query the video moderation result. Code:%d\n", *body.Code) return } data := body.Data fmt.Printf("Video moderation result:%s\n", data) fmt.Printf("Video moderation audio result:%s\n", data.AudioResult) fmt.Printf("Video moderation frame result:%s\n", data.FrameResult) }Sample code for canceling a live stream moderation task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****", }, ) request := green20220302.VideoModerationCancelRequest{ Service: tea.String("liveStreamDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationCancelWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("Failed to cancel the video moderation task. Code:%d\n", *body.Code) } }
Detecting a local video
Scenarios
If the video that you want to moderate is on a local machine and does not have a public URL, you can upload the video to an Object Storage Service (OSS) bucket that is provided by Content Moderation. Video Moderation 2.0 can directly access OSS, retrieve the video content, and then perform moderation.
Run the following command to add the dependencies.
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Install the OSS SDK:
go get github.com/aliyun/aliyun-oss-go-sdk/ossIntegrate with the SDK for Go.
Sample code for submitting a video moderation task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/google/uuid" "net/http" "os" "strings" "time" ) //The token for file upload. var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData) //The client for file upload. var Bucket *oss.Bucket //Specifies whether the service is deployed in a VPC. var isVPC = false //Create a request client. func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) { config := &openapi.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), // Set the HTTP proxy. // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), Endpoint: tea.String(endpoint), } //Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. return green20220302.NewClient(config); } //Create a file upload client. func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) { if isVPC{ ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName)); }else { ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName)); } } //Upload the file. func uploadFile(filePath string,tokenData *green20220302.DescribeUploadTokenResponseBodyData) (string,error) { createOssClient(tokenData) objectName := tea.StringValue(tokenData.FileNamePrefix) + uuid.New().String() + "." + strings.Split(filePath, ".")[1] //Upload the file. _err := Bucket.PutObjectFromFile(objectName, filePath) if _err != nil { fmt.Println("Error:", _err) os.Exit(-1) } return objectName,_err } func invoke(accessKeyId string, accessKeySecret string, endpoint string) (_result *green20220302.VideoModerationResponse, _err error) { //Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. client, _err := createClient(accessKeyId, accessKeySecret, endpoint) if _err != nil { return nil,_err } //Set runtime parameters. The settings take effect only for requests that use this RuntimeOptions instance. runtime := &util.RuntimeOptions{} //The full path of the local file. Example: D:\localPath\exampleFile.mp4. var filePath = "D:\\localPath\\exampleFile.mp4" //Obtain a temporary token for file upload. tokenData,ok:=TokenMap[endpoint]; if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) { //Obtain a temporary token for file upload. uploadTokenResponse, _err := client.DescribeUploadToken() if _err != nil { return nil,_err } tokenData = uploadTokenResponse.Body.Data TokenMap[endpoint] = tokenData } var objectName, _ = uploadFile(filePath,TokenMap[endpoint]) //Construct a moderation request. serviceParameters, _ := json.Marshal( map[string]interface{}{ "ossBucketName": tea.StringValue(TokenMap[endpoint].BucketName), "ossObjectName": objectName, "dataId": uuid.New().String(), }, ) videoModerationRequest := &green20220302.VideoModerationRequest{ //Example: videoDetection_global Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } return client.VideoModerationWithOptions(videoModerationRequest, runtime) } func main() { /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ var accessKeyId= "Obtain the AccessKey ID of your RAM user from an environment variable."; var accessKeySecret= "Obtain the AccessKey secret of your RAM user from an environment variable."; //Modify the region and endpoint as needed. var endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; response,_err := invoke(accessKeyId,accessKeySecret,endpoint) flag := false if _err != nil { var err = &tea.SDKError{} if _t, ok := _err.(*tea.SDKError); ok { err = _t if *err.StatusCode == 500 { flag = true } } } if response == nil || *response.StatusCode == 500 || *response.Body.Code == 500 { flag = true } //Automatic routing. Switch the region to China (Beijing). if flag { endpoint = "green-cip.cn-beijing.aliyuncs.com"; response, _err = invoke(accessKeyId,accessKeySecret,endpoint) } if response != nil { statusCode := tea.IntValue(tea.ToInt(response.StatusCode)) body := response.Body videoModerationResponseData := body.Data fmt.Println("requestId:" + tea.StringValue(body.RequestId)) if statusCode == http.StatusOK { fmt.Println("Request successful. Response:" + body.String()) if tea.IntValue(tea.ToInt(body.Code)) == 200 { result := videoModerationResponseData.Result fmt.Println("response dataId:" + tea.StringValue(videoModerationResponseData.DataId)) for i := 0; i < len(result); i++ { fmt.Println("response label:" + tea.StringValue(result[i].Label)) fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence))) } } else { fmt.Println("Video moderation failed. Status:" + tea.ToString(body.Code)) } } else { fmt.Print("Request failed. Status:" + tea.ToString(statusCode)) } } }Retrieving the results of video detection tasks
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****", }, ) request := green20220302.VideoModerationResultRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationResultWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code == 280 { fmt.Printf("The video moderation task is being processed. Code:%d\n", *body.Code) return } if *body.Code != http.StatusOK { fmt.Printf("Failed to query the video moderation result. Code:%d\n", *body.Code) return } data := body.Data fmt.Printf("Video moderation result:%s\n", data) fmt.Printf("Video moderation audio result:%s\n", data.AudioResult) fmt.Printf("Video moderation frame result:%s\n", data.FrameResult) }Sample code for canceling a live stream moderation task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****", }, ) request := green20220302.VideoModerationCancelRequest{ Service: tea.String("liveStreamDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationCancelWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("Failed to cancel the video moderation task. Code:%d\n", *body.Code) } }
Moderate videos in OSS
Scenarios
If the video file that you want to moderate is already stored in Object Storage Service (OSS), you can create a service role to grant Content Moderation the permissions to access OSS. Video Moderation 2.0 can retrieve the file from OSS through the service role and then perform moderation. Go to the Cloud Resource Access Authorization page to create a service role.
Run the following command to add the dependencies.
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Integrate with the SDK for Go.
Sample code for submitting a video moderation task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "ossBucketName": "bucket_01", "ossObjectName": "conect/xxx.mp4", "ossRegionId": "ap-southeast-1", }, ) request := green20220302.VideoModerationRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("Video moderation failed. Code:%d\n", *body.Code) return } data := body.Data fmt.Printf("Video moderation taskId:%s\n", *data.TaskId) }Retrieve the results of a video detection task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****", }, ) request := green20220302.VideoModerationResultRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationResultWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code == 280 { fmt.Printf("The video moderation task is being processed. Code:%d\n", *body.Code) return } if *body.Code != http.StatusOK { fmt.Printf("Failed to query the video moderation result. Code:%d\n", *body.Code) return } data := body.Data fmt.Printf("Video moderation result:%s\n", data) fmt.Printf("Video moderation audio result:%s\n", data.AudioResult) fmt.Printf("Video moderation frame result:%s\n", data.FrameResult) }Sample code for canceling a live stream moderation task
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. config := &openapi.Config{ /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."), AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."), // Set the HTTP proxy. // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // Set the HTTPS proxy. // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * Set a timeout period. The server-side end-to-end processing timeout is 10 seconds. Configure the timeout period accordingly. * If the ReadTimeout period that you set is less than the server-side processing time, a ReadTimeout exception is returned. */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // Create a RuntimeObject instance and configure runtime parameters. runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****", }, ) request := green20220302.VideoModerationCancelRequest{ Service: tea.String("liveStreamDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationCancelWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("Request failed. Status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("Request successful. RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("Failed to cancel the video moderation task. Code:%d\n", *body.Code) } }
SDK for C#
For the source code, see SDK source code for C#.
The following three types of video moderation are supported.
Moderate videos accessible over the public internet
Scenarios
If the video that you want to moderate is accessible over the internet, Video Moderation 2.0 can retrieve the file using the URL and then perform moderation.
Run the following command to add the dependencies.
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10Integrate with the SDK for C#.
Sample code for submitting a video moderation task
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * Initialize the client using the AccessKey pair. * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, }; // The endpoint of the service. config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; return new AlibabaCloud.SDK.Green20220302.Client(config); } public static void Main(string[] args) { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable.", string accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret); // Construct a moderation request. AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest(); // The moderation service. videoModerationRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // The URL of the video to be moderated. The URL must be accessible over the public internet. task.Add("url","https://xxxx/xxx/sample.mp4"); videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task); // Create a RuntimeObject instance and configure runtime parameters. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // Submit the moderation task. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, runtime); if(response is not null){ Console.WriteLine("response statusCode : "+response.StatusCode); if (response.Body is not null){ Console.WriteLine("requestId : " + response.Body.RequestId); Console.WriteLine("code : " + response.Body.Code); Console.WriteLine("message : " + response.Body.Message); if(response.Body.Data is not null){ Console.WriteLine("taskId : " + response.Body.Data.TaskId); } } } } catch (TeaException error) { // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }Sample code for querying the results of a video moderation task
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * Initialize the client using the AccessKey pair. * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, }; // The endpoint of the service. config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; return new AlibabaCloud.SDK.Green20220302.Client(config); } public static void Main(string[] args) { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable.", string accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret); // Construct a moderation request. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest(); // The moderation service. videoModerationResultRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // The ID of the task whose results you want to query. task.Add("taskId","<The ID of the task whose results you want to query>"); videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // Create a RuntimeObject instance and configure runtime parameters. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // Submit the moderation task. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime); if(response is not null){ Console.WriteLine("response statusCode : "+response.StatusCode); if (response.Body is not null){ Console.WriteLine("requestId : " + response.Body.RequestId); Console.WriteLine("code : " + response.Body.Code); Console.WriteLine("message : " + response.Body.Message); if(response.Body.Data is not null){ Console.WriteLine("taskId : " + response.Body.Data.TaskId); Console.WriteLine("liveId : " + response.Body.Data.LiveId); Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel); Console.WriteLine("url : " + response.Body.Data.Url); Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails)); } } } } catch (TeaException error) { // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }
Detect local videos
Scenarios
If the video that you want to moderate is on a local machine and does not have a public URL, you can upload the video to an Object Storage Service (OSS) bucket that is provided by Content Moderation. Video Moderation 2.0 can directly access OSS, retrieve the video content, and then perform moderation.
Run the following command to add the dependencies.
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10Install the OSS SDK:
Install using NuGet 1. If NuGet is not installed for your Visual Studio, install NuGet first. 2. In Visual Studio, create a project or open an existing project. Then, choose Tools > NuGet Package Manager > Manage NuGet Packages for Solution. 3. Search for aliyun.oss.sdk and find Aliyun.OSS.SDK (for .NET Framework) or Aliyun.OSS.SDK.NetCore in the results.Integrate with the SDK for C#.
Sample code for submitting a video moderation task
// This file is auto-generated, don't edit it. Thanks. using System; using Newtonsoft.Json; using Aliyun.OSS; namespace AlibabaCloud.SDK.Green20220302 { public class VideoModerationAutoRoute { //The token for file upload. public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic = new Dictionary<String, Models.DescribeUploadTokenResponse>(); //The client for file upload. public static OssClient ossClient = null; //Specifies whether the service is deployed in a VPC. public static Boolean isVPC = false; public static void Main(string[] args) { /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ String accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable."; String accessKeySecret = "Obtain the AccessKey secret of your RAM user from an environment variable."; // Modify the region and endpoint as needed. String endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; Models.VideoModerationResponse response = invoke( accessKeyId, accessKeySecret, endpoint ); Console.WriteLine(response.Body.RequestId); Console.WriteLine(JsonConvert.SerializeObject(response.Body)); } //Create a request client. public static Client createClient( String accessKeyId, String accessKeySecret, String endpoint ) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, //Set the HTTP proxy. //HttpProxy = "http://10.10.xx.xx:xxxx", //Set the HTTPS proxy. //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999", //The endpoint of the service. Endpoint = endpoint, }; return new Client(config); } //Create a file upload client. private static OssClient getOssClient( Models.DescribeUploadTokenResponse tokenResponse, Boolean isVPC ) { var tokenData = tokenResponse.Body.Data; if (isVPC) { return new OssClient( tokenData.OssInternalEndPoint, tokenData.AccessKeyId, tokenData.AccessKeySecret, tokenData.SecurityToken ); } else { return new OssClient( tokenData.OssInternetEndPoint, tokenData.AccessKeyId, tokenData.AccessKeySecret, tokenData.SecurityToken ); } } //Upload the file. public static String uploadFile( String filePath, Models.DescribeUploadTokenResponse tokenResponse ) { // Create an OssClient instance. ossClient = getOssClient(tokenResponse, isVPC); var tokenData = tokenResponse.Body.Data; String objectName = tokenData.FileNamePrefix + Guid.NewGuid().ToString() + "." + filePath.Split(".").GetValue(1); //Upload the file. ossClient.PutObject(tokenData.BucketName, objectName, filePath); return objectName; } //Submit a moderation request. public static Models.VideoModerationResponse invoke( String accessKeyId, String accessKeySecret, String endpoint ) { //Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. Client client = createClient(accessKeyId, accessKeySecret, endpoint); //Set runtime parameters. The settings take effect only for requests that use this RuntimeOptions instance. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); //The full path of the local file. Example: D:\localPath\exampleFile.mp4. String filePath = "D:\localPath\exampleFile.mp4"; try { //Obtain a temporary token for file upload. if ( !tokenDic.ContainsKey(endpoint) || tokenDic[endpoint].Body.Data.Expiration <= DateTimeOffset.Now.ToUnixTimeSeconds() ) { var tokenResponse = client.DescribeUploadToken(); tokenDic[endpoint] = tokenResponse; } //Upload the file. String objectName = uploadFile(filePath, tokenDic[endpoint]); //Construct a moderation request. Models.VideoModerationRequest videoModerationRequest = new Models.VideoModerationRequest(); //service example: videoDetection_global videoModerationRequest.Service = "videoDetection_global"; Dictionary<string, object> task = new Dictionary<string, object>(); //The information of the file to be moderated. task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName); task.Add("ossObjectName", objectName); //The ID of the data to be moderated. task.Add("dataId", Guid.NewGuid().ToString()); videoModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task); //Call the API operation to obtain the moderation result. Models.VideoModerationResponse response = client.VideoModerationWithOptions( videoModerationRequest, runtimeOptions ); return response; } catch (Exception _err) { Console.WriteLine(_err); return null; } } } }Sample code for querying the results of a video moderation task
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * Initialize the client using the AccessKey pair. * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, }; // The endpoint of the service. config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; return new AlibabaCloud.SDK.Green20220302.Client(config); } public static void Main(string[] args) { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable.", string accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret); // Construct a moderation request. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest(); // The moderation service. videoModerationResultRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // The ID of the task whose results you want to query. task.Add("taskId","<The ID of the task whose results you want to query>"); videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // Create a RuntimeObject instance and configure runtime parameters. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // Submit the moderation task. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime); if(response is not null){ Console.WriteLine("response statusCode : "+response.StatusCode); if (response.Body is not null){ Console.WriteLine("requestId : " + response.Body.RequestId); Console.WriteLine("code : " + response.Body.Code); Console.WriteLine("message : " + response.Body.Message); if(response.Body.Data is not null){ Console.WriteLine("taskId : " + response.Body.Data.TaskId); Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel); Console.WriteLine("liveId : " + response.Body.Data.LiveId); Console.WriteLine("url : " + response.Body.Data.Url); Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails)); } } } } catch (TeaException error) { // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }
Moderate videos in OSS
Scenarios
If the video file that you want to moderate is already stored in Object Storage Service (OSS), you can create a service role to grant Content Moderation the permissions to access OSS. Video Moderation 2.0 can retrieve the file from OSS through the service role and then perform moderation. Go to the Cloud Resource Access Authorization page to create a service role.
Run the following command to add the dependencies.
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10Integrate with the SDK for C#.
Sample code for submitting a video moderation task
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * Initialize the client using the AccessKey pair. * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, }; // The endpoint of the service. config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; return new AlibabaCloud.SDK.Green20220302.Client(config); } public static void Main(string[] args) { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable.", string accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret); // Construct a moderation request. AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest(); // The moderation service. videoModerationRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // Sample OSS file parameters. task.Add("ossBucketName","bucket_01"); task.Add("ossObjectName","test/sample.wav"); task.Add("ossRegionId","ap-southeast-1"); videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task); // Create a RuntimeObject instance and configure runtime parameters. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // Submit the moderation task. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, runtime); if(response is not null){ Console.WriteLine("response statusCode : "+response.StatusCode); if (response.Body is not null){ Console.WriteLine("requestId : " + response.Body.RequestId); Console.WriteLine("code : " + response.Body.Code); Console.WriteLine("message : " + response.Body.Message); if(response.Body.Data is not null){ Console.WriteLine("taskId : " + response.Body.Data.TaskId); } } } } catch (TeaException error) { // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }Sample code for querying the results of a video moderation task
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * Initialize the client using the AccessKey pair. * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, }; // The endpoint of the service. config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; return new AlibabaCloud.SDK.Green20220302.Client(config); } public static void Main(string[] args) { // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to call API operations. /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey secret of the RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable.", string accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.', // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret); // Construct a moderation request. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest(); // The moderation service. videoModerationResultRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // The ID of the task whose results you want to query. task.Add("taskId","<The ID of the task whose results you want to query>"); videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // Create a RuntimeObject instance and configure runtime parameters. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // Submit the moderation task. AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime); if(response is not null){ Console.WriteLine("response statusCode : "+response.StatusCode); if (response.Body is not null){ Console.WriteLine("requestId : " + response.Body.RequestId); Console.WriteLine("code : " + response.Body.Code); Console.WriteLine("message : " + response.Body.Message); if(response.Body.Data is not null){ Console.WriteLine("taskId : " + response.Body.Data.TaskId); Console.WriteLine("liveId : " + response.Body.Data.LiveId); Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel); Console.WriteLine("url : " + response.Body.Data.Url); Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails)); } } } } catch (TeaException error) { // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }
SDK for Node.js
For the source code, see SDK source code for Node.js.
The following three types of video moderation are supported.
Moderate videos accessible over the public internet
Scenarios
If the video that you want to moderate is accessible over the internet, Video Moderation 2.0 can retrieve the file using the URL and then perform moderation.
Run the following command to add the dependencies.
npm install @alicloud/green20220302@2.2.10Integrate with the SDK for Node.js.
Sample code for submitting a video moderation task
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // Create a request object. const videoModerationRequest = new Green20220302.VideoModerationRequest({ // The video moderation service. "service": "videoDetection_global", // The URL of the video to be moderated. "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Send the request and obtain the response. const response = await client.videoModerationWithOptions(videoModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // We recommend that you handle exceptions with caution in your business code and do not ignore them. In this example, only the error message is printed. // The error message. console.log('Error occurred:', error.message); } } } Client.main();Sample code for querying the results of a video moderation task
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // Create a request object. const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({ // The video moderation service. "service": "videoDetection_global", "serviceParameters": JSON.stringify({"taskId":"<The ID of the video moderation task whose result you want to query>"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Send the request and obtain the response. const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // We recommend that you handle exceptions with caution in your business code and do not ignore them. In this example, only the error message is printed. // The error message. console.log('Error occurred:', error.message); } } } Client.main();
Detecting local videos
Scenarios
If the video that you want to moderate is on a local machine and does not have a public URL, you can upload the video to an Object Storage Service (OSS) bucket that is provided by Content Moderation. Video Moderation 2.0 can directly access OSS, retrieve the video content, and then perform moderation.
Run the following command to add the dependencies.
npm install @alicloud/green20220302@2.2.10Integrate with the SDK for Node.js.
Sample code for submitting a video moderation task
const RPCClient = require("@alicloud/pop-core"); const OSS = require('ali-oss'); const { v4: uuidv4 } = require('uuid'); const path = require("path"); //Specifies whether the service is deployed in a VPC. var isVPC = false; //The token for file upload. var tokenDic = new Array(); //The client for file upload. var ossClient; //Create a file upload client. function createClient(accessKeyId, accessKeySecret, endpoint) { return new RPCClient({ accessKeyId: accessKeyId, accessKeySecret: accessKeySecret, endpoint: endpoint, apiVersion: '2022-03-02', //Set the HTTP proxy. //httpProxy: "http://xx.xx.xx.xx:xxxx", //Set the HTTPS proxy. //httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999", }); } //Create a file upload client. function getOssClient(tokenData, isVPC) { if (isVPC) { ossClient = new OSS({ accessKeyId: tokenData['AccessKeyId'], accessKeySecret: tokenData['AccessKeySecret'], stsToken: tokenData['SecurityToken'], endpoint: tokenData['OssInternalEndPoint'], bucket: tokenData['BucketName'], }); } else { ossClient = new OSS({ accessKeyId: tokenData['AccessKeyId'], accessKeySecret: tokenData['AccessKeySecret'], stsToken: tokenData['SecurityToken'], endpoint: tokenData['OssInternetEndPoint'], bucket: tokenData['BucketName'], }); } } //Submit a moderation task. async function invoke(accessKeyId, accessKeySecret, endpoint) { //Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. var client = createClient(accessKeyId, accessKeySecret, endpoint); var requestOption = { method: 'POST', formatParams: false, }; //The full path of the local file. Example: D:\\localPath\\exampleFile.mp4. var filePath = 'D:\\localPath\\exampleFile.mp4'; //Obtain the token for file upload. if (tokenDic[endpoint] == null || tokenDic[endpoint]['Expiration'] <= Date.parse(new Date() / 1000)) { var tokenResponse = await client.request('DescribeUploadToken', '', requestOption) tokenDic[endpoint] = tokenResponse.Data; } //Obtain the file upload client. getOssClient(tokenDic[endpoint], isVPC) var split = filePath.split("."); var objectName; if (split.length > 1) { objectName = tokenDic[endpoint].FileNamePrefix + uuidv4() + "." + split[split.length - 1]; } else { objectName = tokenDic[endpoint].FileNamePrefix + uuidv4(); } //Upload the file. const result = await ossClient.put(objectName, path.normalize(filePath)); //Use the following code to create an API request and configure the parameters. var params = { //Video moderation service example: videoDetection_global "Service": "videoDetection_global", //The information of the uploaded local video. "ServiceParameters": JSON.stringify({ "ossBucketName": tokenDic[endpoint].BucketName, "ossObjectName": objectName }) } //Call the API operation to obtain the moderation result. return await client.request('VideoModeration', params, requestOption); } function main() { /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. * Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all your resources may be compromised. * Common methods to obtain environment variables: * Obtain the AccessKey ID of the RAM user: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'] * Obtain the AccessKey secret of the RAM user: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] */ const accessKeyId: 'Obtain the AccessKey ID of your RAM user from an environment variable.' const accessKeySecret: 'Obtain the AccessKey secret of your RAM user from an environment variable.' //Modify the region and endpoint as needed. var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com" try { var response; //Call the API operation to obtain the moderation result. invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) { console.log(JSON.stringify(response)) }) } catch (err) { console.log(err); } } main();Sample code for querying the results of a video moderation task
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // Create a request object. const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({ // The video moderation service. "service": "videoDetection_global", "serviceParameters": JSON.stringify({"taskId":"<The ID of the video moderation task whose result you want to query>"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Send the request and obtain the response. const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // We recommend that you handle exceptions with caution in your business code and do not ignore them. In this example, only the error message is printed. // The error message. console.log('Error occurred:', error.message); } } } Client.main();
Moderate videos in OSS
Scenarios
If the video file that you want to moderate is already stored in Object Storage Service (OSS), you can create a service role to grant Content Moderation the permissions to access OSS. Video Moderation 2.0 can retrieve the file from OSS through the service role and then perform moderation. Go to the Cloud Resource Access Authorization page to create a service role.
Run the following command to add the dependencies.
npm install @alicloud/green20220302@2.2.10Integrate with the SDK for Node.js.
Sample code for submitting a video moderation task
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // Create a request object. const videoModerationRequest = new Green20220302.VideoModerationRequest({ // The video moderation service. "service": "videoDetection_global", // The URL of the video to be moderated. "serviceParameters": JSON.stringify({ // The region where the bucket is located. Example: cn-shanghai "ossRegionId": "cn-shanghai", // The name of the bucket. Example: bucket001 "ossBucketName": "bucket001", // The file to be moderated. Example: video/001.mp4 "ossObjectName": "video/001.mp4",}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Send the request and obtain the response. const response = await client.videoModerationWithOptions(videoModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // We recommend that you handle exceptions with caution in your business code and do not ignore them. In this example, only the error message is printed. // The error message. console.log('Error occurred:', error.message); } } } Client.main();Sample code for querying the results of a video moderation task
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client to avoid repeatedly establishing connections and improve moderation performance. // If the project code is leaked, the AccessKey pair may be disclosed, which compromises the security of all your resources. The following sample code is for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // Create a request object. const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({ // The video moderation service. "service": "videoDetection_global", "serviceParameters": JSON.stringify({"taskId":"<The ID of the video moderation task whose result you want to query>"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Send the request and obtain the response. const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // We recommend that you handle exceptions with caution in your business code and do not ignore them. In this example, only the error message is printed. // The error message. console.log('Error occurred:', error.message); } } } Client.main();
Native HTTPS calls
Call method
Service request URL: https://green-cip.{region}.aliyuncs.com
Protocol: HTTPS
Method: POST
Common request parameters
The Video Moderation 2.0 API operations require both common and operation-specific request parameters. Common request parameters, which are required for every API operation, are described in the following table.
Name
Type
Required
Description
Format
String
Yes
The format of the response. Valid values:
JSON (default)
XML
Version
String
Yes
The version number of the API. Use the YYYY-MM-DD format. The current version is 2022-03-02.
AccessKeyId
String
Yes
The AccessKey ID provided by Alibaba Cloud for you to access its services.
Signature
String
Yes
The signature string of the request. For information about how to calculate a signature, see the Signature method section below.
SignatureMethod
String
Yes
The signature method. HMAC-SHA1 is supported.
Timestamp
String
Yes
The timestamp of the request. The date format must follow the ISO 8601 standard and be in Coordinated Universal Time (UTC).
The format is yyyy-MM-ddTHH:mm:ssZ.
For example, 09:13:14 on December 12, 2022 (UTC+8) is represented as 2022-12-12T01:13:14Z.
SignatureVersion
String
Yes
The version of the signature algorithm. Set the value to 1.0.
SignatureNonce
String
Yes
A unique random number used to prevent replay attacks. Use a different random number for each request.
Action
String
Yes
Valid values:
VideoModeration
VideoModerationResult
Common response parameters
For each API request you send, the system returns a unique RequestId, regardless of whether the call is successful. Other response parameters vary based on the service you call.
{ "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2", "Message":"SUCCESS", "Data":{ "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1****" }, "Code":200 }Sample code
The following sample responses are formatted for readability. Actual responses are not formatted with line breaks or indentation.
Sample code for a moderation task
Sample request
http://green-cip.ap-southeast-1.aliyuncs.com/ ?Format=JSON &Version=2022-03-02 &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D &SignatureMethod=Hmac-SHA1 &SignatureNonce=15215528852396 &SignatureVersion=1.0 &Action=VideoModeration &AccessKeyId=123****cip &Timestamp=2023-02-03T12:00:00Z &Service=videoDetection_global &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.mp4"}Sample success response
{ "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2", "Message":"SUCCESS", "Data":{ "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1x****" }, "Code":200 }Sample code for a query task
Sample request
http://green-cip.ap-southeast-1.aliyuncs.com/ ?Format=JSON &Version=2022-03-02 &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D &SignatureMethod=Hmac-SHA1 &SignatureNonce=15215528852396 &SignatureVersion=1.0 &Action=VideoModerationResult &AccessKeyId=123****cip &Timestamp=2023-02-03T12:00:00Z &Service=videoDetection_global &ServiceParameters={"taskId": "vi_f_O5zxxxxxxxxxxxxxxxx-1x****"}Sample success response
{ "Code": 200, "RequestId": "25106421-XXXX-XXXX-XXXX-15DA5AAAC546", "Message": "success finished", "Data": { "DataId": "ABCDEF-TESTDATAID", "TaskId": "vi_f_VnI6BO74NXFIZm7XXXXXXXXXXXXXX", "RiskLevel": "medium", "FrameResult": { "FrameNum": 2, "FrameSummarys": [ { "Label": "violent_explosion", "Description": "Suspected fireworks-related content", "LabelSum": 8 }, { "Label": "sexual_cleavage", "Description": "Suspected content with nudity or sexual undertones", "LabelSum": 8 } ], "RiskLevel": "medium", "Frames": [ { "Offset": 1, "RiskLevel": "none", "Results": [ { "Result": [ { "Label": "nonLabel", "Description": "No risks detected" } ], "Service": "baselineCheck" }, { "Result": [ { "Label": "nonLabel" } ], "Service": "baselineCheck_pro" } ], "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test1.jpg" }, { "Offset": 2, "RiskLevel": "medium", "Results": [ { "Result": [ { "Confidence": 74.1, "Label": "violent_explosion", "Description": "Suspected fireworks-related content" } ], "Service": "baselineCheck" }, { "Result": [ { "Confidence": 1, "Label": "sexual_cleavage", "Description": "Suspected content with nudity or sexual undertones" } ], "Service": "baselineCheck_pro" } ], "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test2.jpg" } ] } } }
Signature method
The Voice Moderation-Enhanced service authenticates every request. Therefore, you must include a signature in each request. The service uses symmetric encryption with an AccessKey ID and an AccessKey secret to verify the identity of the request sender.
An AccessKey pair is issued by Alibaba Cloud. You can apply for and manage it on the Alibaba Cloud website. An AccessKey pair consists of an AccessKey ID and an AccessKey secret. The AccessKey ID is used to verify the identity of the user, and the AccessKey secret is used to encrypt and verify the signature string. You must keep your AccessKey secret confidential.
To sign a request, perform the following steps:
Create a canonicalized query string.
Sort all request parameters in alphabetical order of the parameter names. These parameters include common request parameters and operation-specific parameters, but not the Signature parameter itself.
Encode the names and values of the request parameters. Use the UTF-8 character set for URL encoding.
NoteMost libraries that support URL encoding, such as java.net.URLEncoder in Java, follow the Multipurpose Internet Mail Extensions (MIME) encoding rules of application/x-www-form-urlencoded. You can directly use this encoding method. Replace plus signs (+) with %20, asterisks (*) with %2A, and %7E with tildes (~). This gives you an encoded string that follows the preceding rules.
The URL encoding rules are as follows:
Do not encode uppercase letters, lowercase letters, digits, and special characters such as hyphens (-), underscores (_), periods (.), and tildes (~).
Encode other characters in the
%XYformat, where XY represents the hexadecimal value of the character's ASCII code. For example, double quotation marks (") are encoded as%22.Encode extended UTF-8 characters in the
%XY%ZA…format.Spaces must be encoded as
%20, not plus signs (+).
Connect the encoded parameter names and values with equal signs (=).
Sort the resulting strings by their parameter names in alphabetical order and connect them with ampersands (&) to create the canonicalized query string.
Use the normalized string from step a.i to construct the string for signature calculation according to the following rules:
StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)NoteHTTPMethod is the HTTP method used for the request, such as POST. percentEncode("/") is the encoded value of the forward slash (/), which is
%2F, according to the URL encoding rules in step 1.b. percentEncode(CanonicalizedQueryString) is the encoded string of the canonicalized query string from step 1.a, also following the rules in step 1.b.Calculate the HMAC value of the string to sign as defined in RFC 2104.
NoteThe key for the HMAC calculation is your AccessKey secret with an ampersand (
&) (ASCII: 38) appended. The hash algorithm used is SHA1.Encode the HMAC value in Base64 to create the signature string (Signature).
Add the signature value as the Signature parameter to the request to complete the signing process.
NoteWhen you submit the signature value as the final request parameter to the Content Moderation server, it must be URL-encoded like other parameters, according to the rules in RFC 3986.