前回のJavaScript ユーザーが画像をアップロードできる15パズルをつくるではユーザーが自由に画像をアップロードできるようにしたのですが、これだと不適切な画像(エロ画像など)をアップすることもできてしまいます。それでは困るので不適切な画像を検出して削除できるようにします。まずは不適切な画像を検出できるようにします。

では、どうすれば不適切な画像を検出することができるのでしょうか? 探してみるとNSFW JSが見つかりました。

NSFW JSを使ってみる

NSFWとはNot Safe For Workの略で、職場では見るのに相応しくないコンテンツのことを指すようです。またNSFW JSというJavaScriptライブラリはTensorFlow.jsのマシンラーニングをベースに画像を識別するものです。画像を以下の5つのクラスに分類します。

Neutral:普通の画像
Porn:ポルノ画像
Sexy:性的画像
Hentai:読んで字のごとし
Drawing:わからない

GitHubでコードを公開しています。example/minimal_demo/index.htmlを見てみるとクライアントサイドでも動いてくれるようです。これを以下のように書き換えてみました。

エロ画像は検出できるのか?

実際に画像を選んで動作させてみると




最後のPorn(ポルノ)が6.7%とやや高いのが気になります(おかしいな)。

また実際の画像は掲載しませんがエロ画像で実験してみると、Pornが高い数値となりNeutralは非常に小さな値になります。これでエロ画像対策はできそうです。