当第一次听说nude.js的时候,我非常怀疑这种浏览器端的裸体识别技术,有几个理由:

  1. 正常情况下,裸体识别应该在服务器端进行,这样,那些色情图片或色情视频才能在发送给浏览者前被发现。
  2. 我不相信完全依赖计算机能过滤掉所有色情内容(虽然我是个程序员)。
  3. 黑白裸体图像能被识别出来吗?准确率能有多少?
  4. 如果在客户端发现了色情图片,你能怎么做?这种技术如何使用?

  我用nude.js试验了不少内容,让我来告诉你如何使用它,以及我这些怀疑的答案是什么。

  观看演示

 关于nude.js裸体识别脚本

  从技术的角度上讲,nude.js使用了HTML5画布(Canvas)和WebWorker技术来操作图像进行分析。图像被复制到画布上,使用裸体识别算法进行比较,包括下面几种特征识别:

  • 在图像中查找类似肤色的像素。
  • 根据捕捉到的像素定位或构造皮肤位置。
  • 分析皮肤位置判断是裸体或非裸体。
  • 就裸露情况进行分级,判断是否属于裸露。

  nude.js支持IE9+ (excanvas), Firefox 3.6+, WebKit引擎的浏览器(谷歌浏览器, Safari, Mobile Safari,Opera)。nude.js还支持对视频进行截屏分析。

 nude.js的用法

  首先要在你的页面上引入nude.js脚本,然后是需要分析的图片:

1
2
3
4
5
6
7
8
9
10
11
<!-- 对于不支持画布技术的IE -->
<!--[if IE]>
<script type="text/javascript" src="excanvas_r3/excanvas.compiled.js"></script>
<![endif]-->
<script src="nude.js/compressed/nude.min.js"></script>
 
<!-- 需要识别的图片 -->
<img src="/lazy.gif?067588" data-original="dvt1.jpg" alt="Dita Von Tease" id="image1" onclick="onImageClick('image1');" />
<img src="/lazy.gif?067588" data-original="dvt2.jpg" alt="Dita Von Tease" id="image2" onclick="onImageClick('image2');" />
<img src="/lazy.gif?067588" data-original="dvt3.jpg" alt="Dita Von Tease" id="image3" onclick="onImageClick('image3');" />
<img src="/lazy.gif?067588" data-original="dvt4.jpg" alt="Dita Von Tease" id="image4" onclick="onImageClick('image4');" />

  nude.js的用法很简单,因为它只有两个方法:<code>load</code> 和 <code>scan</code>。其中 <code>load</code> 方法接受图片的 <code>id</code> 或图片本身,将其拷贝到画布里。而 <code>scan</code> 方法根据算法对画布数据进行分析,返回 <code>true</code> 或 <code>false</code>。

1
2
3
4
5
6
7
function onImageClick(node) {
    nude.load(node);
    // 扫描
    nude.scan(function(result){
        alert(result ? "在" + node.id + "发现裸露图像!" : "非裸体");
    });
}

  你可以想象出,这些过程是在浏览器里进行的,所以不要期望很迅速的得出结果。而且,很显然,图片尺寸是分析速度的一个重要因素。如果你的网站严重的依赖nude.js,小心那些大尺寸的图片。

 裸体识别的结果

  对于高质量的裸露女性的JPEG图片,这个小脚本检测成功率非常高。但对于暗色调或黑人皮肤却不是很成功。在我的测试中,nude.js没有识别出黑白裸露图像,也没有发现视频的色情影像(可能是我的视频清晰度不够)。

  观看演示

  不管怎么说,nude.js的表现还是很不错的,但总觉得这种技术还无法大规模使用。扫描图片需要时间,而且会卡住浏览器。因为nude.js(包括它使用的识别算法)对黑白图片和低质量的图片有缺陷,所以我不推荐在网站上大量的依赖这个脚本进行识别。

