天天看点

JavaScript裸体识别技术

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

正常情况下,裸体识别应该在服务器端进行,这样,那些色情图片或色情视频才能在发送给浏览者前被发现。

我不相信完全依赖计算机能过滤掉所有色情内容(虽然我是个程序员)。

黑白裸体图像能被识别出来吗?准确率能有多少?

如果在客户端发现了色情图片,你能怎么做?这种技术如何使用?

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

  

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

在图像中查找类似肤色的像素。

根据捕捉到的像素定位或构造皮肤位置。

分析皮肤位置判断是裸体或非裸体。

就裸露情况进行分级,判断是否属于裸露。

  nude.js支持ie9+ (excanvas), firefox 3.6+, webkit引擎的浏览器(谷歌浏览器,

safari, mobile safari,opera)。nude.js还支持对视频进行截屏分析。

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

1

2

3

4

5

6

7

8

9

10

11

<code>&lt;!-- 对于不支持画布技术的ie --&gt;</code>

<code>&lt;!--[if ie]&gt;</code>

<code>&lt;script type="text/javascript" src="excanvas_r3/excanvas.compiled.js"&gt;&lt;/script&gt;</code>

<code>&lt;![endif]--&gt;</code>

<code>&lt;</code><code>script</code> <code>src</code><code>=</code><code>"nude.js/compressed/nude.min.js"</code><code>&gt;&lt;/</code><code>script</code><code>&gt;</code>

<code>&lt;!-- 需要识别的图片 --&gt;</code>

<code>&lt;</code><code>img</code> <code>src</code><code>=</code><code>"/lazy.gif?067588"</code> <code>data-original</code><code>=</code><code>"dvt1.jpg"</code> <code>alt</code><code>=</code><code>"dita von tease"</code> <code>id</code><code>=</code><code>"image1"</code> <code>onclick</code><code>=</code><code>"onimageclick(‘image1‘);"</code> <code>/&gt;</code>

<code>&lt;</code><code>img</code> <code>src</code><code>=</code><code>"/lazy.gif?067588"</code> <code>data-original</code><code>=</code><code>"dvt2.jpg"</code> <code>alt</code><code>=</code><code>"dita von tease"</code> <code>id</code><code>=</code><code>"image2"</code> <code>onclick</code><code>=</code><code>"onimageclick(‘image2‘);"</code> <code>/&gt;</code>

<code>&lt;</code><code>img</code> <code>src</code><code>=</code><code>"/lazy.gif?067588"</code> <code>data-original</code><code>=</code><code>"dvt3.jpg"</code> <code>alt</code><code>=</code><code>"dita von tease"</code> <code>id</code><code>=</code><code>"image3"</code> <code>onclick</code><code>=</code><code>"onimageclick(‘image3‘);"</code> <code>/&gt;</code>

<code>&lt;</code><code>img</code> <code>src</code><code>=</code><code>"/lazy.gif?067588"</code> <code>data-original</code><code>=</code><code>"dvt4.jpg"</code> <code>alt</code><code>=</code><code>"dita von tease"</code> <code>id</code><code>=</code><code>"image4"</code> <code>onclick</code><code>=</code><code>"onimageclick(‘image4‘);"</code> <code>/&gt;</code>

  nude.js的用法很简单,因为它只有两个方法:&lt;code&gt;load&lt;/code&gt; 和

&lt;code&gt;scan&lt;/code&gt;。其中 &lt;code&gt;load&lt;/code&gt; 方法接受图片的

&lt;code&gt;id&lt;/code&gt; 或图片本身,将其拷贝到画布里。而 &lt;code&gt;scan&lt;/code&gt;

方法根据算法对画布数据进行分析,返回 &lt;code&gt;true&lt;/code&gt; 或

&lt;code&gt;false&lt;/code&gt;。

<code>function</code> <code>onimageclick(node) {</code>

<code>    </code><code>nude.load(node);</code>

<code>    </code><code>// 扫描</code>

<code>    </code><code>nude.scan(</code><code>function</code><code>(result){</code>

<code>        </code><code>alert(result ?</code><code>"在"</code> <code>+ node.id +</code><code>"发现裸露图像!"</code> <code>:</code><code>"非裸体"</code><code>);</code>

<code>    </code><code>});</code>

<code>}</code>

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