JavaServer集成图谱鉴黄

(适用于ydm-java接口与后台,如有误入,但愿也能给您带来帮助)
引子:

起源于社交,后宫应用,当时候业主考量周密,让增添这么一个功能,并推荐使用 图谱科技 的鉴黄。说白了就是在视频聊天时,截取两者的画面,传给接口,接口将图片地址告诉图谱,图谱给反馈,色情、性感、正常;并给出认定的百分比以及是否需要复审的状态。

碎碎念:
  • 图谱注册一个账户都需要人工审核,想要试用还得加客服QQ,这里也是一样的,官方提供 JavaSDK ,在客服的指引下上传公钥,保存私钥;客服一般会提供一些测试所需的AppKey之类;
  • 直到现在Android还做不到在融云视频聊天时截取图片上传,因为各种方面的限制吧;所以这个功能只在iOS上是完美的;App端开一个定时器,按照固定的秒数截取图片上传,以base64的形式,接口解作图片,将地址给图谱发过去,图谱就会有返回值了。这个时候各种逻辑啊,插入数据库啊之类的就开始了;另外,会做一个判断,在返回值是正常且不需要复审的情况下,将刚刚那张图片删除掉,以节省服务器空间;而有嫌疑的图片就留着,当做证据好了。
接口处理的代码:
/**
     * 保存鉴黄表信息
     */
    public String saveComplaint(Integer video_order,String img,String privateKey,HttpServletRequest request){
        //查询双方
        BalanceOfPayments balanceOfPayments  = balanceOfPaymentsMapper.queryConsumeById(video_order);
        //保存
        Complaint complaint = new Complaint();
        //请求图谱
        ArrayList imgs = new ArrayList();
        imgs.add(TUPUIMGPATH + img);
        String[] tags = {String.valueOf(video_order)};
        //返回值
        JSONObject obj = TuPuApi.tuPuApi(imgs, tags, privateKey);
        //验证是否请求成功
        Integer code = (Integer) obj.get("code");
        if(0 == code){
            log.info("成功接收到图谱的反馈,调用鉴黄成功");
            JSONObject objImg = (JSONObject) obj.get("54bcfc6c329af61034f7c2fc");
            List fileList =  (List) objImg.get("fileList");
            Double rate = (Double) fileList.get(0).get("rate");
            Integer label = (Integer) fileList.get(0).get("label");
            String name = (String) fileList.get(0).get("name");
            log.info(name);
            //fileList.get(0).get("tag");
            Boolean flag = (Boolean) fileList.get(0).get("review");
            Integer review = 2;
            if(flag){
                review = 1;
            }

            
            complaint.setVideo_order(video_order);//视频聊天订单号
            complaint.setBuy_id(balanceOfPayments.getBuyPersion().getId());//拨打人
            complaint.setSell_id(balanceOfPayments.getSellPersion().getId());//接听者
            complaint.setCreate_date(new Date());//鉴黄申请时间
            complaint.setReason("视频聊天自动鉴黄");//鉴黄备注
            complaint.setScreenshot(img);//鉴黄投诉图片
            complaint.setState(3);//图谱审核
            complaint.setType(0);//视频截图自动投诉

            complaint.setLabel(label);//(鉴黄)分类: 0:色情; 1:性感; 2:正常; 
            complaint.setReview(review);//(鉴黄)是否需要人工复审该图片  1需要  2不需要
            complaint.setRate(new BigDecimal(rate));//(鉴黄)图像被识别为某个分类的概率值


        }else{
            log.error("鉴黄反馈出错,具体原因为:" + obj.get("message"));
            return "passbuterror";
        }

        int count = complaintMapper.add_complaint(complaint);

        if(count != 1){
            log.error("保存鉴黄信息出错,视频订单id为:" + String.valueOf(video_order));
            return "passbuterror";
        }

        if(complaint.getLabel() == 2 && complaint.getReview() == 2){
            //删除鉴黄图片
            String var = PathUtil.GetAppName(request).replace("/", "\\");
            String project = PathUtil.GetAppRealPath(request);
            String path = project.replace(var+"\\", "").trim();
            FileUtil.delFile(path + img.replace("/", "\\"));
            return "pass";
        }else if(complaint.getLabel() != 2 && complaint.getReview() == 2){
            return "yellow";
        }else{
            return "maybe";
        }
    }

图谱提供的Api:

/**
     * 请求图谱
     * @param fileList   url的集合
     * @param tags       图片的附属信息
     * @param privateKey    私钥的路径
     * @return
     */
    public static JSONObject tuPuApi(ArrayList fileList,String[] tags,String privateKey){
        
        Api api = new Api(SECRETID, privateKey);
        
        JSONObject result = api.doApiTest(ConfigUtil.UPLOAD_TYPE.UPLOAD_URI_TYPE, fileList,tags);
        
        return result;
    }
备注:
  • 因为图谱需要的私钥是以路径的形式传入的,不是像支付宝那样写在代码里的;不应该放到upload底下,实际应该放到服务器的某个位置,做自己的读取,放到upload下,外界都能访问到了;
  • 每一个(组)图片都对应一个tag,反馈的时候会带过来,我这里放的是订单的id,好对后台的逻辑进行判断;
  • 官方的做法是推荐传很多的url,但是这里是实时的需求,所以就单张单张的调用了;
  • base64的做法我认为不太可取,实际上App端传图还是以file的形式比较好,接口这边做文件上传的处理就行,另外图谱支持url和流的形式上传图片,当然以url的时候,需要做外网映射,不然图谱那边访问不到;
  • 在图谱官网上传公钥的时候,需要将头尾保留
  • 图谱应该是远近闻名了,在融云里、七牛里均有集成。

你可能感兴趣的:(JavaServer集成图谱鉴黄)