JDim icon indicating copy to clipboard operation
JDim copied to clipboard

画像のハッシュ値を計算して類似する画像をあぼ〜んする

Open ma8ma opened this issue 9 months ago • 2 comments

画像のハッシュ値を計算して類似する画像をあぼ〜んする

背景や動機

ここ数ヶ月、掲示板にグロテスクな画像のURLが繰り返し書き込まれています。 スレッドの話題と無関係で望まぬ暴力・残虐なイメージは精神衛生上良くないため対策を考えています。

現状のJDimでは画像URLを右クリックして非表示にすることはできますが、一度表示しないとグロであるか判別できません。 さらに、同じ画像でもURLを変えて書き込まれているためURLのあぼ〜んでは対応が困難となっています。

同じ画像を繰り返し貼り付ける特徴があるため、画像の特徴をハッシュ値として計算してNG登録し、 その後、登録したハッシュ値と比較を行い判定基準を超えた類似画像をあぼ〜んする機能を提案します。

解決方法

以下の機能を基本システムとして実装します。

  • 画像を読み込んで表示するときにハッシュ値を計算する。 計算したハッシュ値とNG登録したハッシュ値を比較して判定基準を超えた場合はあぼ〜んする。 ハッシュ値の計算と比較は全体設定でon/offを切り替えることができる。

  • 画像のプロパティに計算したハッシュ値を表示する。 また、ハッシュ値をNG 画像ハッシュに追加する仕組みを実装する。

  • メニューバーの設定(C)あぼ〜ん(A)全体あぼ〜ん設定(対象: スレビュー)(V)NG 画像ハッシュのタブを追加する。 この設定は掲示板全体に適用される。 タブには以下のUIを配置する。

    • ハッシュ値の計算と比較を有効・無効にするためのオプション
    • あぼ〜んにする判定基準(しきい値)の初期設定値とリセットボタン
    • 登録したNG 画像ハッシュに対する操作
      • NG設定の削除
      • 判定基準(しきい値)の変更
      • 設定をクリップボードにコピー
    • 登録したNG 画像ハッシュの一覧 一覧にはハッシュ値、判定基準(しきい値)、最後にマッチした日時、およびハッシュ値を計算した画像のURLを表示します。
      • 判定基準、日時、URLで一覧項目の並び替え(ソート)を可能にします。
      • 一覧の項目は選択可能にして上記の設定削除や設定値変更の操作を行います。

ハッシュ値の比較は高速ですが設定が増え過ぎると一覧の項目が長くなり確認しにくくなるため 最後にマッチした日時を記録して使われていないハッシュ値が分かるようにすることで設定削除の参考にします。

最近では画像を加工してハッシュ値やパターンがマッチしないように対策されているため 加工された画像に対応するには判断基準(しきい値)の拡大が必要になっています。 また、加工された画像をハッシュ値にして比較するとマッチしない可能性が高くなります。 そこで私が調べられた範囲で無加工のグロ画像のハッシュ値をデフォルト設定に追加したいと思います。

代替案

上記の基本システムに加えていくつかアイデアがあります。

  • [x] 画像あぼ〜んされたURLをクリックしたときに出るダイアログボックスや マウスオーバーしたときに出るポップアップにあぼ〜んの情報を表示する。 → あぼ〜んした理由が分かると画像やスレッドの状態を判断しやすくなります。 ハッシュ値を比較したときに結果を保存すれば実現できそうです。 edit(2024-05-26): https://github.com/JDimproved/JDim/pull/1397
  • [x] モザイクをかけて画像を開くときはグレースケール(モノクロ)に変換する設定 → グロ画像は色彩のインパクトがあるため単色にするとショックが軽減できるかもしれません。 ハッシュ値の計算で使う機能を流用できそうです。 edit(2024-06-01): https://github.com/JDimproved/JDim/pull/1398
  • [x] あぼ〜んされた画像を一時的に開く仕組み → ハッシュ値の特性で誤判定をゼロにすることは難しいため気になるときは見れると使い勝手が良くなるかもしれません。 あぼ〜んやモザイク処理との調整が必要です。 edit(2024-06-01): https://github.com/JDimproved/JDim/pull/1399 https://github.com/JDimproved/JDim/pull/1400
  • あぼ〜んされた画像URLを含むレスのIDをNG IDに追加する設定 → 背景や動機で挙げた画像荒らしはワードサラダ(意味が通じない文章)が一緒に書き込まれるケースが多く、 NGできると閲覧の助けになると思います。 連続投稿のIDをあぼ〜んする機能をベースに作れないか考えています。
  • 全体設定ではなく掲示板の板ごとNG 画像ハッシュ設定を追加 → 画像荒らしは掲示板全体に及んでいるため細かく分ける需要は高くないと思います。 今のところは考えていません。
  • NG 画像ハッシュの対象外にするURLのパターン設定 → 画像荒らしは特定のサービスを利用しておりNG 画像ハッシュの対象を限定できると誤判定を少なくできると思います。 urlreplace.confに追加する形を構想しています。 NG 画像ハッシュを使っていて誤判定が多いときは追加を考えます。

追加の情報

荒らし対策の機能としてはアルゴリズムを非公開にしてNGの回避を困難にするのが望ましいと思いますがJDimはソースコードの公開が必要です。 画像のハッシュ値を計算するアルゴリズムは秘匿できませんが ユーザーが目にするGUIなどからアルゴリズムの情報を除くなどして分かりにくくしたいと思います。

ma8ma avatar May 04 '24 13:05 ma8ma

基本システムをmasterにマージしました。 #1396 OPコメントに記載したいくつかのアイデアとオンラインマニュアルの追加を行っていきたいと思います。

ma8ma avatar May 18 '24 15:05 ma8ma

https://github.com/JDimproved/JDim/pull/1409 https://github.com/JDimproved/JDim/pull/1410

オンラインマニュアルにNG 画像ハッシュの設定についてまとめたページを追加しました。 https://jdimproved.github.io/JDim/imghash/ 合わせて、設定ダイアログにオンラインマニュアルのページを開くリンクボタンを追加しました。

ma8ma avatar Jun 30 '24 14:06 ma8ma