Exécuter des suggestions de cadrage

Les suggestions de cadrage suggèrent des sommets (ou "vertex") pour cadrer une zone d'une image.

Exécuter des suggestions de cadrage sur une image locale

Protocole

Reportez-vous au point de terminaison de l'API images:annotate pour obtenir des informations complètes à ce sujet.

Pour exécuter des suggestions de cadrage, effectuez une requête POST et spécifiez le corps de requête approprié comme suit :

POST https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY
{
  "requests": [
    {
      "image": {
        "content": "/9j/7QBEUGhvdG9zaG9...base64-encoded-image-content...fXNWzvDEeYxxxzj/Coa6Bax//Z"
      },
      "features": [
        {
          "type": "CROP_HINTS"
        }
      ]
    }
  ]
}

Pour en savoir plus sur la configuration du corps de la requête, consultez la documentation de référence sur AnnotateImageRequest.

Si la requête aboutit, le serveur renvoie un code d'état HTTP 200 OK ainsi que la réponse au format JSON.

Réponse :

{
  "responses": [
    {
      "cropHintsAnnotation": {
        "cropHints": [
          {
            "boundingPoly": {
              "vertices": [
                {},
                {
                  "x": 280
                },
                {
                  "x": 280,
                  "y": 43
                },
                {
                  "y": 43
                }
              ]
            },
            "confidence": 0.79999995,
            "importanceFraction": 1
          }
        ]
      }
    }
  ]
}

C#

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

// Load an image from a local file.
var image = Image.FromFile(filePath);
var client = ImageAnnotatorClient.Create();
CropHintsAnnotation annotation = client.DetectCropHints(image);
foreach (CropHint hint in annotation.CropHints)
{
    Console.WriteLine("Confidence: {0}", hint.Confidence);
    Console.WriteLine("ImportanceFraction: {0}", hint.ImportanceFraction);
    Console.WriteLine("Bounding Polygon:");
    foreach (Vertex vertex in hint.BoundingPoly.Vertices)
    {
        Console.WriteLine("\tX:\t{0}\tY:\t{1}", vertex.X, vertex.Y);
    }
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision en langage Go.


// detectCropHints gets suggested croppings the Vision API for an image at the given file path.
func detectCropHints(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
	}
	res, err := client.CropHints(ctx, image, nil)
	if err != nil {
		return err
	}

	fmt.Fprintln(w, "Crop hints:")
	for _, hint := range res.CropHints {
		for _, v := range hint.BoundingPoly.Vertices {
			fmt.Fprintf(w, "(%d,%d)\n", v.X, v.Y)
		}
	}

	return nil
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage Java.

public static void detectCropHints(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.CROP_HINTS).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
      CropHintsAnnotation annotation = res.getCropHintsAnnotation();
      for (CropHint hint : annotation.getCropHintsList()) {
        out.println(hint.getBoundingPoly());
      }
    }
  }
}

Node.js

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


// Imports the Google Cloud client library
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';

// Find crop hints for the local file
const [result] = await client.cropHints(fileName);
const cropHints = result.cropHintsAnnotation;
cropHints.cropHints.forEach((hintBounds, hintIdx) => {
  console.log(`Crop Hint ${hintIdx}:`);
  hintBounds.boundingPoly.vertices.forEach((bound, boundIdx) => {
    console.log(`  Bound ${boundIdx}: (${bound.x}, ${bound.y})`);
  });
});

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage PHP.

namespace Google\Cloud\Samples\Vision;

use Google\Cloud\Vision\V1\ImageAnnotatorClient;

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

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

    # annotate the image
    $image = file_get_contents($path);
    $response = $imageAnnotator->cropHintsDetection($image);
    $annotations = $response->getCropHintsAnnotation();

    # print the crop hints from the annotation
    if ($annotations) {
        print("Crop hints:" . PHP_EOL);
        foreach ($annotations->getCropHints() as $hint) {
            # get bounds
            $vertices = $hint->getBoundingPoly()->getVertices();
            $bounds = [];
            foreach ($vertices as $vertex) {
                $bounds[] = sprintf('(%d,%d)', $vertex->getX(),
                    $vertex->getY());
            }
            print('Bounds: ' . join(', ',$bounds) . PHP_EOL);
        }
    } else {
        print('No crop hints' . PHP_EOL);
    }

    $imageAnnotator->close();
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage Python.

def detect_crop_hints(path):
    """Detects crop hints in an image."""
    from google.cloud import vision
    client = vision.ImageAnnotatorClient()

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

    crop_hints_params = vision.types.CropHintsParams(aspect_ratios=[1.77])
    image_context = vision.types.ImageContext(
        crop_hints_params=crop_hints_params)

    response = client.crop_hints(image=image, image_context=image_context)
    hints = response.crop_hints_annotation.crop_hints

    for n, hint in enumerate(hints):
        print('\nCrop Hint: {}'.format(n))

        vertices = (['({},{})'.format(vertex.x, vertex.y)
                    for vertex in hint.bounding_poly.vertices])

        print('bounds: {}'.format(','.join(vertices)))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage 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.crop_hints_detection image: image_path

response.responses.each do |res|
  puts "Crop hint bounds:"
  res.crop_hints_annotation.crop_hints.each do |crop_hint|
    crop_hint.bounding_poly.vertices.each do |bound|
      puts "#{bound.x}, #{bound.y}"
    end
  end
end

