Фильтр изображений в Discourse

Этот плагин использует Google Cloud Vision API для ограничения загрузки откровенных изображений на форум. Он обрабатывает все загружаемые изображения, включая аватары, логотипы и т. д.

Для отображения сообщения о том, какие нарушения привели к блокировке загрузки изображения, используется всплывающее окно об ошибке загрузки.

Допустимые пороги можно настроить через параметры сайта.


Настройка

Шаги:

  1. Создайте сервисный аккаунт в Google Cloud: Create service accounts  |  Identity and Access Management (IAM)  |  Google Cloud Documentation
    Google инициирует загрузку JSON-файла. Сохраните его содержимое в надежном месте.

  2. Добавьте следующие строки в конец секции env в вашем файле app.yml:

     GOOGLE_ACCOUNT_TYPE: 'service_account'
     GOOGLE_CLIENT_ID: 'client-id-from-json-file'
     GOOGLE_CLIENT_EMAIL: "service-account-email-address"
     GOOGLE_PRIVATE_KEY:  инструкции ниже
    
  • Как настроить параметр GOOGLE_PRIVATE_KEY?

    • Вставьте ключ из JSON-файла в текстовый редактор.
    • Используйте функцию найти и заменить, чтобы заменить \n на \\n.
    • Скопируйте результат и вставьте его в app.yml перед GOOGLE_PRIVATE_KEY, заключив в одинарные кавычки ' '.
  1. Теперь выполните стандартные шаги установки плагина.

Настройки плагина

if_adult_max_acceptable: Максимально допустимый уровень категории adult
if_spoof_max_acceptable: Максимально допустимый уровень категории spoof
if_medical_max_acceptable: Максимально допустимый уровень категории medical
if_violence_max_acceptable: Максимально допустимый уровень категории violence
if_racy_max_acceptable: Максимально допустимый уровень категории racy

Подробную информацию об этих критериях и самом API можно найти здесь: Detect explicit content (SafeSearch)  |  Cloud Vision API  |  Google Cloud Documentation

:page_facing_up: Получить код

:raising_hand_woman: Запросить функцию

:bug: Сообщить об ошибке

Примечания для разработчиков

Для использования в среде разработки на macOS добавьте следующую строку в файл .bash_profile:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

Потерялись?

Спасибо @Terrapop за спонсирование плагина.

22 лайка

@riking

Я создал этот PR FIX: erroneous condition which would cause an error if ever satisfied by fzngagan · Pull Request #10605 · discourse/discourse · GitHub, так как понял, что всплывающее окно с ошибкой загрузки не отображалось, если при загрузке аватаров или логотипов возникало исключение на стороне Rails. Это работает корректно при загрузке из редактора. Я подумал, что было бы неплохо включить это изменение в основную ветку.

6 лайков

Спасибо за уведомление, пропустил уведомление от GitHub.

5 лайков

Огромное спасибо за мерж. Это помогает и дискуссии, и моему плагину.

4 лайка

Отлично, спасибо за вашу помощь @fzngagan в том, чтобы сделать это возможным, было приятно работать с вами.

Для всех сообществ, которые должны соответствовать требованиям COPPA по безопасности детей, или хотят оставаться в безопасности в плане Google AdSense, или просто не хотят, чтобы где-либо были изображения насилия или обнажённые тела, этот плагин просто необходим.

7 лайков

@Razcle
Это может вас заинтересовать

Спасибо, Фаизан! Я думал о создании чего-то более ориентированного на понимание языка и настраиваемого. У тебя был опыт работы с этим?

Р

3 лайка

@jahan_gagan, возможно, имеет что-то сказать по теме NLP.

2 лайка

Я пробовал использовать набор данных Stack Overflow для предсказания тегов, после чего применил тот же код к набору данных Discourse, но из-за меньшего объёма данных в Discourse этот код здесь не сработал.

2 лайка

Какие области доступа нужны для моей учетной записи службы? У меня возникает ошибка «В запросе недостаточно прав аутентификации».

