Détecter le contenu explicite (recherche sécurisée)

La fonctionnalité Détection SafeSearch détecte les contenus explicites, tels que ceux réservés aux adultes ou les images violentes. Cette fonctionnalité utilise cinq catégories (adult, spoof, medical, violence et racy) et renvoie la probabilité que chacune d'elle soit présente dans une image donnée. Pour en savoir plus sur ces champs, consultez la page SafeSearchAnnotation.

Requêtes de détection SafeSearch

Configurer votre authentification et votre projet GCP

quickstart,gcloud_init vision.googleapis.com Cloud Vision API SERVICE_ACCOUNT True env_var

Détection de contenu explicite sur une image locale

L'API Vision peut détecter des fonctionnalités dans un fichier image local en envoyant le contenu du fichier image en tant que chaîne encodée en base64 dans le corps de votre requête.

API REST et ligne de commande

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • base64-encoded-image : représentation en base64 (chaîne ASCII) de vos données d'image binaire. Cette chaîne doit ressembler à la chaîne suivante :
    • /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
    Consultez la section encodage en base64 pour plus d'informations.

Méthode HTTP et URL :

POST https://vision.googleapis.com/v1/images:annotate

Corps JSON de la requête :

    {
      "requests": [
        {
          "image": {
            "content": "base64-encoded-image"
          },
          "features": [
            {
              "type": "SAFE_SEARCH_DETECTION"
            },
          ]
        }
      ]
    }
    

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://vision.googleapis.com/v1/images:annotate

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

    {
      "responses": [
        {
          "safeSearchAnnotation": {
            "adult": "UNLIKELY",
            "spoof": "VERY_UNLIKELY",
            "medical": "VERY_UNLIKELY",
            "violence": "LIKELY",
            "racy": "POSSIBLE"
          }
        }
      ]
    }
    

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision C#.

// Load an image from a local file.
    var image = Image.FromFile(filePath);
    var client = ImageAnnotatorClient.Create();
    var response = client.DetectSafeSearch(image);
    Console.WriteLine("Adult: {0}", response.Adult.ToString());
    Console.WriteLine("Spoof: {0}", response.Spoof.ToString());
    Console.WriteLine("Medical: {0}", response.Medical.ToString());
    Console.WriteLine("Violence: {0}", response.Violence.ToString());
    Console.WriteLine("Racy: {0}", response.Racy.ToString());

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision Go.


    // detectSafeSearch gets image properties from the Vision API for an image at the given file path.
    func detectSafeSearch(w io.Writer, file string) error {
    	ctx := context.Background()

    	client, err := vision.NewImageAnnotatorClient(ctx)
    	if err != nil {
    		return err
    	}

    	f, err := os.Open(file)
    	if err != nil {
    		return err
    	}
    	defer f.Close()

    	image, err := vision.NewImageFromReader(f)
    	if err != nil {
    		return err
    	}
    	props, err := client.DetectSafeSearch(ctx, image, nil)
    	if err != nil {
    		return err
    	}

    	fmt.Fprintln(w, "Safe Search properties:")
    	fmt.Fprintln(w, "Adult:", props.Adult)
    	fmt.Fprintln(w, "Medical:", props.Medical)
    	fmt.Fprintln(w, "Racy:", props.Racy)
    	fmt.Fprintln(w, "Spoofed:", props.Spoof)
    	fmt.Fprintln(w, "Violence:", props.Violence)

    	return nil
    }
    

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Java.

public static void detectSafeSearch(String filePath, PrintStream out) throws Exception,
        IOException {
      List<AnnotateImageRequest> requests = new ArrayList<>();

      ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath));

      Image img = Image.newBuilder().setContent(imgBytes).build();
      Feature feat = Feature.newBuilder().setType(Type.SAFE_SEARCH_DETECTION).build();
      AnnotateImageRequest request =
          AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
      requests.add(request);

      try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
        BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
        List<AnnotateImageResponse> responses = response.getResponsesList();

        for (AnnotateImageResponse res : responses) {
          if (res.hasError()) {
            out.printf("Error: %s\n", res.getError().getMessage());
            return;
          }

          // For full list of available annotations, see http://g.co/cloud/vision/docs
          SafeSearchAnnotation annotation = res.getSafeSearchAnnotation();
          out.printf(
              "adult: %s\nmedical: %s\nspoofed: %s\nviolence: %s\nracy: %s\n",
              annotation.getAdult(),
              annotation.getMedical(),
              annotation.getSpoof(),
              annotation.getViolence(),
              annotation.getRacy());
        }
      }
    }

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Node.js.

