NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

拯救尴尬:鉴黄神器 NSFW JS 开源了!

  • 2019-02-26
  • 本文字数:1907 字

    阅读完需:约 6 分钟

拯救尴尬:鉴黄神器NSFW JS开源了!

近日,GitHub 上开源了一款鉴定不雅内容的 js 库 NSFW JS,你可以使用 NSFW JS 识别不雅内容,所有操作都只在客户端进行,甚至都不需要让文件离开用户的电脑。


演示地址:https://nsfwjs.com/


项目地址:https://github.com/infinitered/nsfwjs


你有没有过这样的经历,在睡觉之前看了一些东西,然后在闭上眼睛时那些东西仍然历历在目?我说的可不是那种甜蜜的美梦,而是那种被你的老板看到后会让你卷铺盖走人的东西。


用户的输入可能会很恶心。我的一个朋友之前开了一家网店,居然可以允许用户输入负的数。一些恶意用户会购买一件 50 美元的衬衫,然后再加上负一件 40 美元的衬衫,从而达到打折的效果!纠正用户输入的数字是很容易的,但如果是图片呢?那是不可能的!


机器学习正在做着令人惊叹的事情,现在已经开始进入 JavaScript 领域,那些令人惊叹的事情无处不在。

NSFW JS NPM 模块

我可以用一整章的内容来介绍 NSFW JS 内部原理,但还是让我们来关注它的功能吧。


给 NSFW JS 一张图片元素或画布,然后简单地调用 classify,可能会得到如下 5 个分类结果。


  • 绘画(Drawing)——无害的艺术,或艺术绘画;

  • 变态(Hentai)——色情艺术,不适合大多数工作环境;

  • 中立(Neutral)——一般,无害的内容;

  • 色情(Porn)——不雅的内容和行为,通常涉及生殖器;

  • 性感(Sexy)——不合时宜的挑衅内容。


每个分类都有一个概率!基于这些数字和分类,你可以采取行动或者只是目瞪口呆。


为什么要用它?

大公司一般都有专门的团队专注于消除令人反感的内容,但我们一般享受不到这种奢侈。就像客户端的表单验证可以减少服务器端的工作量一样,客户端的内容检查也可以减少团队的工作量。

场景 1:

想象一下,当用户要上传淫秽图像时,他们会立即收到这样的消息:“抱歉!这张图片的一些内容已经触发了内容警告。你仍然可以上传图片,但不会立即可用,需要通过人工审核后才会生效”。用户看到这条消息后可能会放弃上传。

场景 2:

它也可以用于用户到用户的保护。在从别人那里接收消息时,可能会收到警告,告知他们要查看的内容是不是适合。如果可以查看,它会在显示之前进行确认,而这些是在没有服务器处理的情况下完成的!


随着用户上传内容的合法性变得越来越重要,我们需要更大更好的工具来保证优质网站的畅通。

如何使用它?

这很简单,基本上包含三个步骤:


1.获取代码;


2.在客户端加载模型;


3.对图像进行分类。

1. 获取代码

我将向你展示 Node 风格的用法。首先,我们需要引入 NSFW JS。如果项目中尚未包含 TensorflowJS,请先获取它。



现在,我们可以在 JS 文件中导入 Node 模块:


// Classic import styleimport * as nsfwjs from 'nsfwjs'// or just use require('nsfwjs')
复制代码

2. 在客户端加载模型

接下来我们需要做的是加载模型。这个“模型”是用来评估图像的函数。可以在这里下载它们。这些文件是 4MB 大小的分片,便于在客户端进行缓存。在我的示例中,我将它们放在 public/model/文件夹中。



如果你的目录也一样,那么可以使用这个路径来加载模型。


// Load files from the server to the client!const model = await nsfwjs.load('/model/')
复制代码

3. 对图像进行分类

现在,模型已经存在于客户端的内存中,我们可以对页面上的图像元素进行分类。


// Gimme that imageconst img = document.getElementById('questionable_img')
// Classify the imageconst predictions = await model.classify(img)// Share resultsconsole.log('Predictions: ', predictions)
复制代码


预测(默认情况下)将返回 5 个分类结果,按照最可能到最不可能的顺序排列!例如:


[  {className: “Drawing”, probability: 0.9195643663406372},  {className: “Hentai”, probability: 0.07729756087064743},  {className: “Porn”, probability: 0.0019258428364992142},  {className: “Neutral”, probability: 0.0011005623964592814},  {className: “Sexy”, probability: 0.00011146911856485531}]
复制代码


