Skip to content

Instantly share code, notes, and snippets.

@crysxd
Created May 11, 2019 11:56
Show Gist options
  • Save crysxd/397d8217b7bbe44a19e2700df4123655 to your computer and use it in GitHub Desktop.
Save crysxd/397d8217b7bbe44a19e2700df4123655 to your computer and use it in GitHub Desktop.
Search for products with Google Cloud Vision Product Search
getSimilarProductsFile('your-project-id', 'your-location', 'your-product-set-id', 'your-product-category', 'your-test-image-path')
async function getSimilarProductsFile(
projectId,
location,
productSetId,
productCategory,
filePath,
filter
) {
// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');
const fs = require('fs');
// Creates a client
const productSearchClient = new vision.ProductSearchClient();
const imageAnnotatorClient = new vision.ImageAnnotatorClient();
/**
* TODO(developer): Uncomment the following line before running the sample.
*/
// const projectId = 'nodejs-docs-samples';
// const location = 'us-west1';
// const productSetId = 'indexed_product_set_id_for_testing';
// const productCategory = 'apparel';
// const filePath = './resources/shoes_1.jpg';
// const filter = '';
const productSetPath = productSearchClient.productSetPath(
projectId,
location,
productSetId
);
const content = fs.readFileSync(filePath, 'base64');
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: {content: content},
features: [{type: 'PRODUCT_SEARCH'}],
imageContext: {
productSearchParams: {
productSet: productSetPath,
productCategories: [productCategory],
filter: filter,
},
},
};
const [response] = await imageAnnotatorClient.batchAnnotateImages({
requests: [request],
});
console.log('Search Image:', filePath);
const results = response['responses'][0]['productSearchResults']['results'];
console.log('\nSimilar product information:');
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);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment