前言 最近不少小伙伴反映上传小黄图偶尔性的异常,并且不能上传动态图片,很是苦恼!无她,鉴黄API还没有这么智能,毕竟是自己训练的,不是那么专业!为了更好的服务广大网友,撸主决定接入更加智能快速的鉴黄服务。 UCloud UCloud内容审核产品,基于海量训练数据,结合深度学习识别技术,基于UCloud底层云服务,提供99.9%的服务稳定性保障。能够精准识别图片、视频中的低俗内容,适用于各类用户的鉴黄审核需求,帮助您在业务层面降低违规风险,同时应用算法服务,也大大减轻了人工审核的投入成本。 最主要的是,鉴黄识别服务在2020年6月30日前,均免费试用。即使到期以后,小伙伴们也不用太担心,鉴黄识别服务定价采取阶梯定价方式,每日2000张免费调用额度,剩余部分不累积。日2000张,尔等也只有仰望的份了。 申请 地址:www.ucloud.cn/site/product/uaicensor.html 创建UAI Censor AI内容审核应用 获取账户公私钥,鉴黄必备 总之很简单,都是中文文档,三五分钟就可以搞定的事情。 代码案例 比较扯淡的是官方只提供了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 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 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> httpEntity = new HttpEntity<>(param, headers); ResponseEntity 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 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://www.cloudbed.vip https://docs.ucloud.cn/ai/uai-censor/access/key https://docs.ucloud.cn/ai/uai-censor/api/censor/image 作者: 小柒 出处: https://blog.52itstyle.vip 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。https://www.cnblogs.com/smallSevens/p/11957664.html