Suchen Sie nach Produkten, die einem in Cloud Storage als Datei gespeicherten Bild ähneln.
Weitere Informationen
Eine ausführliche Dokumentation, die dieses Codebeispiel enthält, finden Sie hier:
Codebeispiel
Go
import (
"context"
"fmt"
"io"
vision "cloud.google.com/go/vision/apiv1"
"cloud.google.com/go/vision/v2/apiv1/visionpb"
)
// getSimilarProductsURI searches for products from a product set similar to products in an image file on GCS.
func getSimilarProductsURI(w io.Writer, projectID string, location string, productSetID string, productCategory string, imageURI string, filter string) error {
ctx := context.Background()
c, err := vision.NewImageAnnotatorClient(ctx)
if err != nil {
return fmt.Errorf("NewImageAnnotatorClient: %v", err)
}
defer c.Close()
image := vision.NewImageFromURI(imageURI)
ictx := &visionpb.ImageContext{
ProductSearchParams: &visionpb.ProductSearchParams{
ProductSet: fmt.Sprintf("projects/%s/locations/%s/productSets/%s", projectID, location, productSetID),
ProductCategories: []string{productCategory},
Filter: filter,
},
}
response, err := c.ProductSearch(ctx, image, ictx)
if err != nil {
return fmt.Errorf("ProductSearch: %v", err)
}
fmt.Fprintf(w, "Product set index time:\n")
fmt.Fprintf(w, "seconds: %d\n", response.IndexTime.Seconds)
fmt.Fprintf(w, "nanos: %d\n", response.IndexTime.Nanos)
fmt.Fprintf(w, "Search results:\n")
for _, result := range response.Results {
fmt.Fprintf(w, "Score(Confidence): %f\n", result.Score)
fmt.Fprintf(w, "Image name: %s\n", result.Image)
fmt.Fprintf(w, "Prodcut name: %s\n", result.Product.Name)
fmt.Fprintf(w, "Product display name: %s\n", result.Product.DisplayName)
fmt.Fprintf(w, "Product labels: %s\n", result.Product.ProductLabels)
}
return nil
}
Java
/**
* Search similar products to image in Google Cloud Storage.
*
* @param projectId - Id of the project.
* @param computeRegion - Region name.
* @param productSetId - Id of the product set.
* @param productCategory - Category of the product.
* @param gcsUri - GCS file path of the image to be searched
* @param filter - Condition to be applied on the labels. Example for filter: (color = red OR
* color = blue) AND style = kids It will search on all products with the following labels:
* color:red AND style:kids color:blue AND style:kids
* @throws Exception - on errors.
*/
public static void getSimilarProductsGcs(
String projectId,
String computeRegion,
String productSetId,
String productCategory,
String gcsUri,
String filter)
throws Exception {
try (ImageAnnotatorClient queryImageClient = ImageAnnotatorClient.create()) {
// Get the full path of the product set.
String productSetPath = ProductSetName.of(projectId, computeRegion, productSetId).toString();
// Get the image from Google Cloud Storage
ImageSource source = ImageSource.newBuilder().setGcsImageUri(gcsUri).build();
// Create annotate image request along with product search feature.
Feature featuresElement = Feature.newBuilder().setType(Type.PRODUCT_SEARCH).build();
Image image = Image.newBuilder().setSource(source).build();
ImageContext imageContext =
ImageContext.newBuilder()
.setProductSearchParams(
ProductSearchParams.newBuilder()
.setProductSet(productSetPath)
.addProductCategories(productCategory)
.setFilter(filter))
.build();
AnnotateImageRequest annotateImageRequest =
AnnotateImageRequest.newBuilder()
.addFeatures(featuresElement)
.setImage(image)
.setImageContext(imageContext)
.build();
List<AnnotateImageRequest> requests = Arrays.asList(annotateImageRequest);
// Search products similar to the image.
BatchAnnotateImagesResponse response = queryImageClient.batchAnnotateImages(requests);
List<Result> similarProducts =
response.getResponses(0).getProductSearchResults().getResultsList();
System.out.println("Similar Products: ");
for (Result product : similarProducts) {
System.out.println(String.format("\nProduct name: %s", product.getProduct().getName()));
System.out.println(
String.format("Product display name: %s", product.getProduct().getDisplayName()));
System.out.println(
String.format("Product description: %s", product.getProduct().getDescription()));
System.out.println(String.format("Score(Confidence): %s", product.getScore()));
System.out.println(String.format("Image name: %s", product.getImage()));
}
}
}
Node.js
// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');
// Creates a client
const productSearchClient = new vision.ProductSearchClient();
const imageAnnotatorClient = new vision.ImageAnnotatorClient();
async function getSimilarProductsGcs(
projectId,
location,
productSetId,
productCategory,
filePath,
filter
) {
/**
* TODO(developer): Uncomment the following line before running the sample.
*/
// const projectId = 'Your Google Cloud project Id';
// const location = 'A compute region name';
// const productSetId = 'Id of the product set';
// const productCategory = 'Category of the product';
// const filePath = 'Local file path of the image to be searched';
// const filter = 'Condition to be applied on the labels';
const productSetPath = productSearchClient.productSetPath(
projectId,
location,
productSetId
);
const request = {
// The input image can be a GCS link or HTTPS link or Raw image bytes.
// Example:
// To use GCS link replace with below code
// image: {source: {gcsImageUri: filePath}}
// To use HTTP link replace with below code
// image: {source: {imageUri: filePath}}
image: {source: {gcsImageUri: filePath}},
features: [{type: 'PRODUCT_SEARCH'}],
imageContext: {
productSearchParams: {
productSet: productSetPath,
productCategories: [productCategory],
filter: filter,
},
},
};
console.log(request.image);
const [response] = await imageAnnotatorClient.batchAnnotateImages({
requests: [request],
});
console.log('Search Image:', filePath);
console.log('\nSimilar product information:');
const results = response['responses'][0]['productSearchResults']['results'];
results.forEach(result => {
console.log('Product id:', result['product'].name.split('/').pop(-1));
console.log('Product display name:', result['product'].displayName);
console.log('Product description:', result['product'].description);
console.log('Product category:', result['product'].productCategory);
});
}
getSimilarProductsGcs();
Python
from google.cloud import vision
def get_similar_products_uri(
project_id, location, product_set_id, product_category,
image_uri, filter):
"""Search similar products to image.
Args:
project_id: Id of the project.
location: A compute region name.
product_set_id: Id of the product set.
product_category: Category of the product.
image_uri: Cloud Storage location of image to be searched.
filter: Condition to be applied on the labels.
Example for filter: (color = red OR color = blue) AND style = kids
It will search on all products with the following labels:
color:red AND style:kids
color:blue AND style:kids
"""
# product_search_client is needed only for its helper methods.
product_search_client = vision.ProductSearchClient()
image_annotator_client = vision.ImageAnnotatorClient()
# Create annotate image request along with product search feature.
image_source = vision.ImageSource(image_uri=image_uri)
image = vision.Image(source=image_source)
# product search specific parameters
product_set_path = product_search_client.product_set_path(
project=project_id, location=location,
product_set=product_set_id)
product_search_params = vision.ProductSearchParams(
product_set=product_set_path,
product_categories=[product_category],
filter=filter)
image_context = vision.ImageContext(
product_search_params=product_search_params)
# Search products similar to the image.
response = image_annotator_client.product_search(
image, image_context=image_context)
index_time = response.product_search_results.index_time
print('Product set index time: ')
print(index_time)
results = response.product_search_results.results
print('Search results:')
for result in results:
product = result.product
print('Score(Confidence): {}'.format(result.score))
print('Image name: {}'.format(result.image))
print('Product name: {}'.format(product.name))
print('Product display name: {}'.format(
product.display_name))
print('Product description: {}\n'.format(product.description))
print('Product labels: {}\n'.format(product.product_labels))
Nächste Schritte
Informationen zum Suchen und Filtern von Codebeispielen für andere Google Cloud-Produkte finden Sie im Google Cloud-Beispielbrowser.