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