zoukankan      html  css  js  c++  java
  • JavaScript裸体识别技术

     当第一次听说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(包括它使用的识别算法)对黑白图片和低质量的图片有缺陷,所以我不推荐在网站上大量的依赖这个脚本进行识别。

  • 相关阅读:
    在现有项目中使用AspNet Identity 2.0 实战
    SQL 带自增长列的表的插入
    在C++中子类继承和调用父类的构造函数方法
    C++继承
    C++中重载、重写(覆盖)和隐藏的区别实例分析
    C++类
    C++中头文件(.h)和源文件(.cpp)都应该写些什么
    C++模板
    C语言字符串操作总结大全
    C++ 标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3716172.html
Copyright © 2011-2022 走看看