Wenn Sie das Profilbild des Benutzers mit "refile" bearbeiten Analysieren Sie das hochgeladene Bild mit "Cloud Vision API" und Im Falle eines radikalen Bildes kann es nicht in der Datenbank gespeichert werden.
・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina
Folgendes wurde implementiert.
Berechnen von Längen- und Breitengraden mithilfe der Geolocation-API
Kategorie | Inhalt |
---|---|
adult | Ob es ein Erwachsenenbild ist |
spoof | Ob es sich um ein Internet-Mem handelt |
medical | Ob es sich um ein Internet-Mem handelt |
violence | Ob es ein gewalttätiges Bild ist |
racy | Ob es ein rassiges Bild ist |
Bewertungswert | Grad |
---|---|
UNKNOWN | Nicht analysierbar |
VERY_UNLIKELY | Sehr niedrig |
UNLIKELY | Niedrig |
POSSIBLE | Potenzial |
LIKELY | hoch |
VERY_LIKELY | Sehr teuer |
Unabhängig von der Bewertungskategorie lautet der Bewertungswert "LIKELY" oder "VERY_LIKELY" Wenn es enthalten ist, werden wir es implementieren, damit es nicht in der Datenbank gespeichert wird.
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('Schlüsseldateiname') do |f| f.read end)
)
#Parametererstellung anfordern
image = profile_image #Bild, das Sie analysieren möchten(Streit)
requests_content = { image: { content: image }, features: [{ type: :SAFE_SEARCH_DETECTION }] }
requests = [requests_content]
#Senden Sie Bilder an die Cloud Vision API
response = image_annotator.batch_annotate_images(requests)
result = response.responses[0].safe_search_annotation.to_h
#Das Analyseergebnis ist "LIKELY" oder "SEHR"_Gibt false zurück, wenn "LIKELY" enthalten ist, andernfalls true
if result.values.include?(:LIKELY) || result.values.include?(:VERY_LIKELY)
return false
else
return true
end
end
end
end
users_controller.rb
def update
#Wenn das Bild bearbeitet wird
if params[:user][:profile_image].present?
#Parameter(Bild)Als "tempfile" und ordne es einer Variablen zu
profile_image = File.open(params[:user][:profile_image].tempfile)
#Bildanalyse mit Cloud Vision API und Zuordnung des Analyseergebnisses zu einer Variablen
result = Vision.image_analysis(profile_image)
else
#Ersetzen Sie "true", wenn das Bild nicht bearbeitet wurde
result = true
end
#Bedingte Verzweigung abhängig vom Analyseergebnis
if result == true
@user.update(user_params)
redirect_to user_user_path(@user)
elsif result == false
flash[:notice] = 'Bild ist unangemessen'
render 'edit'
end
end
Recommended Posts