機械学習用JavaScriptライブラリであるTensorFlow.jsを用いて、ウェブページからNSFW(Not Safe For Work、職場での閲覧注意)な画像を自動で処理してくれるオープンソースの拡張機能が「NSFW Filter」です。NSFW Filterはユーザーデータの収集や送信を行わず、ブラウザ上でローカルに実行されるとのことで、実際に使ってみました。

GitHub - nsfw-filter/nsfw-filter: ???? A Google Chrome / Firefox extension that blocks NSFW images from the web pages that you load using TensorFlow JS.

https://github.com/nsfw-filter/nsfw-filter



NSFW Filter - Get this Extension for ???? Firefox (en-US)

https://addons.mozilla.org/en-US/firefox/addon/nsfw-filter/

NSFW Filter - Chrome ウェブストア

https://chrome.google.com/webstore/detail/nsfw-filter/kmgagnlkckiamnenbpigfaljmanlbbhh

今回はFirefox版を導入します。Firefoxで配布ページにアクセスし、「Add to Firefox」をクリックします。



NSFW Filterの追加を確認するポップアップが表示されるので、「追加(A)」をクリック。



右上に表示される南京錠アイコンをクリックすると、NSFW Filterの設定画面が表示されます。一番上にある「Filter Strictness」のスライドスイッチはフィルターの強さで、右に動かすほどフィルターによる補正が強くなります。「Filter Effect」は、Blur(ぼかし)とHide(隠し)の2種類から選択可能。「Trained model」は画像選別に用いる学習モデルで、記事作成時点ではMovileNet_v1.1のみとなっています。



試しにGoogleで「Porn」をイメージ検索してみました。



結果はこんな感じ。ぼかし部分がNSFW Filterで自動的に処理された部分で、モザイク部分はフィルターがかからなかったために手動で処理を行った部分です。表示された画像のほとんどがNSFWコンテンツでしたが、NSFW Filterで処理されたのは全体のおよそ3分の1という結果でした。



次に「nude」でイメージ検索してみると、今度は検索結果全体の半分ほどがNSFWFilterによって処理されました。あくまでも機械学習による画像選別の結果なので、100%処理してくれるというわけではなく、記事作成時点では画像選別の精度はそこまで高くありません。それでも、学習モデルが処理した画像はきっちりぼかしフィルターで見えなくなっています。



NSFW Filterの処理が行われた状態で設定画面を開くと、「Total blocked:26」というように、処理されたコンテンツの数が表示されました。



なお、NSFW FilterはFirefox版とChrome版がリリースされているほか、Safari版も開発が進められているとのことです。