[RUBY] [Rails] Comment détecter des images radicales en analysant des images à l'aide de l'API Cloud Vision

Cible

Si vous modifiez l'image de profil de l'utilisateur avec refile Analysez l'image importée avec "Cloud Vision API" et Dans le cas d'une image radicale, elle ne peut pas être enregistrée dans la base de données.

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Activer "l'API Cloud Vision"

1. Activez l'API Cloud Vision en suivant la même procédure que "Activer l'API de géocodage" dans l'article suivant.

Comment calculer la latitude et la longitude à l'aide de l'API de géolocalisation

2. Accédez à l'écran d'accueil et cliquez sur «IAM et gestion»

スクリーンショット 2020-06-08 9.47.58.png

3. Cliquez sur "Compte de service"

スクリーンショット 2020-06-08 9.48.31.png

4. Cliquez sur «Ajouter un compte de service»

スクリーンショット 2020-06-08 9.48.56.png

5. Entrez le "nom du compte de service (approprié)" et cliquez sur "Créer"

スクリーンショット 2020-06-08 9.49.18.png

6. Cliquez sur "Continuer"

スクリーンショット 2020-06-08 9.49.50.png

7. Cliquez sur "Créer une clé"

スクリーンショット 2020-06-08 9.55.48.png

8. Définissez le type de clé sur «JSON» et cliquez sur «Créer»

スクリーンショット 2020-06-08 9.50.13.png

9. Confirmez que la clé a été créée et cliquez sur «Fermer»

スクリーンショット 2020-06-08 9.55.29.png

10. Cliquez sur "Terminé"

スクリーンショット 2020-06-08 9.55.55.png

11. Déplacez la clé directement sous l'application

スクリーンショット 2020-06-08 10.10.52.png

À propos de l'évaluation de l'API Cloud Vision

Catégorie d'évaluation

Catégorie Contenu
adult Que ce soit une image adulte
spoof Que ce soit un mème Internet
medical Que ce soit un mème Internet
violence Que ce soit une image violente
racy Que ce soit une image racée

Valeur d'évaluation

Valeur d'évaluation Diplôme
UNKNOWN Non analysable
VERY_UNLIKELY Très lent
UNLIKELY Faible
POSSIBLE potentiel
LIKELY haute
VERY_LIKELY Très cher

la mise en oeuvre

1. Présentez Gem

Quelle que soit la catégorie d'évaluation, la valeur d'évaluation est "LIKELY" ou "VERY_LIKELY" S'il est inclus, nous l'implémenterons pour qu'il ne soit pas sauvegardé dans la base de données.

Gemfile


gem 'google-cloud-vision'

Terminal


$ bundle

2. Créez et modifiez le fichier de configuration de l'API Cloud Vision

Terminal


$ touch lib/vision.rb

lib/vision.rb


require 'base64'
require 'json'
require 'net/https'
module Vision
  class << self
    def image_analysis(profile_image)
      image_annotator = Google::Cloud::Vision::ImageAnnotator.new(
          version: :v1,
          credentials: JSON.parse(File.open('Nom du fichier de clé') do |f| f.read end)
      )

      #Demander la création de paramètres
      image = profile_image #Image que vous souhaitez analyser(argument)
      requests_content = { image: { content: image }, features: [{ type: :SAFE_SEARCH_DETECTION }] }
      requests =   [requests_content]

      #Envoyer des images à l'API Cloud Vision
      response = image_annotator.batch_annotate_images(requests)
      result = response.responses[0].safe_search_annotation.to_h

      #Le résultat de l'analyse est "PROBABLE" ou "TRÈS"_Renvoie false si "LIKELY" est inclus, true sinon
      if result.values.include?(:LIKELY) || result.values.include?(:VERY_LIKELY)
        return false
      else
        return true
      end
    end
  end
end

3. Modifiez le contrôleur

users_controller.rb


def update
  #Lorsque l'image est modifiée
  if params[:user][:profile_image].present?
    #paramètre(image)En tant que "fichier temporaire" et l'assigner à une variable
    profile_image = File.open(params[:user][:profile_image].tempfile)
    #Analyse d'image avec l'API Cloud Vision et attribuer le résultat de l'analyse à une variable
    result = Vision.image_analysis(profile_image)
  else
    #Remplacez "vrai" si l'image n'a pas été modifiée
    result = true
  end
  #Branchement conditionnel en fonction du résultat de l'analyse
  if result == true
    @user.update(user_params)
    redirect_to user_user_path(@user)
  elsif result == false
    flash[:notice] = 'L'image est inappropriée'
    render 'edit'
  end
end

Recommended Posts

[Rails] Comment détecter des images radicales en analysant des images à l'aide de l'API Cloud Vision
Comment utiliser l'API Cloud Vision de GCP
Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python
[Rails] Comment obtenir des informations de localisation à l'aide de l'API de géolocalisation
Obtenez des étiquettes de données en les associant à l'API Google Cloud Vision lors de la prévisualisation d'images avec Rails
J'ai essayé de collecter automatiquement des images érotiques de Twitter à l'aide de l'API Cloud Vision de GCP
Essayez de juger des photos de plats à l'aide de l'API Google Cloud Vision
Lors de l'introduction de l'API Google Cloud Vision sur les rails, j'ai suivi la documentation.
Comment tracer plusieurs images ajustées côte à côte en utilisant Python
J'ai essayé d'utiliser l'API Google Cloud Vision
Comment utiliser l'API Google Cloud Translation
Comment obtenir des données d'article à l'aide de l'API Qiita
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Cloud Functions pour redimensionner les images à l'aide d'OpenCV avec le déclencheur Cloud Storage
Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
django + nginx Comment faire en sorte que seuls les utilisateurs connectés voient les images
Comment ne pas exécuter certains tests par défaut en utilisant la marque de pytest