const vision = require('@google-cloud/vision');

    // Creates a client
    const client = new vision.ImageAnnotatorClient();

    /**
     * TODO(developer): Uncomment the following line before running the sample.
     */
    // const fileName = 'Local image file, e.g. /path/to/image.png';

    // Performs safe search detection on the local file
    const [result] = await client.safeSearchDetection(fileName);
    const detections = result.safeSearchAnnotation;
    console.log('Safe search:');
    console.log(`Adult: ${detections.adult}`);
    console.log(`Medical: ${detections.medical}`);
    console.log(`Spoof: ${detections.spoof}`);
    console.log(`Violence: ${detections.violence}`);
    console.log(`Racy: ${detections.racy}`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision PHP.

namespace Google\Cloud\Samples\Vision;

    use Google\Cloud\Vision\V1\ImageAnnotatorClient;

    // $path = 'path/to/your/image.jpg'

    function detect_safe_search($path)
    {
        $imageAnnotator = new ImageAnnotatorClient();

        # annotate the image
        $image = file_get_contents($path);
        $response = $imageAnnotator->safeSearchDetection($image);
        $safe = $response->getSafeSearchAnnotation();

        $adult = $safe->getAdult();
        $medical = $safe->getMedical();
        $spoof = $safe->getSpoof();
        $violence = $safe->getViolence();
        $racy = $safe->getRacy();

        # names of likelihood from google.cloud.vision.enums
        $likelihoodName = ['UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY',
        'POSSIBLE', 'LIKELY', 'VERY_LIKELY'];

        printf("Adult: %s" . PHP_EOL, $likelihoodName[$adult]);
        printf("Medical: %s" . PHP_EOL, $likelihoodName[$medical]);
        printf("Spoof: %s" . PHP_EOL, $likelihoodName[$spoof]);
        printf("Violence: %s" . PHP_EOL, $likelihoodName[$violence]);
        printf("Racy: %s" . PHP_EOL, $likelihoodName[$racy]);

        $imageAnnotator->close();
    }

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Python.

def detect_safe_search(path):
        """Detects unsafe features in the file."""
        from google.cloud import vision
        import io
        client = vision.ImageAnnotatorClient()

        with io.open(path, 'rb') as image_file:
            content = image_file.read()

        image = vision.types.Image(content=content)

        response = client.safe_search_detection(image=image)
        safe = response.safe_search_annotation

        # Names of likelihood from google.cloud.vision.enums
        likelihood_name = ('UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE',
                           'LIKELY', 'VERY_LIKELY')
        print('Safe search:')

        print('adult: {}'.format(likelihood_name[safe.adult]))
        print('medical: {}'.format(likelihood_name[safe.medical]))
        print('spoofed: {}'.format(likelihood_name[safe.spoof]))
        print('violence: {}'.format(likelihood_name[safe.violence]))
        print('racy: {}'.format(likelihood_name[safe.racy]))

        if response.error.message:
            raise Exception(
                '{}\nFor more info on error messages, check: '
                'https://cloud.google.com/apis/design/errors'.format(
                    response.error.message))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Ruby.

# image_path = "Path to local image file, eg. './image.png'"

    require "google/cloud/vision"

    image_annotator = Google::Cloud::Vision::ImageAnnotator.new

    response = image_annotator.safe_search_detection image: image_path

    response.responses.each do |res|
      safe_search = res.safe_search_annotation

      puts "Adult:    #{safe_search.adult}"
      puts "Spoof:    #{safe_search.spoof}"
      puts "Medical:  #{safe_search.medical}"
      puts "Violence: #{safe_search.violence}"
      puts "Racy:     #{safe_search.racy}"
    end

Détection de contenu explicite sur une image distante

Pour plus de facilité, l'API Vision peut directement détecter des fonctionnalités dans un fichier image de Google Cloud Storage ou sur le Web sans envoyer le contenu du fichier image dans le corps de votre requête.

API REST et ligne de commande

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • cloud-storage-image-uri : chemin d'accès à un fichier image valide dans un bucket Cloud Storage. Il faut au minimum disposer des droits en lecture sur le fichier. Exemple :
    • gs://my-storage-bucket/img/image1.png

Méthode HTTP et URL :

POST https://vision.googleapis.com/v1/images:annotate

Corps JSON de la requête :

    {
      "requests": [
        {
          "image": {
            "source": {
              "imageUri": "cloud-storage-image-uri"
            }
          },
          "features": [
            {
              "type": "SAFE_SEARCH_DETECTION"
            }
          ]
        }
      ]
    }
    

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://vision.googleapis.com/v1/images:annotate

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

    {
      "responses": [
        {
          "safeSearchAnnotation": {
            "adult": "UNLIKELY",
            "spoof": "VERY_UNLIKELY",
            "medical": "VERY_UNLIKELY",
            "violence": "LIKELY",
            "racy": "POSSIBLE"
          }
        }
      ]
    }
    

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision C#.

// Specify a Google Cloud Storage uri for the image
    // or a publicly accessible HTTP or HTTPS uri.
    var image = Image.FromUri(uri);
    var client = ImageAnnotatorClient.Create();
    var response = client.DetectSafeSearch(image);
    Console.WriteLine("Adult: {0}", response.Adult.ToString());
    Console.WriteLine("Spoof: {0}", response.Spoof.ToString());
    Console.WriteLine("Medical: {0}", response.Medical.ToString());
    Console.WriteLine("Violence: {0}", response.Violence.ToString());
    Console.WriteLine("Racy: {0}", response.Racy.ToString());

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision Go.


    // detectSafeSearch gets image properties from the Vision API for an image at the given file path.
    func detectSafeSearchURI(w io.Writer, file string) error {
    	ctx := context.Background()

    	client, err := vision.NewImageAnnotatorClient(ctx)
    	if err != nil {
    		return err
    	}

    	image := vision.NewImageFromURI(file)
    	props, err := client.DetectSafeSearch(ctx, image, nil)
    	if err != nil {
    		return err
    	}

    	fmt.Fprintln(w, "Safe Search properties:")
    	fmt.Fprintln(w, "Adult:", props.Adult)
    	fmt.Fprintln(w, "Medical:", props.Medical)
    	fmt.Fprintln(w, "Racy:", props.Racy)
    	fmt.Fprintln(w, "Spoofed:", props.Spoof)
    	fmt.Fprintln(w, "Violence:", props.Violence)

    	return nil
    }
    

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Java.

public static void detectSafeSearchGcs(String gcsPath, PrintStream out) throws Exception,
        IOException {
      List<AnnotateImageRequest> requests = new ArrayList<>();

      ImageSource imgSource = ImageSource.newBuilder().setGcsImageUri(gcsPath).build();
      Image img = Image.newBuilder().setSource(imgSource).build();
      Feature feat = Feature.newBuilder().setType(Type.SAFE_SEARCH_DETECTION).build();
      AnnotateImageRequest request =
          AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
      requests.add(request);

      try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
        BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
        List<AnnotateImageResponse> responses = response.getResponsesList();

        for (AnnotateImageResponse res : responses) {
          if (res.hasError()) {
            out.printf("Error: %s\n", res.getError().getMessage());
            return;
          }

          // For full list of available annotations, see http://g.co/cloud/vision/docs
          SafeSearchAnnotation annotation = res.getSafeSearchAnnotation();
          out.printf(
              "adult: %s\nmedical: %s\nspoofed: %s\nviolence: %s\nracy: %s\n",
              annotation.getAdult(),
              annotation.getMedical(),
              annotation.getSpoof(),
              annotation.getViolence(),
              annotation.getRacy());
        }
      }
    }

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Node.js.