所有概率的总和应该加起来等于 1 或 100%。现在,你可以基于这些数据做你想做的事情!标记超过 60%的东西,或者只用最前面那个,把其余的忽略掉。

误报

作为人类,你可能经过了几十年的图像识别训练。所以可以肯定地说,你肯定会遇到一些很明显的误报。虽然这些通常很有趣,但结果中也会出现少量的数据偏差。随着数据清洗技术的改进,这些偏差将被消除。这是一个缓慢的过程。


对于像 NSFW 这样的东西,我觉得出现误报总比出现漏网之鱼更好。

动手演示

需要注意的是,NSFW 可能会发生误报,但这个模型每天都在不断改进。因为是开源的,所以我希望大家一起帮助改进它!



英文原文:


https://shift.infinite.red/avoid-nightmares-nsfw-js-ab7b176978b1


更多内容,请关注前端之巅。



2019-02-26 14:3412712
用户头像

发布了 38 篇内容, 共 30.6 次阅读, 收获喜欢 206 次。

关注

评论 3 条评论

发布
用户头像
nice
2019-03-21 17:01
回复
用户头像
哭了,弄了一天没弄好,有谁有教程吗
2019-03-17 16:27
回复
用户头像
这个演示网站没有效果啊
2019-03-05 14:25
回复
没有更多了
发现更多内容

【21-3】PowerShell 环境

耳东@Erdong

PowerShell Windows Server 6月日更

5000字 | 详解 Java 中的 21 种锁

悟空聊架构

Java 读写锁 锁升级 6月日更

MySQL 亿级数据分页的优化

xcbeyond

MySQL 数据库优化 6月日更

5分钟速读之Rust权威指南(二十)

wzx

rust

☕【JVM技术探索】Class字节码指令方法调用初探

洛神灬殇

Java JVM 6月日更 字节码指令

一文说尽 Linux 系统的 swap 交换空间

看山

Linux 6月日更

百度创新发布“炫瞳活体”技术!起底金融级人脸实名认证方案背后的硬实力

百度大脑

人工智能

区块链如何赋能数字城市建设?

CECBC

智慧组工系统搭建,组织部干部任免系统

算法训练营 - 学习笔记 - 第九周

心在飞

Kubernetes手记(7)- 控制器配置清单

雪雷

k8s 6月日更

Pandas之:深入理解Pandas的数据结构

程序那些事

Python 数据分析 pandas 程序那些事

平阴玫瑰×浪潮云洲:见证一朵玫瑰的绽放

浪潮云

云计算

MySQL基础之八:外连接

打工人!

myslq 6月日更

常见词向量模型

Qien Z.

6月日更 词向量 SkipGram 矩阵分解 Glove

关于 JavaScript 是否加分号的问题

KooFE

6月日更

Fork原项目新增分支的同步和推送

Skysper

git

react源码解析11.生命周期调用顺序

全栈潇晨

react.js

应对全场景AI框架部署挑战,MindSpore“四招”让你躺平

华为云开发者联盟

深度学习 AI mindspore 算子 ai框架

欧洲杯发布首座区块链奖杯:中国设计师创作,灵感来源小篆

CECBC

【Vue2.x 源码学习】第十篇 - 数组数据变化的观测情况

Brave

源码 vue2 6月日更

跨域背后的故事(一)-----同源策略

卢卡多多

浏览器 同源策略 6月日更

缓存与数据库的双写一致性

leonsh

MySQL redis 缓存

时代变了,程序员の老冤家IE浏览器离场啦?!

空城机

JavaScript 微软 大前端 IE 6月日更

☕️【Java技术之旅】带你实战使用String的功能特性

洛神灬殇

Java string 字符串 6月日更

Alibaba大佬用了3个月,把Java后端95%的技术体系都整理出来了!

Java架构师迁哥

如何在手机上保护自己的隐私?

石云升

隐私保护 数据安全 6月日更

绿色数据时代,全闪存与数据中心的注定邂逅

脑极体

你真的很忙么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

读深入ES6记[四]

蛋先生DX

ES6 6月日更

开发感想 初学51单片机建议用C语言

万里无云万里天

开发感想 8051

拯救尴尬:鉴黄神器NSFW JS开源了!_开源_Gant Laborde_InfoQ精选文章