Это может помочь? Работает полностью на стороне клиента

модель токсичности текста

Этот плагин предназначен для ИЗОБРАЖЕНИЙ, а не текста.

Для работы с текстом доступен плагин Google Perspective на основе движка Jigsaw:

2 лайка

Привет :waving_hand: Этот плагин всё ещё работает? Я заметил, что последний коммит был около 4 лет назад. Спасибо :slightly_smiling_face:

1 лайк

Я попытался установить это на тестовый экземпляр, но, похоже, возникла проблема с gem. Пересборка не удалась. Надеюсь, это можно исправить. :crossed_fingers: Возможно, эти gem просто устарели…

rake aborted!

Gem::LoadError: can't activate google-protobuf-3.13.0-x86_64-linux, already activated google-protobuf-4.27.3-x86_64-linux (Gem::LoadError)

/var/www/discourse/lib/plugin_gem.rb:25:in `load'

/var/www/discourse/lib/plugin/instance.rb:835:in `gem'

/var/www/discourse/plugins/discourse-image-filter/plugin.rb:12:in `activate!'

/var/www/discourse/lib/plugin/instance.rb:778:in `instance_eval'

/var/www/discourse/lib/plugin/instance.rb:778:in `activate!'

/var/www/discourse/lib/discourse.rb:348:in `block in activate_plugins!'

/var/www/discourse/lib/discourse.rb:345:in `each'

/var/www/discourse/lib/discourse.rb:345:in `activate_plugins!'

/var/www/discourse/config/application.rb:231:in `block in <class:Application>'

/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'

/var/www/discourse/config/application.rb:231:in `<class:Application>'

/var/www/discourse/config/application.rb:75:in `<module:Discourse>'

/var/www/discourse/config/application.rb:74:in `<top (required)>'

/var/www/discourse/Rakefile:7:in `<top (required)>'

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'

/usr/local/bin/bundle:25:in `load'

/usr/local/bin/bundle:25:in `<main>'

(See full trace by running task with --trace)

I, [2024-08-02T16:48:02.872895 #1] INFO -- : gem install os -v 1.1.1 -i /var/www/discourse/plugins/discourse-image-filter/gems/3.3.3 --no-document --ignore-dependencies --no-user-install

Successfully installed os-1.1.1

1 gem installed

gem install google-protobuf -v 3.13.0 -i /var/www/discourse/plugins/discourse-image-filter/gems/3.3.3 --no-document --ignore-dependencies --no-user-install

Successfully installed google-protobuf-3.13.0-x86_64-linux

1 gem installed

I, [2024-08-02T16:48:02.886926 #1] INFO -- : Terminating async processes

I, [2024-08-02T16:48:02.888160 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 36

I, [2024-08-02T16:48:02.888588 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 98

2024-08-02 16:48:02.888 UTC [36] LOG: received fast shutdown request

98:signal-handler (1722617282) Received SIGTERM scheduling shutdown...

2024-08-02 16:48:02.892 UTC [36] LOG: aborting any active transactions

98:M 02 Aug 2024 16:48:02.896 # User requested shutdown...

98:M 02 Aug 2024 16:48:02.897 * Saving the final RDB snapshot before exiting.

2024-08-02 16:48:02.906 UTC [36] LOG: background worker "logical replication launcher" (PID 51) exited with exit code 1

2024-08-02 16:48:02.909 UTC [46] LOG: shutting down

98:M 02 Aug 2024 16:48:02.939 * DB saved on disk

98:M 02 Aug 2024 16:48:02.939 # Redis is now ready to exit, bye bye...

2024-08-02 16:48:02.949 UTC [36] LOG: database system is shut down

FAILED

--------------------

Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 571 exit 1>

Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'

exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}

bootstrap failed with exit code 1

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

./discourse-doctor may help diagnose the problem.

9213a43b80e800c6f2b1d0adc0663ec82a483b860f0302b8ebabc8a3b2bb0619

Я пометил это как broken.

2 лайка