https://github.com/yahoo/open_nsfw
Yahoo のポルノ検出ニューラルネットワークを見かけたので、サッと API 化できるように Docker でまとめてみた。Docker Hub に上がっているので、docker が入っているマシンであれば、以下の1行を貼り付けるだけですぐに動かしてみることが出来る。
docker run -p 8080:80 -d -t kkosuge/open_nsfw_server:latest
アクセスしてみると、以下のようにNSFWっぽさのスコアを取得できる。
curl http://localhost:8080/nsfw_score?image_url=https://storage.kksg.net/screenshot/20161020130337.png
{
score: 0.0004231430939398706
}
1に近いほどやばいので、あの絵のポルノ度はとても低いらしい。(当たり前だが) ちなみに「エロ画像」でググって一番上に出てきた画像を与えてみると、見事にポルノ判定された。
http://localhost:8080/nsfw_score?image_url=http://livedoor.4.blogimg.jp/iyashimanga/imgs/a/2/a21f8ea7.jpg
{
score: 0.9476298689842224
}
この Yahoo open nsfw model の学習やらパラメータ調整は各自やってくださいとのことらしいが、大まかにやばいやつを検出する目的ならすぐにでも使えそう。
この Docker Image のソースはこちらです。とても適当。 https://github.com/kkosuge/open_nsfw_server
自動ポルノ検出は重要な課題
画像が性的に見えるか見えないかというのはアドネットワーク、特に Google AdSense を利用している人々にとっては重要な問題です。性的すぎる絵が1枚アップロードされていただけでサイトごと広告配信が停止されてしまうことがよくある。広告が停止するとサーバーコストをペイすることができず、路頭に迷うことになる。 このようなポリシー違反の早期発見のため運営者各社はバイトの人間に監視させていたりなどいろいろやっているが、自分にもそういう問題が降りかかることがままあり、なんとか低コストでポリシー違反の画像を素早く検知する方法が重要な課題になっていた。
ポルノ検出に機械学習が有効なのはすでに知られているとおりで、Google の Cloud Vision API では有害コンテンツ検知というサービスが提供されている。しかし1000枚ごとに$2.50という料金設定は用途によってはちょっと高い。そして、完璧ではない。
Google AdSense の有害コンテンツ判定、Cloud Vision API でできるもんだと思ってたけど、"adult": "UNLIKELY" の画像でもポリシー違反になる場合があることが分かり、この程度の画像なら大量に出てくるから全然使えない…
— #25 (@9m) October 17, 2016
AdSense スペシャリストの判断する性的ラインはとても低い
Cloud Vision API の有害判定認識を節約して使いたくて、1枚のキャンパスに復数の画像貼り付けて送ってしまえば安上がりではとやってみたものの全く判定精度が落ちただけだった
— #25 (@9m) October 13, 2016
なにかもっと安くていいソリューションあったらおしえてくれさい