// Imports the Google Cloud client libraries
    const vision = require('@google-cloud/vision');

    // Creates a client
    const client = new vision.ImageAnnotatorClient();

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const bucketName = 'Bucket where the file resides, e.g. my-bucket';
    // const fileName = 'Path to file within bucket, e.g. path/to/image.png';

    // Performs safe search property detection on the remote file
    const [result] = await client.safeSearchDetection(
      `gs://${bucketName}/${fileName}`
    );
    const detections = result.safeSearchAnnotation;
    console.log(`Adult: ${detections.adult}`);
    console.log(`Spoof: ${detections.spoof}`);
    console.log(`Medical: ${detections.medical}`);
    console.log(`Violence: ${detections.violence}`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision PHP.

namespace Google\Cloud\Samples\Vision;

    use Google\Cloud\Vision\V1\ImageAnnotatorClient;

    // $path = 'gs://path/to/your/image.jpg'

    function detect_safe_search_gcs($path)
    {
        $imageAnnotator = new ImageAnnotatorClient();

        # annotate the image
        $response = $imageAnnotator->safeSearchDetection($path);
        $safe = $response->getSafeSearchAnnotation();

        if ($safe) {
            $adult = $safe->getAdult();
            $medical = $safe->getMedical();
            $spoof = $safe->getSpoof();
            $violence = $safe->getViolence();
            $racy = $safe->getRacy();

            # names of likelihood from google.cloud.vision.enums
            $likelihoodName = ['UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY',
            'POSSIBLE', 'LIKELY', 'VERY_LIKELY'];

            printf("Adult: %s" . PHP_EOL, $likelihoodName[$adult]);
            printf("Medical: %s" . PHP_EOL, $likelihoodName[$medical]);
            printf("Spoof: %s" . PHP_EOL, $likelihoodName[$spoof]);
            printf("Violence: %s" . PHP_EOL, $likelihoodName[$violence]);
            printf("Racy: %s" . PHP_EOL, $likelihoodName[$racy]);
        } else {
            print('No Results.' . PHP_EOL);
        }

        $imageAnnotator->close();
    }

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Python.

def detect_safe_search_uri(uri):
        """Detects unsafe features in the file located in Google Cloud Storage or
        on the Web."""
        from google.cloud import vision
        client = vision.ImageAnnotatorClient()
        image = vision.types.Image()
        image.source.image_uri = uri

        response = client.safe_search_detection(image=image)
        safe = response.safe_search_annotation

        # Names of likelihood from google.cloud.vision.enums
        likelihood_name = ('UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE',
                           'LIKELY', 'VERY_LIKELY')
        print('Safe search:')

        print('adult: {}'.format(likelihood_name[safe.adult]))
        print('medical: {}'.format(likelihood_name[safe.medical]))
        print('spoofed: {}'.format(likelihood_name[safe.spoof]))
        print('violence: {}'.format(likelihood_name[safe.violence]))
        print('racy: {}'.format(likelihood_name[safe.racy]))

        if response.error.message:
            raise Exception(
                '{}\nFor more info on error messages, check: '
                'https://cloud.google.com/apis/design/errors'.format(
                    response.error.message))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby dans le guide de démarrage rapide de l'API Vision à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision Ruby.

# image_path = "Google Cloud Storage URI, eg. 'gs://my-bucket/image.png'"

    require "google/cloud/vision"

    image_annotator = Google::Cloud::Vision::ImageAnnotator.new

    response = image_annotator.safe_search_detection image: image_path

    response.responses.each do |res|
      safe_search = res.safe_search_annotation

      puts "Adult:    #{safe_search.adult}"
      puts "Spoof:    #{safe_search.spoof}"
      puts "Medical:  #{safe_search.medical}"
      puts "Violence: #{safe_search.violence}"
      puts "Racy:     #{safe_search.racy}"
    end

Commande gcloud

Pour effectuer une détection SafeSearch, utilisez la commande gcloud ml vision detect-safe-search comme indiqué dans l'exemple suivant :

    gcloud ml vision detect-safe-search gs://my_bucket/input_file