ウェブ エンティティ検出ベータ版機能

Google Cloud Vision API v1p1beta1 では、ウェブ エンティティ検出に次のベータ版の機能が追加されています。

  • 最良の推測ラベル: ウェブ エンティティ検出リクエストには bestGuessLabels リストが含まれ、画像の内容を最もよく表すラベルを提供します。

  • 地理的メタデータを使用した結果の改善: Vision API は、画像ファイルのジオタグ メタデータにアクセスして、より関連性の高いウェブ エンティティやページを返すことができます。ジオタグを使用できるようにするには、リクエストに "include_geo_results": true を指定します。

これらの機能を使用するには、API を呼び出すときに https://vision.googleapis.com/v1p1beta1/images:annotate エンドポイントを指定します。

最良の推測ラベル

プロトコル

このコードは、Google Cloud Storage に保存されているサンプル画像を使用しています。このサンプル画像を使用してコードを実行したり、独自のコードを提供したり、コードを変更してインライン画像を受け入れたりすることができます(ウェブ検出サンプルページを参照してください)。

詳しくは、images:annotate API エンドポイントをご覧ください。

ウェブ エンティティ検出を実行するには、POST リクエストを作成し、適切なリクエスト本文を指定します。

POST https://vision.googleapis.com/v1p1beta1/images:annotate?key=YOUR_API_KEY
{
  "requests": [
    {
      "features": [
        {
          "type": "WEB_DETECTION"
        }
      ],
      "image": {
        "source": {
          "gcsImageUri": "gs://bucket-name-123/geotagged.jpg"
        }
      }
    }
  ]
}

リクエストが成功すると、サーバーは 200 OK HTTP ステータス コードと JSON 形式のレスポンスを返します。

{
  "responses": [
    {
      "webDetection": {
        "webEntities": [
          {
            "entityId": "/m/040sd3",
            "score": 40.5952,
            "description": "Luna Park Sydney"
          },
          ...
        ],
        "partialMatchingImages": [
          ...
        ],
        "pagesWithMatchingImages": [
          ...
        ],
        "visuallySimilarImages": [
          ...
        ],
        "bestGuessLabels": [
          {
            "label": "landmark"
          }
        ]
      }
    }
  ]
}

Python

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

def detect_web(path):
    """Detects web annotations given an image."""
    client = vision.ImageAnnotatorClient()

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

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

    response = client.web_detection(image=image)
    annotations = response.web_detection

    if annotations.best_guess_labels:
        for label in annotations.best_guess_labels:
            print('\nBest guess label: {}'.format(label.label))

    if annotations.pages_with_matching_images:
        print('\n{} Pages with matching images found:'.format(
            len(annotations.pages_with_matching_images)))

        for page in annotations.pages_with_matching_images:
            print('\n\tPage url   : {}'.format(page.url))

            if page.full_matching_images:
                print('\t{} Full Matches found: '.format(
                       len(page.full_matching_images)))

                for image in page.full_matching_images:
                    print('\t\tImage url  : {}'.format(image.url))

            if page.partial_matching_images:
                print('\t{} Partial Matches found: '.format(
                       len(page.partial_matching_images)))

                for image in page.partial_matching_images:
                    print('\t\tImage url  : {}'.format(image.url))

    if annotations.web_entities:
        print('\n{} Web entities found: '.format(
            len(annotations.web_entities)))

        for entity in annotations.web_entities:
            print('\n\tScore      : {}'.format(entity.score))
            print(u'\tDescription: {}'.format(entity.description))

    if annotations.visually_similar_images:
        print('\n{} visually similar images found:\n'.format(
            len(annotations.visually_similar_images)))

        for image in annotations.visually_similar_images:
            print('\tImage url    : {}'.format(image.url))

Java

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

/**
 * Detects whether the remote image on Google Cloud Storage has features you would want to
 * moderate.
 *
 * @param gcsPath The path to the remote on Google Cloud Storage file to detect web annotations.
 * @param out A {@link PrintStream} to write the results to.
 * @throws Exception on errors while closing the client.
 * @throws IOException on Input/Output errors.
 */
