点击▲关注 “爪哇笔记”   给公众号标星置顶

更多精彩 第一时间直达

一、前言

最近不少小伙伴反映上传小黄图偶尔性的异常,并且不能上传动态图片,很是苦恼!无她,鉴黄API还没有这么智能,毕竟是自己训练的,不是那么专业!为了更好的服务广大网友,撸主决定接入更加智能快速的鉴黄服务。

二、UCloud

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

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

三、申请

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

  • 创建内容审核应用

  • 获取账户公私钥,鉴黄必备

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

四、撸码

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

application.properties 引入以下配置:

  1. # ===================================

  2. # UCloud鉴黄

  3. # ===================================

  4. ucloud.yellow.flag = true

  5. ucloud.publicKey = **********

  6. ucloud.privateKey = **********

  7. ucloud.resourceId= **********

  8. ucloud.url= http://api.uai.ucloud.cn/v1/image/scan

鉴黄工具类:

  1. /**

  2. * ucloud 鉴黄

  3. * @param imageUrl

  4. * @return

  5. * 返回值

  6. * RetCode 0 标识正常 其余一律异常

  7. * Suggestion 建议, pass-放行, forbid-封禁, check-人工审核

  8. */

  9. public String check(String imageUrl) {

  10. try {

  11. //图片绝对路径

  12. imageUrl = toolsUrl + imageUrl;

  13. RestTemplate rest = new RestTemplate();

  14. HttpHeaders headers = new HttpHeaders();

  15. /**

  16. * 生成signature,首字母排序

  17. */

  18. String timestamp = System.currentTimeMillis()+"";

  19. SortedMap<Object, Object> packageParams = new TreeMap<>();

  20. packageParams.put("PublicKey", publicKey);

  21. packageParams.put("ResourceId", resourceId);

  22. packageParams.put("Timestamp", timestamp);

  23. packageParams.put("Url", imageUrl);

  24. String signature = UCloudUtil.createSign(packageParams,"ydiU62uvFzYJkvW3nD4weEhtrW-h5G2DvYvLYbexUMTHOS8jpbcctAEVPXtQPcdu");

  25. /**

  26. * 参数

  27. */

  28. MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();

  29. param.add("Scenes", "porn");

  30. param.add("Method", "url");

  31. param.add("Url", imageUrl);

  32. /**

  33. * headers 参数

  34. */

  35. headers.setContentType(MediaType.parseMediaType("multipart/form-data; charset=UTF-8"));

  36. headers.set("PublicKey", publicKey);

  37. headers.set("Signature",signature);

  38. headers.set("ResourceId",resourceId);

  39. headers.set("Timestamp", timestamp);

  40. HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(param, headers);

  41. ResponseEntity<String> responseEntity = rest.exchange(ucloudUrl, HttpMethod.POST, httpEntity, String.class);

  42. return responseEntity.getBody();

  43. } catch (Exception e) {

  44. e.printStackTrace();

  45. return "";

  46. }

  47. }

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

  • 将请求参数按照名进行升序排列;

  • 构造被签名参数串;

  • 计算签名;

  • 使用签名组合HTTP请求。

代码案例:

  1. /**

  2. * 生成签名

  3. */

  4. public class UCloudUtil {

  5. /**

  6. * sign签名

  7. */

  8. public static String createSign(SortedMap<Object, Object> packageParams,

  9. String privateKey) throws Exception {

  10. StringBuffer sb = new StringBuffer();

  11. Set es = packageParams.entrySet();

  12. Iterator it = es.iterator();

  13. while (it.hasNext()) {

  14. Map.Entry entry = (Map.Entry) it.next();

  15. String k = (String) entry.getKey();

  16. String v = (String)entry.getValue();

  17. sb.append(k + v);

  18. }

  19. sb.append(privateKey);

  20. String sign = shaEncode(sb.toString());

  21. return sign;

  22. }

  23. public static String shaEncode(String inStr) throws Exception {

  24. MessageDigest sha = null;

  25. try {

  26. sha = MessageDigest.getInstance("SHA");

  27. } catch (Exception e) {

  28. System.out.println(e.toString());

  29. e.printStackTrace();

  30. return "";

  31. }

  32. byte[] byteArray = inStr.getBytes("UTF-8");

  33. byte[] md5Bytes = sha.digest(byteArray);

  34. StringBuffer hexValue = new StringBuffer();

  35. for (int i = 0; i < md5Bytes.length; i++) {

  36. int val = ((int) md5Bytes[i]) & 0xff;

  37. if (val < 16) {

  38. hexValue.append("0");

  39. }

  40. hexValue.append(Integer.toHexString(val));

  41. }

  42. return hexValue.toString();

  43. }

  44. }

返回结果:

  1. {

  2. "RetCode": 0,

  3. "Message": "",

  4. "Timestamp": 1574821854,

  5. "Status": "Success",

  6. "StartTime": 1574821852685,

  7. "EndTime": 1574821854,

  8. "Result": {

  9. "Porn": {

  10. "Suggestion": "pass",

  11. "Score": 0.00187

  12. },

  13. "Politician": {

  14. "Suggestion": "",

  15. "Score": 0

  16. },

  17. "Terror": {

  18. "Suggestion": "",

  19. "Score": 0

  20. }

  21. }

  22. }

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

五、灵魂

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

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

遗漏热文?赶紧标星

