[GO] [Rails] Erkennen radikaler Bilder durch Analysieren von Bildern mithilfe der Cloud Vision API

Ziel

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.

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Aktivieren Sie die Cloud Vision API

1. Aktivieren Sie die Cloud Vision-API, indem Sie das gleiche Verfahren wie unter "Geokodierungs-API aktivieren" im folgenden Artikel ausführen.

Berechnen von Längen- und Breitengraden mithilfe der Geolocation-API

2. Wechseln Sie zum Startbildschirm und klicken Sie auf "IAM und Verwaltung"

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

3. Klicken Sie auf "Dienstkonto"

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

4. Klicken Sie auf "Dienstkonto hinzufügen"

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

5. Geben Sie den Namen des Dienstkontos (entsprechend) ein und klicken Sie auf Erstellen

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

6. Klicken Sie auf "Weiter"

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

7. Klicken Sie auf "Schlüssel erstellen"

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

8. Setzen Sie den Schlüsseltyp auf "JSON" und klicken Sie auf "Erstellen"

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

9. Bestätigen Sie, dass der Schlüssel erstellt wurde, und klicken Sie auf "Schließen"

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

10. Klicken Sie auf "Fertig"

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

11. Bewegen Sie den Schlüssel direkt unter die Anwendung

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

Über die Evaluierung der "Cloud Vision API"

Bewertungskategorie

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

Bewertungswert Grad
UNKNOWN Nicht analysierbar
VERY_UNLIKELY Sehr niedrig
UNLIKELY Niedrig
POSSIBLE Potenzial
LIKELY hoch
VERY_LIKELY Sehr teuer

Implementierung

1. Stellen Sie Gem vor

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

2. Erstellen und bearbeiten Sie die Cloud Vision API-Konfigurationsdatei

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

3. Bearbeiten Sie den Controller

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

[Rails] Erkennen radikaler Bilder durch Analysieren von Bildern mithilfe der Cloud Vision API
Verwendung der Cloud Vision API von GCP
Erkennen Sie japanische Zeichen anhand von Bildern mithilfe der Cloud Vision-API von Google mit Python
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
Erhalten Sie Datenbeschriftungen, indem Sie bei der Vorschau von Bildern mit Rails eine Verknüpfung mit der Google Cloud Vision-API herstellen
Ich habe versucht, mit der Cloud Vision API von GCP automatisch erotische Bilder von Twitter zu sammeln
Versuchen Sie, Lebensmittelfotos mithilfe der Google Cloud Vision-API zu beurteilen
Bei der Einführung der Google Cloud Vision-API in Schienen habe ich die Dokumentation befolgt.
So zeichnen Sie Bilder mit mehreren Anpassungen nebeneinander mit Python
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Verwendung der Google Cloud Translation API
So erhalten Sie Artikeldaten mithilfe der Qiita-API
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
Cloud-Funktionen zum Ändern der Bildgröße mithilfe von OpenCV mit Cloud Storage-Trigger
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
django + nginx So lassen Sie nur angemeldete Benutzer Bilder anzeigen
So führen Sie einige Tests nicht standardmäßig mit der Pytest-Marke aus