JavaScript裸体识别技术的更多相关文章

  1. 前端html、Javascript、CSS技术小结

    简单地总结了一下前端用过的html.javascript.css技术,算是清点一下,做个大略的小结,为进一步的学习给个纲领. 一.HTML 由于HTML5的兴起,简单地判断一个网页是否是html5网页 ...

  2. 人脸识别技术大总结(1):Face Detection & Alignment

    http://blog.jobbole.com/85783/     首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...

  3. PHP实现人脸识别技术

    这次人脸识别技术,是实现在微信端的,也就是说利用公众微信平台,调用第三的API来实现人脸识别这项技术的. 实现的思路: 首先呢,将收集的照片,建立一个照片库,然后利用在微信平台发送的照片,去到照片库进 ...

  4. Modelarts与无感识别技术生态总结(浅出版)

    [摘要] Modelarts技术及相关产业已成为未来AI与大数据重点发展行业模式之一,为了促进人工智能领域科学技术快速发展,modelarts现状及生态前景成为研究热点.笔者首先总结modelarts ...

  5. uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码

    uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码 优优云验证码识别答题平台介绍 优优云|UU云(中国公司)是全球唯一领先的智 ...

  6. 汽车Vin码识别——可以嵌入到手机里的新OCR识别技术

              汽车Vin码识别(车架号识别),顾名思义,就是识别汽车的Vin码(车架号),汽车Vin码识别(车架号识别)利用的是OCR识别技术,支持视频流获取图像,自动触发识别,另外汽车Vin码 ...

  7. 移动端车牌识别——可以嵌入智能手机系统里的新OCR识别技术

    移动端车牌识别技术,是在OCR光学字符识别技术的基础上研发的用来识别汽车号牌特征信息的图像识别技术.在国内,该项技术由北京易泊时代携手清华大学成功地将"国家863计划"项目成果-- ...

  8. 汽车Vin码识别技术的由来到发展

    核心内容:汽车Vin码.汽车车架号.Vin码识别.汽车Vin码识别.车架号识别.汽车车架号识别 一.汽车Vin码识别应用背景 随着二手车产业链发展越来越强大,在汽车买卖以及后市场应用中,了解车辆的相关 ...

  9. face ++ 人脸识别技术初步

    网站地址: https://console.faceplusplus.com.cn/documents/5671791主要有        1  人脸识别技术         2    人体识别技术  ...

随机推荐

  1. Linux内核同步 - sleepable RCU的实现

    一.前言 由于曾经在Linux2.6.23上工作了多年,我对这个版本还是非常有感情的(抛开感情因素,本来应该选择longterm的2.6.32版本来分析的,^_^),本文主要就是描述Linux2.6. ...

  2. Python 元组 tuple() 方法

    描述 Python 元组 tuple() 方法用于将可迭代对象(字符串.列表.元祖.字典)转换为元组. 语法 tuple() 方法语法: tuple(iterable) 参数 iterable -- ...

  3. C语言中续行符“\”说明

    把一个预处理指示写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成. 而把C代码写成多行则不必使用续行符,因为换行在C代码中只不过是一种空白字符,在做语法解析时所有空白字符都 ...

  4. 机器学习(3):支持向量机(SVM)

    1. 背景:      1.1 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出      1.2 目前的版本(soft margi ...

  5. MATLAB(1)——基本调试方法(Debug)

    作者:桂. 时间:2017-02-28  07:06:30 链接:http://www.cnblogs.com/xingshansi/articles/6477185.html 声明:转载请注明出处, ...

  6. Token:服务端身份验证的流行方案【转】

    01- 身份认证 服务端提供资源给客户端,但是某些资源是有条件的.所以服务端要能够识别请求者的身份,然后再判断所请求的资源是否可以给请求者. token是一种身份验证的机制,初始时用户提交账号数据给服 ...

  7. laravel 如何引入自己的函数或类库

    例如在app下建一个Common文件夹 在Common下建一个function.php 放入公共函数 例如: function test(){ echo 'this is a test'; } 在项目 ...

  8. Spring里的aop实现方式和源码分析

    使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点.业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点.横切关注点的一个特点是,他们经常发生在核心关 ...

  9. Sqlite 常用函数推荐

    Sqlite 常用函数 1 .打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建.第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构 ...

  10. NGUI ScrollView出屏幕再回来坐标混乱解决

    主要是子节点没更新.乍一看调用UIPanel的Refresh()会管用,其实不然. 解决方法调用UIPanel的Invalidate让他所有子节点更新. panel.Invalidate(true);