对接阿里云内容安全服务(机审视频检测)

阿里云内容安全异步检测文档地址: https://help.aliyun.com/document_detail/70436.htm?spm=a2c4g.11186623.0.0.6da625ecGmk0u6#reference-r3h-cdz-52b

依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-green</artifactId>
    <version>3.6.5</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>

代码:


/**
 * @description TODO
 * @Author Administrator
 * @Date 2022/1/19
 * @Version 1.0
 **/

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

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

public class AliyunVideoSyncCheck {

    /**
     * 异步视频鉴黄
     * @param imageUrl
     *        otherId: 业务ID
     * @throws Exception
     */
    public static String aliyunVideoAsyncCheck(String imageUrl, String otherId) throws Exception {

        IClientProfile profile = DefaultProfile.getProfile("cn-beijing", "请填写您的AccessKey ID", "请填写您的AccessKey Secret");
        /**
         *  支持的地域:
         *      cn-shanghai:华东2(上海)
         *      cn-beijing:华北2(北京)
         *      cn-shenzhen:华南1(深圳)
         *      ap-southeast-1:新加坡
         **/
        DefaultProfile.addEndpoint("cn-beijing", "cn-beijing", "Green", "green.cn-beijing.aliyuncs.com");// 调用
//        DefaultProfile.addEndpoint("cn-beijing", "cn-beijing", "Green", "green-vpc.cn-beijing.aliyuncs.com");// 如果服务器是阿里云服务器,则可以内网调用
        IAcsClient client = new DefaultAcsClient(profile);

        VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
        videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定api返回格式
        videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法

        List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
        Map<String, Object> task = new LinkedHashMap<String, Object>();
        if (StringUtils.isNotEmpty(otherId)){
            task.put("dataId", otherId);  // 视频所在业务数据的ID
        }
        task.put("url", imageUrl); // 待检测视频的URL。
        task.put("interval", 1); // 视频截帧间隔,单位为秒,取值范围:1~600。默认值为1秒。
        task.put("maxFrames", 240); // 系统对本次检测的视频进行截帧的张数上限,取值范围:5~3600,默认为200张。

        tasks.add(task);
        /**
         * 设置要检测的场景, 计费是按照该处传递的场景进行
         * 视频默认1秒截取一帧,您可以自行控制截帧频率,
         * 收费按照api请求次数进行计费
         *      传视频url : 算1.8次
         *      传截帧图片: 算1次
         *
         * porn: porn表示色情场景检测,terrorism表示暴恐涉政场景检测
         *
         * 视频截帧存放应该是单独的内容安全系统(不用管)
         */
        JSONObject data = new JSONObject();
        data.put("scenes", Arrays.asList("porn", "terrorism")); // porn:视频智能鉴黄。terrorism:视频暴恐涉政。ad:视频图文违规。live:视频不良场景。logo:视频logo。
        data.put("tasks", tasks);
		/**
         * 指定视频语音检测场景,唯一取值:antispam,表示语音反垃圾。不传入该参数时仅检测视频图像内容;如果传入该参数,则在检测视频中图像的同时,对视频中语音进行检测。
         * 如果需要检测视频语音,则不支持通过上传视频截帧序列的方式(即在task中传入frames)进行检测,您必须传入视频或视频流的URL地址(即在task中传入url)进行检测。
         **/
        data.put("audioScenes", Arrays.asList("antispam")); // 视频语音检测
        
        videoAsyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);