public static void detectWebDetectionsGcs(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.WEB_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;
      }

      // Search the web for usages of the image. You could use these signals later
      // for user input moderation or linking external references.
      // For a full list of available annotations, see http://g.co/cloud/vision/docs
      WebDetection annotation = res.getWebDetection();
      out.println("Entity:Id:Score");
      out.println("===============");
      for (WebEntity entity : annotation.getWebEntitiesList()) {
        out.println(entity.getDescription() + " : " + entity.getEntityId() + " : "
            + entity.getScore());
      }
      for (WebLabel label : annotation.getBestGuessLabelsList()) {
        out.format("\nBest guess label: %s", label.getLabel());
      }
      out.println("\nPages with matching images: Score\n==");
      for (WebPage page : annotation.getPagesWithMatchingImagesList()) {
        out.println(page.getUrl() + " : " + page.getScore());
      }
      out.println("\nPages with partially matching images: Score\n==");
      for (WebImage image : annotation.getPartialMatchingImagesList()) {
        out.println(image.getUrl() + " : " + image.getScore());
      }
      out.println("\nPages with fully matching images: Score\n==");
      for (WebImage image : annotation.getFullMatchingImagesList()) {
        out.println(image.getUrl() + " : " + image.getScore());
      }
      out.println("\nPages with visually similar images: Score\n==");
      for (WebImage image : annotation.getVisuallySimilarImagesList()) {
        out.println(image.getUrl() + " : " + image.getScore());
      }
    }
  }
}

Node.js

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

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

// 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';

