Mastodonに自動NSFW機能を実装した

はじめに

以前から、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 のキーなどを取得します。

キーの取得に関しては、この辺の記事が参考になります。

qiita.com

qiita.com

APIキーを取得後、key.jsonmastodonのソース内に作成(.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側でそのあたりの変更ができるようにしていきたいと思いますね