はじめに
以前から、Mastodonでの画像のNSFW機能を使わない投稿が物議を醸していたりしたのを、ちょっとソースを弄って解消できないか試してみた。
なお、実装にあたってはGoogle Cloud Vision APIを使用しています
変更コミット&使い方
これになる
ffea62acba75a0f23be3e1f89f803da7319fe4db
これを取り込みたい方は以下のコマンドを実行してみてください。
git remote add creatodon https://github.com/S-H-GAMELINKS/mastodon.git git fetch creatodon git cherry-pick ffea62acba75a0f23be3e1f89f803da7319fe4db
これで自動NSFWの実装は取り込まれます。
次に、使用するGoogle Cloud Vision API のキーなどを取得します。
キーの取得に関しては、この辺の記事が参考になります。
APIキーを取得後、key.jsonをmastodonのソース内に作成(.env.productionなどがある位置でOK)
作成した key.json へ取得したAPIキーの中身を貼り付けます(SSHとかWebコンソールでよしなにしてください)
あとは、.env.production
に以下のように追加。
VISION_KEYFILE="./key.json"
これで画像を投稿すると、自動的に不適切な内容のものか判定しNSFWをつけてくれます。
外したい場合は
git revert ffea62acba75a0f23be3e1f89f803da7319fe4db
と実行してください
やったこと
基本的にはコミットを見ていただければわかりますが、MediaAttachment.find を使って画像のファイル名などを取得。
その後、S3を使っているかどうかで場合分けし、それぞれのファイルパスを生成。
生成したファイルパスは配列:pathsに格納し、return させています。
その後、check_mediaメソッドでGoogleCloudVision API を使う準備を行い、受け取ってきたファイルパスをpaths.each でそれぞれ判定。
adult?やviolence?メソッドで性的な画像や暴力的な画像かを判定し、どれかが true だった場合にNSFWが有効になるようにしています。
さいごに
とりあえずの実装はこれでOKですが、今のままだと管理者が自動機NSFW機能をOFFにしたりするのが面倒かなと思います。 今後はUI側でそのあたりの変更ができるようにしていきたいと思いますね