1. 周末,撸一个鉴黄 API 给大家

2. 深夜,给小黄图撸了一件漂亮的外壳

3. 深夜,吐血训练了百万小黄图撸了一个鉴黄图床

▲一个有温度的公众号,期待与你一起进步

小黄图升级了,接入更加强大的鉴黄功能相关推荐

  1. java 鉴黄_真香,我把百万鉴黄服务源码开源了

    前言 最近某云审查的比较严,图床上的内容也无奈关闭了,有兴趣的小伙伴可以使用炒鸡工具箱自行搭建.今儿跟大家分享一下之前自建鉴黄服务的这个流程顺便分享一下相关源码. 图床架构 鉴黄流程 代码案例 建议有 ...

  2. 100万+的小黄图后台管理系统终于开源了

    点击▲关注 "爪哇笔记"   给公众号标星置顶 更多精彩 第一时间直达 2019年11月22日鉴黄图床上线了,网友们也都很积极,甚是踊跃的上传了不少有趣的图片,当然由于一些特殊原因 ...

  3. 我在互联网大厂当鉴黄师:不看黄图敲代码,同事全都是博士

    AI鉴黄师的要求门槛极高,高学历几乎成为职业标配 鉴黄师工作轻松,有意思,但身体要过硬.外界眼中的鉴黄师,是一份令人想入非非的职业.关于鉴黄师的段子层出不穷,"带薪看片"可能是最大 ...

  4. 简图 新聚合图床源码 自带鉴黄功能

    简介: 一个图床聚合程序,自带鉴黄功能,违规图片智能拦截 可以直接复制上传以后的链接以及预览 支持5个接口上传,图片都支持https 永久免费图床,无需注册,批量上传,即时预览,无限流量,无限外链,永 ...

  5. 简图 新聚合图床源码自带鉴黄功能

    介绍: 一个图床聚合程序,自带鉴黄功能,违规图片智能拦截 永久免费图床,无需注册,批量上传,即时预览,无限流量,无限外链,永久保存,微博服务器,全网CDN,高速稳定,网页上传,无需插件. 支持JPG, ...

  6. 黄图识别-open nsfw

    大楷简介: open nsfw是一款开源的黄图识别的模型.对的,只是模型.并且有有python的代码作为预测图片是否黄图. https://github.com/yahoo/open_nsfw 这里网 ...

  7. AI算法起家的今日头条为何败给了色情?一文告诉你机器学习何以搞不定鉴黄

    12月29日,国家互联网信息办公室在官网发布消息称,针对今日头条.凤凰新闻手机客户端持续传播色情低俗信息.违规提供互联网新闻信息服务等问题,要求北京市互联网信息办公室分别约谈两家企业负责人,责令企业立 ...

  8. 计算机视觉怎么知道你在发小黄图...

    今天跟大家分享下百度团队在前不久做的一次计算机视觉(CV)的专场分享. 本次的领域信息处理 CV 专场一共有两节课,如何使用 EasyDL 构建互联网内容安全方案(图像内容审核)和膀胱肿瘤识别模型构建 ...

  9. 云服务中消灭小黄图的大宝剑---X次元口袋

    X 次元口袋 把数据的场景做深做透,真正帮助用户缩短从想法到产品的距离,是七牛一直以来的使命.从 2011 年至今,围绕数据管理打造场景化 PaaS ,我们已经服务了超过五十万家客户,承载了超过 20 ...

最新文章

  1. 有哪些「魔改」损失函数,曾经拯救了你的深度学习模型?
  2. Python基础编程——字典的创建
  3. 性价比高出英特尔45%,亚马逊的云服务器芯片如何做到?| 解读
  4. “买傅园慧送胡歌”,信息安全何以如此廉价
  5. 【Java开发问题】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
  6. spring boot 项目打成war包部署到服务器
  7. java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...
  8. IDEA Maven创建多个Module相互依赖
  9. H3C查看系统启动配置文件
  10. 应用安全 - 代码审计 -Java
  11. ios GCD ---- (1)
  12. redis实现高并发下的抢购/秒杀功能
  13. 软件质量保障之代码走查
  14. visio显示形状窗口
  15. 自建公众号服务器开发教程,01-微信公众号开发入门篇
  16. VMWare SCSI硬盘识别
  17. 服务器如何选择固态硬盘,为什么绝大数服务器还使用机械硬盘,而不选固态硬盘呢?...
  18. 计算机应用技术 快捷键,几个实用的电脑使用技巧和快捷键
  19. CentOS7防火墙配置,重启
  20. 荣誉系统排名是整个服务器,魔兽世界怀旧服pvp荣誉系统是什么-魔兽世界怀旧服pvp荣誉系统奖励有哪些_牛游戏网...

热门文章

  1. dos命令批量修改图片名称
  2. 高性能服务器架构(High-Performance Server Architecture) .
  3. vc项目开发:俄罗斯方块制作日志 [上]
  4. Jexl表达式引擎(1)
  5. UNRAID挂载exFat格式的USB磁盘后续(自动挂载)
  6. 微型计算机曾经使用过的字长,自考《计算机应用基础》模拟试题七
  7. 什么是OPC UA?为什么它会继续使用?
  8. 在centos7.7安装搜狗输入法踩坑日记
  9. 从社交图谱看Web3.0在社交领域的探索
  10. SQL中将查询结果赋值给变量