JavaScript裸體識別技術

webhek發表於2014-05-08

  當第一次聽說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指令碼,然後是需要分析的圖片:

<!-- 對於不支援畫布技術的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>。

function onImageClick(node) {
	nude.load(node);
	// 掃描
	nude.scan(function(result){ 
		alert(result ? "在" + node.id + "發現裸露影象!" : "非裸體");
	});
}

  你可以想象出,這些過程是在瀏覽器裡進行的,所以不要期望很迅速的得出結果。而且,很顯然,圖片尺寸是分析速度的一個重要因素。如果你的網站嚴重的依賴nude.js,小心那些大尺寸的圖片。

 裸體識別的結果

  對於高質量的裸露女性的JPEG圖片,這個小指令碼檢測成功率非常高。但對於暗色調或黑人皮膚卻不是很成功。在我的測試中,nude.js沒有識別出黑白裸露影象,也沒有發現視訊的色情影像(可能是我的視訊清晰度不夠)。

  觀看演示

  不管怎麼說,nude.js的表現還是很不錯的,但總覺得這種技術還無法大規模使用。掃描圖片需要時間,而且會卡住瀏覽器。因為nude.js(包括它使用的識別演算法)對黑白圖片和低質量的圖片有缺陷,所以我不推薦在網站上大量的依賴這個指令碼進行識別。

相關文章