Filtro de Imagem do Discourse

Este plugin utiliza a API do Google Cloud Vision para restringir o upload de imagens explícitas no fórum. Ele abrange todas as imagens enviadas, ou seja, avatares, logotipos, etc.

Ele usa o popup de erro de upload para exibir uma mensagem explicando quais violações resultaram na restrição do upload da imagem.

Os limites aceitáveis podem ser definidos nas configurações do site.


Configuração

Passos:

  1. Crie uma conta de serviço no Google Cloud Create service accounts  |  Identity and Access Management (IAM)  |  Google Cloud Documentation
    O Google disparará o download de um arquivo JSON. Armazene seu conteúdo com segurança.

  2. Cole estas linhas no final da seção env no seu app.yml

     GOOGLE_ACCOUNT_TYPE: 'service_account'
     GOOGLE_CLIENT_ID: 'client-id-do-arquivo-json'
     GOOGLE_CLIENT_EMAIL: "endereço-de-email-da-conta-de-serviço"
     GOOGLE_PRIVATE_KEY: instruções abaixo
    
  • Como configurar o parâmetro GOOGLE_PRIVATE_KEY?

    • Cole a chave do arquivo JSON em um editor de código.
    • Use localizar e substituir e substitua \n por \\n
    • Copie o resultado e cole no app.yml na frente de GOOGLE_PRIVATE_KEY, envolvendo-o em aspas simples ' '.
  1. Agora siga os passos regulares para instalar o plugin.

Configurações do Plugin

if_adult_max_acceptable: Nível máximo aceitável da categoria adult
if_spoof_max_acceptable: Nível máximo aceitável da categoria spoof
if_medical_max_acceptable: Nível máximo aceitável da categoria medical
if_violence_max_acceptable: Nível máximo aceitável da categoria violence
if_racy_max_acceptable: Nível máximo aceitável da categoria racy

Você pode ler sobre esses critérios e a própria API em detalhes aqui. Detect explicit content (SafeSearch)  |  Cloud Vision API  |  Google Cloud Documentation

:page_facing_up: Obter o código

:raising_hand_woman: Solicitar um recurso

:bug: Reportar um bug

Notas de Desenvolvimento

Para usar em um ambiente de desenvolvimento no macOS, adicione esta linha ao seu arquivo .bash_profile
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

Perdido?

Obrigado @Terrapop por patrocinar o plugin.

22 curtidas

@riking

Criei este PR FIX: erroneous condition which would cause an error if ever satisfied by fzngagan · Pull Request #10605 · discourse/discourse · GitHub porque percebi que o popup de erro de upload não seria exibido se houvesse uma exceção no lado do Rails ao fazer upload de avatares ou logotipos. Funciona bem ao fazer upload a partir do compositor. Achei que seria uma boa alteração upstream para incorporar.

6 curtidas

Obrigado pelo ping, perdi a notificação do GitHub.

5 curtidas

Muito obrigado pelo merge. Isso ajuda tanto o Discourse quanto meu plugin.

4 curtidas

Ótimo, obrigado pela sua ajuda @fzngagan em tornar isso possível. Foi um prazer trabalhar com você.

Para todas as comunidades que têm requisitos COPPA de segurança infantil ou que desejam se manter seguras em relação ao AdSense, ou simplesmente não querem ter imagens de violência ou nudez em nenhum lugar, este plugin é indispensável.

7 curtidas

@Razcle
Isso pode ser algo do seu interesse

Obrigado, Faizaan! Estava pensando em criar algo mais focado em compreensão de linguagem e personalizável. Você já teve alguma experiência com isso?

R

3 curtidas

@jahan_gagan pode ter algo a dizer sobre PLN.

2 curtidas

Eu tentei o conjunto de dados do Stack Overflow para previsão de tags. Depois disso, tentei o mesmo código no conjunto de dados do Discourse, mas devido ao menor volume de dados no Discourse, o código não funcionou aqui.

2 curtidas

Quais escopos eu preciso na minha conta de serviço? Estou recebendo “A solicitação tinha escopos de autenticação insuficientes”.

Isso pode ajudar? Executa totalmente no lado do cliente

modelo de toxicidade de texto

Este plugin trata de IMAGENS, não de texto.

Para texto, há um plugin do Google Perspective disponível, baseado no motor Jigsaw:

2 curtidas

Olá :waving_hand: Este plugin ainda funciona? Acabei de ver que o último commit foi há cerca de 4 anos. Obrigado :slightly_smiling_face:

1 curtida

Tentei instalar em uma instância de teste, mas parece haver um problema com o gem. A reconstrução falhou. Espero que seja corrigível. :crossed_fingers: Talvez esses gems estejam apenas obsoletos…

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.906 UTC [36] LOG: aborting any active transactions

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 &amp;&amp; su discourse -c 'bundle exec rake db:migrate' failed with return #&lt;Process::Status: pid 571 exit 1&gt;

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

Eu marquei isso como broken.

2 curtidas