        /**
         * 请务必设置超时时间
         */
        videoAsyncScanRequest.setConnectTimeout(3000);
        videoAsyncScanRequest.setReadTimeout(6000);
        try {
            HttpResponse httpResponse = client.doAction(videoAsyncScanRequest);

            if(httpResponse.isSuccess()){
                JSONObject jsonObject = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
//                System.out.println(JSON.toJSONString(jsonObject, true));
                if (200 == jsonObject.getInteger("code")) {
                    JSONArray taskResults = jsonObject.getJSONArray("data");
                    for (Object taskResult : taskResults) {
                        if (200 == ((JSONObject) taskResult).getInteger("code")) {
                            String taskId = ((JSONObject) taskResult).getString("taskId");
                            return taskId;
                        }
                    }
                }
            }else{
                System.out.println("response not success. status:" + httpResponse.getStatus());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 查询异步检测结果 ( 查询检测结果api不计费 )   建议查询间隔设置成30秒(即在提交异步检测任务30秒后查询结果),最长不能超过4小时,否则结果将会丢失
     * @param taskId
     * @return
     * @throws Exception
     */
    public static boolean getResult(String taskId) throws Exception {
        boolean flag = false;
        IClientProfile profile = DefaultProfile.getProfile("cn-beijing", "请填写您的AccessKey ID", "请填写您的AccessKey Secret");
        DefaultProfile.addEndpoint("cn-beijing", "cn-beijing", "Green", "green.cn-beijing.aliyuncs.com"); // 调试
//        DefaultProfile.addEndpoint("cn-beijing", "cn-beijing", "Green", "green-vpc.cn-beijing.aliyuncs.com");// 如果服务器是阿里云服务器,则可以内网调用
        IAcsClient client = new DefaultAcsClient(profile);

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

        List<String> taskList = new ArrayList<String>();
        // 这里添加要查询的taskId,提交任务的时候需要自行保存taskId
        taskList.add(taskId);

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

        /**
         * 请务必设置超时时间
         */
        videoAsyncScanResultsRequest.setConnectTimeout(3000);
        videoAsyncScanResultsRequest.setReadTimeout(6000);
        try {
            HttpResponse httpResponse = client.doAction(videoAsyncScanResultsRequest);
            if(httpResponse.isSuccess()){
                JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
//                System.out.println(JSON.toJSONString(jsonObject, true));
                if (200 == scrResponse.getInteger("code")) {
                    JSONArray taskResults = scrResponse.getJSONArray("data");
                    for (Object taskResult : taskResults) {
                        if (200 == ((JSONObject) taskResult).getInteger("code")) {
                            JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results");
                            for (Object sceneResult : sceneResults) {
                                String scene = ((JSONObject) sceneResult).getString("scene");
                                String suggestion = ((JSONObject) sceneResult).getString("suggestion");
                                //根据scene和suggetion做相关的处理
                                //do something
                                System.out.println("scene = [" + scene + "]");
                                /**
                                  *  pass:结果正常,无需进行其余操作。
                                  *  review:结果不确定,需要进行人工审核。
                                  *  block:结果违规,建议直接删除或者限制公开。
                                 **/
                                System.out.println("suggestion = [" + suggestion + "]");
                                if (!"pass".equals(suggestion)){
                                    flag = false;
                                    return flag;
                                }else {
                                    flag = true;
                                }
                            }
                        } else {
                            System.out.println("task process fail:" + ((JSONObject) taskResult).getInteger("code"));
                        }
                    }
                } else {
                    System.out.println("detect not success. code:" + scrResponse.getInteger("code"));
                }
            }else{
                System.out.println("response not success. status:" + httpResponse.getStatus());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return flag;
    }

//    /**
//     * 同步检测
//     * @param imageUrl
//     * @return
//     * @throws Exception
//     */
//    public static boolean aliyunVideoSyncCheck(String imageUrl) throws Exception {
//        boolean flag = false;
//        IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", "---accessKeyId---", "--accessKeySecret--");
//        DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
//        IAcsClient client = new DefaultAcsClient(profile);
//
//        VideoSyncScanRequest videoSyncScanRequest = new VideoSyncScanRequest();
//        videoSyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定api返回格式
//        videoSyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法
//
//        List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
//        Map<String, Object> task = new LinkedHashMap<String, Object>();
//        task.put("dataId", UUID.randomUUID().toString());
//
//        List<Map<String, Object>> frames = new ArrayList<Map<String, Object>>();
//        Map<String, Object> frame1 = new LinkedHashMap<String, Object>();
//        frame1.put("offset", 0);
//        frame1.put("url", "https://img.alicdn.com/tfs/TB1k_g9l26H8KJjSspmXXb2WXXa-600-600.jpg");
//
//        Map<String, Object> frame2 = new LinkedHashMap<String, Object>();
//        frame2.put("offset", 5);
//        frame2.put("url", "http://pic12.nipic.com/20110221/6727421_210944911000_2.jpg");
//
//        Map<String, Object> frame3 = new LinkedHashMap<String, Object>();
//        frame3.put("offset", 10);
//        frame3.put("url", "http://rifleman-share.oss-cn-hangzhou.aliyuncs.com/test/%E6%AD%A3%E5%B8%B8/68d5883924c9e8cc88806a73bd7a8995.jpg");
//        frames.addAll(Arrays.asList(frame1, frame2, frame3));
//
//        task.put("frames", frames);
//        tasks.add(task);
//        /**
//         * 设置要检测的场景, 计费是按照该处传递的场景进行
//         * porn: porn表示色情场景检测
//         */
//        JSONObject data = new JSONObject();
//        data.put("scenes", Arrays.asList("porn", "terrorism"));
//        data.put("tasks", tasks);
//
//        videoSyncScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
//
//        /**
//         * 请务必设置超时时间
//         */
//        videoSyncScanRequest.setConnectTimeout(3000);
//        videoSyncScanRequest.setReadTimeout(10000);
//        try {
//            HttpResponse httpResponse = client.doAction(videoSyncScanRequest);
//
//            if(httpResponse.isSuccess()){
//                JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
//                //System.out.println(JSON.toJSONString(jsonObject, true));
//                if (200 == scrResponse.getInteger("code")) {
//                    JSONArray taskResults = scrResponse.getJSONArray("data");
//                    for (Object taskResult : taskResults) {
//                        if (200 == ((JSONObject) taskResult).getInteger("code")) {
//                            JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results");
//                            for (Object sceneResult : sceneResults) {
//                                String scene = ((JSONObject) sceneResult).getString("scene");
//                                String suggestion = ((JSONObject) sceneResult).getString("suggestion");
//                                //根据scene和suggetion做相关的处理
//                                //do something
//                                System.out.println("scene = [" + scene + "]");
//                                System.out.println("suggestion = [" + suggestion + "]");
//                                if (!"pass".equals(suggestion)){
//                                    flag = false;
//                                    return flag;
//                                }else {
//                                    flag = true;
//                                }
//                            }
//                        } else {
//                            System.out.println("task process fail:" + ((JSONObject) taskResult).getInteger("code"));
//                        }
//                    }
//                } else {
//                    System.out.println("detect not success. code:" + scrResponse.getInteger("code"));
//                }
//            }else{
//                System.out.println("response not success. status:" + httpResponse.getStatus());
//            }
//        } catch (ServerException e) {
//            e.printStackTrace();
//        } catch (ClientException e) {
//            e.printStackTrace();
//        }
//        return flag;
//    }


}

sql :

  • -查询一分钟前的数据
select  *  from  表名 where  时间字段名 <= (select SUBDATE(now(),interval 60 second));
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。在过去的十年中,机器学习帮助我们自动驾驶汽车,有效的语音识别,有效的网络搜索,并极大地提高了人类基因组的认识。机器学习是当今非常普遍,你可能会使用这一天几十倍而不自知。很多研究者也认为这是最好的人工智能的取得方式。在本课中,您将学习最有效的机器学习技术,并获得实践,让它们为自己的工作。更重要的是,你会不仅得到理论基础的学习,而且获得那些需要快速和强大的应用技术解决问题的实用技术。最后,你会学到一些硅谷利用机器学习和人工智能的最佳实践创新。 本课程提供了一个广泛的介绍机器学习、数据挖掘、统计模式识别的课程。主题包括: (一)监督学习(参数/非参数算法,支持向量机,核函数,神经网络)。 (二)无监督学习(聚类,降维,推荐系统,深入学习推荐)。 (三)在机器学习的最佳实践(偏差/方差理论;在机器学习和人工智能创新过程)。本课程还将使用大量的案例研究,您还将学习如何运用学习算法构建智能机器人(感知,控制),文本的理解(Web搜索,反垃圾邮件),计算机视觉,医疗信息,音频,数据挖掘,和其他领域。 本课程需要10周共18节课,相对以前的机器学习视频,这个视频更加清晰,而且每课都有ppt课件,推荐学习。 我和我的团队翻译了部分视频,目前已经翻译完毕,内嵌中英文字幕,推荐使用potplayer。此外,我无偿把字幕贡献给了网易云课堂,他们开了免费课:吴恩达机器学习。 这篇中文笔记,主要是根据视频内容和中文字幕以及ppt来制作,部分来源于网络,如“小小人_V”的笔记,并持续更新。 本人水平有限,如有公式、算法错误,请及时指出,发邮件给我,也可以加我qq。 今日发现这个笔记被下载超过10万次,应该说这个笔记有点用,我发现以前一些翻译小错误,进行了修改,以免误导初学者。 黄海广 2018-3-7 夜

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微一笑满城空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值