怒爬某破Hub站资源,简单4步撸个鉴黄平台!
2020年Java原创面试题库连载中
【002期】JavaSE面试题(二):基本数据类型与访问修饰符
【003期】JavaSE面试题(三):JavaSE语法(1)
【004期】JavaSE面试题(四):JavaSE语法(3)
【020期】JavaSE系列面试题汇总(共18篇)
【022期】JavaWeb面试题(三):Cookie和Session
【024期】JavaWeb面试题(五):Filter和Listener
【032期】JavaEE面试题(四)Spring(2)
【035期】JavaEE面试题(七)SpringBoot(1)
更多内容,点击上面蓝字查看
黄色已经是我们所不容然而却防不胜防的,尤其是对于做内容的工具和平台,所以花了30分钟搭建了一个鉴黄平台,分享给大家。
数据准备
找了 N 多资源都不能解决问题,于是怒爬某 Bub资料,备用准备验证鉴黄效果。
账号准备
本文使用的是 UCloud 提供的 UAI-Censor,目前他支持图片,暴恐、涉政会陆续上线。他提供了每日2000张免费调用额度,所以无论对于测试还是小众的工具足够了。
1、使用如下链接注册账号
https://www.ucloud.cn/
2、创建 UAI-Censor 应用
获得应用 ID 进行鉴黄 API 调用的时候使用,注册成功以后进入控制台,搜索 UAI,然后点击 AI 内容审核
点击创建应用,输入自定义的应用名称,点击确定
点击确定以后会显示成功的弹框,高亮部分就是你的应用ID,留着备用
3、获取公钥、私钥,应用ID
获取了,但是不能所有人都操作吧?所有需要去注册一个公钥和私钥,这样只有你自己可以使用。点击进入如下链接
https://console.ucloud.cn/uapi/apikey
点击显示即可查看公钥私钥了
到这里就是万事具备只欠东风
4、编码
在编码之前我们可以手工调用一下 API 看下返回结果
如图所示,我们输入公钥、私钥和应用ID以后,点击验证会返回一堆的 JSON 其实我们关心的就是 Result 里面的 Porn 的 Suggestion,pass-放行, forbid-封禁, check-人工审核,那么上面这个测试就是 pass 放行了,等下,你居然不相信是吗?这时候某 Hub 的资源就派上用场了,来一张。
实在不忍直视啊,我就打码了,不过看到 forbid了吗
那我们直接编码吧,代码也是非常的简单,其中uaicensorPublicKey 和 uaicensorPrivateKey 是你自己的,这里就不显示了,因为使用的是 SpringBoot 项目,RestTemplate 用起来也是非常简单。
/**
* @param imageUrl
* @return pass-放行, forbid-封禁, check-人工审核
* @throws Exception
*/
public String check(String imageUrl) {
String ucloudUrl = "http://api.uai.ucloud.cn/v1/image/scan";
String appId = "uaicensor-rjmvogpx";
String uaicensorPublicKey = null;
String uaicensorPrivateKey = null;
//图片绝对路径
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
/**
* 生成signature,首字母排序
*/
String timestamp = System.currentTimeMillis() + "";
SortedMap<Object, Object> packageParams = new TreeMap<>();
packageParams.put("PublicKey", uaicensorPublicKey);
packageParams.put("ResourceId", appId);
packageParams.put("Timestamp", timestamp);
packageParams.put("Url", imageUrl);
String signature = null;
try {
signature = UCloudUtil.createSign(packageParams, uaicensorPrivateKey);
} catch (Exception e) {
return null;
}
/**
* 参数
*/
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", uaicensorPublicKey);
headers.set("Signature", signature);
headers.set("ResourceId", appId);
headers.set("Timestamp", timestamp);
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(param, headers);
ResponseEntity<String> responseEntity = rest.exchange(ucloudUrl, HttpMethod.POST, httpEntity, String.class);
String body = responseEntity.getBody();
JSONObject jsonObject = JSON.parseObject(body);
if (jsonObject.getInteger("RetCode") == 0) {
String res = jsonObject.getJSONObject("Result").getJSONObject("Porn").getString("Suggestion");
return res;
}
return null;
}
是不是非常简单?那么开始你的探索之旅吧?
来源:码匠笔记
- OpenCV3.x中UMat介绍与使用
- OpenCV中KMeans算法介绍与应用
- LinkedIn 即时通信系统的优化
- javascript console输出图片?
- 快速搭建Storm集群环境
- OpenCV中BLOB特征提取与几何形状分类
- OpenCV实现照片自动红眼去除
- OpenCV3.1.0级联分类器训练与使用
- 图像处理之理解Homography matrix(单应性矩阵)
- OpenCV中图像直方图与应用
- OpenCV中图像修复技术介绍与演示
- 44个Java代码性能优化总结
- LDA(Linear Discriminant Analysis)算法介绍
- Express.js 4,Node.js,MongoDB REST API 简易教程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MyBatis_resultMap 的关联方式实现多表查询(多对一)
- MyBatis_resultMap的N+1方式实现多表查询(多对 一)
- LeetCode 63. 不同路径 II
- 那些年遇到的刁钻JavaScript面试题(可防踩坑)
- JWT登录鉴权操作笔记 原
- c/c++补完计划(二-改): c字符串复制
- 来个鹅厂C语言面试题试试手?
- -1大于1,-1乘3不等于-3,C语言这个规则你必须得会!
- SQL注入攻击之sqlmap
- 空指针 到底是什么意思?
- 这三行C语言代码到底有没有问题?
- a+=b 和 a=a+b 真的完全等价吗?
- C语言 main 函数到底怎么写是对的?
- theia 安装 + 登录认证
- 必须掌握的HDFS相关问题