// Detect similar images on the web to a local file
client
  .webDetection(fileName)
  .then(results => {
    const webDetection = results[0].webDetection;

    if (webDetection.bestGuessLabels.length) {
      webDetection.bestGuessLabels.forEach(label => {
        console.log(`Best guess label: ${label.label}`);
      });
    }

    if (webDetection.pagesWithMatchingImages.length) {
      const pages = webDetection.pagesWithMatchingImages;
      console.log(`Pages with matching images found: ${pages.length}`);

      pages.forEach(page => {
        console.log(`Page url: ${page.url}`);

        if (page.fullMatchingImages.length) {
          const fullMatchingImages = page.fullMatchingImages;
          console.log(`Full Matches found: ${fullMatchingImages.length}`);
          fullMatchingImages.forEach(image => {
            console.log(`Image url: ${image.url}`);
          });
        }

        if (page.partialMatchingImages.length) {
          const partialMatchingImages = page.partialMatchingImages;
          console.log(
            `Partial Matches found: ${partialMatchingImages.length}`
          );
          partialMatchingImages.forEach(image => {
            console.log(`Image url: ${image.url}`);
          });
        }
      });
    }

    if (webDetection.fullMatchingImages.length) {
      console.log(
        `Full matches found: ${webDetection.fullMatchingImages.length}`
      );
      webDetection.fullMatchingImages.forEach(image => {
        console.log(`  Image url: ${image.url}`);
      });
    }

    if (webDetection.partialMatchingImages.length) {
      console.log(
        `Partial matches found: ${webDetection.partialMatchingImages.length}`
      );
      webDetection.partialMatchingImages.forEach(image => {
        console.log(`  Image url: ${image.url}`);
      });
    }

    if (webDetection.webEntities.length) {
      console.log(`Web entities found: ${webDetection.webEntities.length}`);
      webDetection.webEntities.forEach(webEntity => {
        console.log(`  Score: ${webEntity.score}`);
        console.log(`  Description: ${webEntity.description}`);
      });
    }

    if (webDetection.visuallySimilarImages.length) {
      const visuallySimilarImages = webDetection.visuallySimilarImages;
      console.log(
        `Visually similar images found: ${visuallySimilarImages.length}`
      );
      visuallySimilarImages.forEach(image => {
        console.log(`  Image url: ${image.url}`);
      });
    }
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

地理メタデータ

プロトコル

このコードは、Google Cloud Storage に保存されているサンプル画像を使用しています。このサンプル画像を使用してコードを実行したり、独自のコードを提供したり、コードを変更してインライン画像を受け入れたりすることができます(ウェブ検出サンプルページを参照してください)。

includeGeoResults を False に設定して、地理的ヒントが結果に与える影響をテストしてみてください。

詳しくは、images:annotate API エンドポイントをご覧ください。

ウェブ エンティティ検出を実行するには、POST リクエストを作成し、適切なリクエスト本文を指定します。

POST https://vision.googleapis.com/v1p1beta1/images:annotate?key=YOUR_API_KEY
{
  "requests": [
    {
      "features": [
        {
          "type": "WEB_DETECTION"
        }
      ],
      "image": {
        "source": {
          "gcsImageUri": "gs://bucket-name-123/geotagged.jpg"
        }
      },
      "imageContext": {
        "webDetectionParams": {
          "includeGeoResults": true
          }
        }
    }
  ]
}

リクエストが成功すると、サーバーは 200 OK HTTP ステータス コードと JSON 形式のレスポンスを返します。

{
  "responses": [
    {
      "webDetection": {
        "webEntities": [
          {
            "entityId": "/m/040sd3",
            "score": 40.5952,
            "description": "Luna Park Sydney"
          },
          {
            "entityId": "/m/0701q",
            "score": 22.4608,
            "description": "Sydney Harbour Bridge"
          },
          {
            "entityId": "/m/0d6_f6",
            "score": 9.904,
            "description": "Sea Life Sydney Aquarium"
          },
          {
            "entityId": "/g/11bxfg6b1k",
            "score": 8.384,
            "description": "Bradfield Park"
          },
          {
            "entityId": "/m/02q0lr",
            "score": 5.5,
            "description": "The Rocks"
          },
          ...
        ],
        "partialMatchingImages": [
          ...
        ],
        "pagesWithMatchingImages": [
          ...
        ],
        "visuallySimilarImages": [
          ...
        ],
        "bestGuessLabels": [
          {
            "label": "landmark"
          }
        ]
      }
    }
  ]
}

Python

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

def web_entities_include_geo_results(path):
    client = vision.ImageAnnotatorClient()

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

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

    web_detection_params = vision.types.WebDetectionParams(
        include_geo_results=True)
    image_context = vision.types.ImageContext(
        web_detection_params=web_detection_params)

    response = client.web_detection(image=image, image_context=image_context)

    for entity in response.web_detection.web_entities:
        print('\n\tScore      : {}'.format(entity.score))
        print(u'\tDescription: {}'.format(entity.description))

Java

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

/**
 * Find web entities given the remote image on Google Cloud Storage.
 * @param gcsPath The path to the remote file on Google Cloud Storage to detect web entities with
 *                geo results.
 * @param out A {@link PrintStream} to write the results to.
 * @throws Exception on errors while closing the client.
 * @throws IOException on Input/Output errors.
 */
public static void detectWebEntitiesIncludeGeoResultsGcs(String gcsPath, PrintStream out) throws
    Exception, IOException {
  // Instantiates a client
  try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
    // Set the image source to the given gs uri
    ImageSource imageSource = ImageSource.newBuilder()
        .setGcsImageUri(gcsPath)
        .build();
    // Build the image
    Image image = Image.newBuilder().setSource(imageSource).build();

    // Enable `IncludeGeoResults`
    WebDetectionParams webDetectionParams = WebDetectionParams.newBuilder()
        .setIncludeGeoResults(true)
        .build();

    // Set the parameters for the image
    ImageContext imageContext = ImageContext.newBuilder()
        .setWebDetectionParams(webDetectionParams)
        .build();

    // Create the request with the image, imageContext, and the specified feature: web detection
    AnnotateImageRequest request = AnnotateImageRequest.newBuilder()
        .addFeatures(Feature.newBuilder().setType(Type.WEB_DETECTION))
        .setImage(image)
        .setImageContext(imageContext)
        .build();

    // Perform the request
    BatchAnnotateImagesResponse response = client.batchAnnotateImages(Arrays.asList(request));

    // Display the results
    response.getResponsesList().stream()
        .forEach(r -> r.getWebDetection().getWebEntitiesList().stream()
            .forEach(entity -> {
              out.format("Description: %s\n", entity.getDescription());
              out.format("Score: %f\n", entity.getScore());
            }));
  }
}

Node.js

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

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

// 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';

const request = {
  image: {
    source: {
      filename: fileName,
    },
  },
  imageContext: {
    webDetectionParams: {
      includeGeoResults: true,
    },
  },
};

// Performs safe search detection on the local file
client
  .webDetection(request)
  .then(results => {
    const webDetection = results[0].webDetection;

    webDetection.webEntities.forEach(entity => {
      console.log(`Score: ${entity.score}`);
      console.log(`Description: ${entity.description}`);
    });
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

試してみる

下記のウェブ エンティティ検出のベータ版をお試しください。[実行] をクリックすると、すでに指定されているイメージ(gs://bucket-name-123/geotagged.jpg)を使用することも、代わりに独自のイメージを指定することもできます。

includeGeoResults を false に設定してリクエストを繰り返してみてください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Vision API ドキュメント