欢迎光临
我们一直在努力
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告

UCloud优刻得云服务UAI Censor内容鉴黄Java版本实现

本文目录
显示
1.
前言

2.
UCloud

3.
申请

4.
代码案例

5.
小结

前言

最近不少小伙伴反映上传小黄图偶尔性的异常,并且不能上传动态图片,很是苦恼!无她,鉴黄API还没有这么智能,毕竟是自己训练的,不是那么专业!为了更好的服务广大网友,撸主决定接入更加智能快速的鉴黄服务。内容推荐阅读《通过UCloud AI内容审核UAI-Censor免费搭建鉴黄平台教程》。

UAI Censor内容鉴黄插图

UCloud

UCloud内容审核产品,基于海量训练数据,结合深度学习识别技术,基于UCloud优刻得底层云服务,提供99.9%的服务稳定性保障。能够精准识别图片、视频中的低俗内容,适用于各类用户的鉴黄审核需求,帮助您在业务层面降低违规风险,同时应用算法服务,也大大减轻了人工审核的投入成本。

最主要的是,UCloud鉴黄识别服务在2020年6月30日前,均免费试用。即使到期以后,小伙伴们也不用太担心,鉴黄识别服务定价采取阶梯定价方式,每日2000张免费调用额度,剩余部分不累积。日2000张,尔等也只有仰望的份了。

申请

地址:http://www.ucloud.cn/site/product/uaicensor.html

总之很简单,都是中文文档,三五分钟就可以搞定的事情。

代码案例

比较扯淡的是官方只提供了Python和PHP版本的生成签名代码,难道我大JAVA不是宇宙第一语言?于是趁着夜深人静只能自己撸一把了!

application.properties引入以下配置

# ===================================
# UCloud鉴黄
# ===================================
ucloud.yellow.flag = true
ucloud.publicKey = **********
ucloud.privateKey = **********
ucloud.resourceId= **********
ucloud.url= http://api.uai.ucloud.cn/v1/image/scan

鉴黄工具类:

/**
  * ucloud 鉴黄
  * @param imageUrl
  * @return
  * 返回值
  * RetCode 0 标识正常 其余一律异常
  * Suggestion 建议, pass-放行, forbid-封禁, check-人工审核
  */
public String check(String imageUrl) {
        try {
            //图片绝对路径
            imageUrl = toolsUrl + imageUrl;
            RestTemplate rest = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            /**
             * 生成signature,首字母排序
             */
            String timestamp = System.currentTimeMillis()+"";
            SortedMap<Object, Object> packageParams = new TreeMap<>();
            packageParams.put("PublicKey", publicKey);
            packageParams.put("ResourceId", resourceId);
            packageParams.put("Timestamp", timestamp);
            packageParams.put("Url", imageUrl);
            String signature = UCloudUtil.createSign(packageParams,privateKey );
            /**
             * 参数
             */
            MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
            param.add("Scenes", "porn");
            param.add("Method", "url");
            param.add("Url", imageUrl);
            /**
             * headers 参数
             */
            headers.setContentType(MediaType.parseMediaType("multipart/form-data; charset=UTF-8"));
            headers.set("PublicKey", publicKey);
            headers.set("Signature",signature);
            headers.set("ResourceId",resourceId);
            headers.set("Timestamp", timestamp);
            HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(param, headers);
            ResponseEntity<String> responseEntity = rest.exchange(ucloudUrl, HttpMethod.POST, httpEntity, String.class);
            return responseEntity.getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
}

生成Signature签名算法流程包括四步:

  • 将请求参数按照名进行升序排列;
  • 构造被签名参数串;
  • 计算签名;
  • 使用签名组合HTTP请求。

代码案例:

/**
 * 生成签名
 */
public class UCloudUtil {
    /**
     * sign签名
     */
    public static String createSign(SortedMap<Object, Object> packageParams,
                                    String privateKey) throws Exception {
        StringBuffer sb = new StringBuffer();
        Set es = packageParams.entrySet();
        Iterator it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            String v =  (String)entry.getValue();
            sb.append(k + v);
        }
        sb.append(privateKey);
        String sign = shaEncode(sb.toString());
        return sign;
    }
    public static String shaEncode(String inStr) throws Exception {
        MessageDigest sha = null;
        try {
            sha = MessageDigest.getInstance("SHA");
        } catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        byte[] byteArray = inStr.getBytes("UTF-8");
        byte[] md5Bytes = sha.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16) {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }
}

返回结果:

{
    "RetCode": 0,
    "Message": "",
    "Timestamp": 1574821854,
    "Status": "Success",
    "StartTime": 1574821852685,
    "EndTime": 1574821854,
    "Result": {
        "Porn": {
            "Suggestion": "pass",
            "Score": 0.00187
        },
        "Politician": {
            "Suggestion": "",
            "Score": 0
        },
        "Terror": {
            "Suggestion": "",
            "Score": 0
        }
    }
}

撸主只需要关心RetCode和Porn这两个参数就可以了,RetCode为0说明API调用正常,Porn中的参数Suggestion为pass说明通过。

小结

只有壳的小黄图是没有灵魂的,希望各位网友,发扬艰苦奋斗的精神,把有限的灵魂注入到无限的小黄图中!这样,撸主才有动力升级更多有趣的功能。

此次升级优化了手机端显示的问题,使其更加耐看。接入新的鉴黄服务,和自建鉴黄一起使用双重保驾护航,同时小伙伴们可以自由的上传喜欢的动图了。

转自https://zhuanlan.zhihu.com/p/94460909

赞(0)
未经允许不得转载:优乐评测网 » UCloud优刻得云服务UAI Censor内容鉴黄Java版本实现

优乐评测网 找服务器 更专业 更方便 更快捷!

专注IDC行业资源共享发布,给大家带来方便快捷的资源查找平台!

联系我们