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

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

更多精彩 第一时间直达

一、前言

最近不少小伙伴反映上传小黄图偶尔性的异常,并且不能上传动态图片,很是苦恼!无她,鉴黄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. 深夜,吐血训练了百万小黄图撸了一个鉴黄图床


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
在C#中使用NSFWSPY进行鉴黄检测,你可以按照以下步骤进行操作: 1. 首先,你需要安装NSFWSPY NuGet包。在Visual Studio中,右键点击你的项目,选择"Manage NuGet Packages",然后搜索并安装NSFWSPY。 2. 导入必要的命名空间: ```csharp using NSFWSPY; using System.IO; ``` 3. 加载模型并创建NSFWSPY实例: ```csharp var modelFilePath = "path/to/nsfw_model.pb"; var threshold = 0.6f; // 设置鉴黄的阈值 var nsfwSpy = new NSFWSPY.NSFWSPY(modelFilePath, threshold); ``` 请确保将`modelFilePath`替换为你实际的NSFW模型文件的路径,并根据需要调整阈值。 4. 对图像进行鉴黄检测: ```csharp var imagePath = "path/to/image.jpg"; using (var imageStream = File.OpenRead(imagePath)) { var result = nsfwSpy.Classify(imageStream); Console.WriteLine($"NSFW Score: {result.NSFWScore}"); Console.WriteLine($"SFW Score: {result.SFWScore}"); Console.WriteLine($"Is NSFW: {result.IsNSFW}"); } ``` 请将`imagePath`替换为要进行鉴黄检测的图像文件的路径。 5. 运行代码并查看结果。`result.NSFWScore`表示图像被判定为不安全的分数,`result.SFWScore`表示图像被判定为安全的分数,`result.IsNSFW`表示是否被判定为不安全。 请注意,NSFWSPY是基于TensorFlow实现的,因此你需要在项目中包含正确的TensorFlow库文件。此外,确保你使用的模型文件与NSFWSPY库兼容。 希望这可以帮助你使用NSFWSPY进行鉴黄检测。如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值