Exécuter les suggestions de cadrage sur une image distante

Pour vous simplifier la tâche, Vision peut exécuter les suggestions de cadrage sur un fichier image situé dans Google Cloud Storage ou sur le Web, sans qu'il soit nécessaire d'envoyer le contenu de ce fichier dans le corps de la requête.

Protocole

Reportez-vous au point de terminaison de l'API images:annotate pour obtenir des informations complètes à ce sujet.

Pour exécuter des suggestions de cadrage, effectuez une requête POST et spécifiez le corps de requête approprié comme suit :

POST https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY 
{
  "requests": [
    {
      "image": {
        "source": {
          "gcsImageUri": "gs://YOUR_BUCKET_NAME/YOUR_FILE_NAME"
        }
      },
      "features": [
        {
          "type": "CROP_HINTS"
        }
      ]
    }
  ]
}

Pour en savoir plus sur la configuration du corps de la requête, consultez la documentation de référence sur AnnotateImageRequest.

Si la requête aboutit, le serveur renvoie un code d'état HTTP 200 OK ainsi que la réponse au format JSON.

Réponse :

{
  "responses": [
   {
      "cropHintsAnnotation": {
        "cropHints": [
          {
            "boundingPoly": {
              "vertices": [
                {},
                {
                  "x": 280
                },
                {
                  "x": 280,
                  "y": 43
                },
                {
                  "y": 43
                }
              ]
            },
            "confidence": 0.79999995,
            "importanceFraction": 1
          }
        ]
      }
    }
  ]
}

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# dans le guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision en langage 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();
CropHintsAnnotation annotation = client.DetectCropHints(image);
foreach (CropHint hint in annotation.CropHints)
{
    Console.WriteLine("Confidence: {0}", hint.Confidence);
    Console.WriteLine("ImportanceFraction: {0}", hint.ImportanceFraction);
    Console.WriteLine("Bounding Polygon:");
    foreach (Vertex vertex in hint.BoundingPoly.Vertices)
    {
        Console.WriteLine("\tX:\t{0}\tY:\t{1}", vertex.X, vertex.Y);
    }
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage Java.

public static void detectCropHintsGcs(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.CROP_HINTS).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
      CropHintsAnnotation annotation = res.getCropHintsAnnotation();
      for (CropHint hint : annotation.getCropHintsList()) {
        out.println(hint.getBoundingPoly());
      }
    }
  }
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Vision en langage Go.


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

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

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

	fmt.Fprintln(w, "Crop hints:")
	for _, hint := range res.CropHints {
		for _, v := range hint.BoundingPoly.Vertices {
			fmt.Fprintf(w, "(%d,%d)\n", v.X, v.Y)
		}
	}

	return nil
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage 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';

// Find crop hints for the remote file
const [result] = await client.cropHints(`gs://${bucketName}/${fileName}`);
const cropHints = result.cropHintsAnnotation;
cropHints.cropHints.forEach((hintBounds, hintIdx) => {
  console.log(`Crop Hint ${hintIdx}:`);
  hintBounds.boundingPoly.vertices.forEach((bound, boundIdx) => {
    console.log(`  Bound ${boundIdx}: (${bound.x}, ${bound.y})`);
  });
});

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage PHP.

namespace Google\Cloud\Samples\Vision;

use Google\Cloud\Vision\V1\ImageAnnotatorClient;

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

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

    # annotate the image
    $response = $imageAnnotator->cropHintsDetection($path);
    $annotations = $response->getCropHintsAnnotation();

    # print the crop hints from the annotation
    if ($annotations) {
        print("Crop hints:" . PHP_EOL);
        foreach ($annotations->getCropHints() as $hint) {
            # get bounds
            $vertices = $hint->getBoundingPoly()->getVertices();
            $bounds = [];
            foreach ($vertices as $vertex) {
                $bounds[] = sprintf('(%d,%d)', $vertex->getX(),
                    $vertex->getY());
            }
            print('Bounds: ' . join(', ',$bounds) . PHP_EOL);
        }
    } else {
        print('No crop hints' . PHP_EOL);
    }

    $imageAnnotator->close();
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage Python.

def detect_crop_hints_uri(uri):
    """Detects crop hints in the file located in Google Cloud Storage."""
    from google.cloud import vision
    client = vision.ImageAnnotatorClient()
    image = vision.types.Image()
    image.source.image_uri = uri

    crop_hints_params = vision.types.CropHintsParams(aspect_ratios=[1.77])
    image_context = vision.types.ImageContext(
        crop_hints_params=crop_hints_params)

    response = client.crop_hints(image=image, image_context=image_context)
    hints = response.crop_hints_annotation.crop_hints

    for n, hint in enumerate(hints):
        print('\nCrop Hint: {}'.format(n))

        vertices = (['({},{})'.format(vertex.x, vertex.y)
                    for vertex in hint.bounding_poly.vertices])

        print('bounds: {}'.format(','.join(vertices)))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du guide de démarrage rapide de Vision avec les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vision en langage 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.crop_hints_detection image: image_path

response.responses.each do |res|
  puts "Crop hint bounds:"
  res.crop_hints_annotation.crop_hints.each do |crop_hint|
    crop_hint.bounding_poly.vertices.each do |bound|
      puts "#{bound.x}, #{bound.y}"
    end
  end
end
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Cloud Vision API Documentation
Besoin d'aide ? Consultez notre page d'assistance.