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.
・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina
Ce qui suit a été mis en œuvre.
Comment calculer la latitude et la longitude à l'aide de l'API de géolocalisation










| 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 | Diplôme | 
|---|---|
| UNKNOWN | Non analysable | 
| VERY_UNLIKELY | Très lent | 
| UNLIKELY | Faible | 
| POSSIBLE | potentiel | 
| LIKELY | haute | 
| VERY_LIKELY | Très cher | 
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
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
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