vision/detect.js (555 lines of code) (raw):

// Copyright 2017 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. 'use strict'; async function detectFaces(fileName) { // [START vision_face_detection] // 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'; const [result] = await client.faceDetection(fileName); const faces = result.faceAnnotations; console.log('Faces:'); faces.forEach((face, i) => { console.log(` Face #${i + 1}:`); console.log(` Joy: ${face.joyLikelihood}`); console.log(` Anger: ${face.angerLikelihood}`); console.log(` Sorrow: ${face.sorrowLikelihood}`); console.log(` Surprise: ${face.surpriseLikelihood}`); }); // [END vision_face_detection] } async function detectFacesGCS(bucketName, fileName) { // [START vision_face_detection_gcs] // 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 face detection on the gcs file const [result] = await client.faceDetection(`gs://${bucketName}/${fileName}`); const faces = result.faceAnnotations; console.log('Faces:'); faces.forEach((face, i) => { console.log(` Face #${i + 1}:`); console.log(` Joy: ${face.joyLikelihood}`); console.log(` Anger: ${face.angerLikelihood}`); console.log(` Sorrow: ${face.sorrowLikelihood}`); console.log(` Surprise: ${face.surpriseLikelihood}`); }); // [END vision_face_detection_gcs] } async function detectLabels(fileName) { // [START vision_label_detection] // 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'; // Performs label detection on the local file const [result] = await client.labelDetection(fileName); const labels = result.labelAnnotations; console.log('Labels:'); labels.forEach(label => console.log(label.description)); // [END vision_label_detection] } async function detectLabelsGCS(bucketName, fileName) { // [START vision_label_detection_gcs] // 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 label detection on the gcs file const [result] = await client.labelDetection( `gs://${bucketName}/${fileName}` ); const labels = result.labelAnnotations; console.log('Labels:'); labels.forEach(label => console.log(label.description)); // [END vision_label_detection_gcs] } async function detectLandmarks(fileName) { // [START vision_landmark_detection] 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 landmark detection on the local file const [result] = await client.landmarkDetection(fileName); const landmarks = result.landmarkAnnotations; console.log('Landmarks:'); landmarks.forEach(landmark => console.log(landmark)); // [END vision_landmark_detection] } async function detectLandmarksGCS(bucketName, fileName) { // [START vision_landmark_detection_gcs] // 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 landmark detection on the gcs file const [result] = await client.landmarkDetection( `gs://${bucketName}/${fileName}` ); const landmarks = result.landmarkAnnotations; console.log('Landmarks:'); landmarks.forEach(landmark => console.log(landmark)); // [END vision_landmark_detection_gcs] } async function detectText(fileName) { // [START vision_text_detection] 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 text detection on the local file const [result] = await client.textDetection(fileName); const detections = result.textAnnotations; console.log('Text:'); detections.forEach(text => console.log(text)); // [END vision_text_detection] } async function detectTextGCS(bucketName, fileName) { // [START vision_text_detection_gcs] // 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 text detection on the gcs file const [result] = await client.textDetection(`gs://${bucketName}/${fileName}`); const detections = result.textAnnotations; console.log('Text:'); detections.forEach(text => console.log(text)); // [END vision_text_detection_gcs] } async function detectLogos(fileName) { // [START vision_logo_detection] 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 logo detection on the local file const [result] = await client.logoDetection(fileName); const logos = result.logoAnnotations; console.log('Logos:'); logos.forEach(logo => console.log(logo)); // [END vision_logo_detection] } async function detectLogosGCS(bucketName, fileName) { // [START vision_logo_detection_gcs] // 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 logo detection on the gcs file const [result] = await client.logoDetection(`gs://${bucketName}/${fileName}`); const logos = result.logoAnnotations; console.log('Logos:'); logos.forEach(logo => console.log(logo)); // [END vision_logo_detection_gcs] } async function detectProperties(fileName) { // [START vision_image_property_detection] 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 property detection on the local file const [result] = await client.imageProperties(fileName); const colors = result.imagePropertiesAnnotation.dominantColors.colors; colors.forEach(color => console.log(color)); // [END vision_image_property_detection] } async function detectPropertiesGCS(bucketName, fileName) { // [START vision_image_property_detection_gcs] // 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 property detection on the gcs file const [result] = await client.imageProperties( `gs://${bucketName}/${fileName}` ); const colors = result.imagePropertiesAnnotation.dominantColors.colors; colors.forEach(color => console.log(color)); // [END vision_image_property_detection_gcs] } async function detectSafeSearch(fileName) { // [START vision_safe_search_detection] 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}`); // [END vision_safe_search_detection] } async function detectSafeSearchGCS(bucketName, fileName) { // [START vision_safe_search_detection_gcs] // 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}`); // [END vision_safe_search_detection_gcs] } async function detectCropHints(fileName) { // [START vision_crop_hint_detection] // 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})`); }); }); // [END vision_crop_hint_detection] } async function detectCropHintsGCS(bucketName, fileName) { // [START vision_crop_hint_detection_gcs] // 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})`); }); }); // [END vision_crop_hint_detection_gcs] } async function detectWeb(fileName) { // [START vision_web_detection] // 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'; // Detect similar images on the web to a local file const [result] = await client.webDetection(fileName); const webDetection = result.webDetection; if (webDetection.fullMatchingImages.length) { console.log( `Full matches found: ${webDetection.fullMatchingImages.length}` ); webDetection.fullMatchingImages.forEach(image => { console.log(` URL: ${image.url}`); console.log(` Score: ${image.score}`); }); } if (webDetection.partialMatchingImages.length) { console.log( `Partial matches found: ${webDetection.partialMatchingImages.length}` ); webDetection.partialMatchingImages.forEach(image => { console.log(` URL: ${image.url}`); console.log(` Score: ${image.score}`); }); } if (webDetection.webEntities.length) { console.log(`Web entities found: ${webDetection.webEntities.length}`); webDetection.webEntities.forEach(webEntity => { console.log(` Description: ${webEntity.description}`); console.log(` Score: ${webEntity.score}`); }); } if (webDetection.bestGuessLabels.length) { console.log( `Best guess labels found: ${webDetection.bestGuessLabels.length}` ); webDetection.bestGuessLabels.forEach(label => { console.log(` Label: ${label.label}`); }); } // [END vision_web_detection] } async function detectWebGCS(bucketName, fileName) { // [START vision_web_detection_gcs] // 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'; // Detect similar images on the web to a remote file const [result] = await client.webDetection(`gs://${bucketName}/${fileName}`); const webDetection = result.webDetection; if (webDetection.fullMatchingImages.length) { console.log( `Full matches found: ${webDetection.fullMatchingImages.length}` ); webDetection.fullMatchingImages.forEach(image => { console.log(` URL: ${image.url}`); console.log(` Score: ${image.score}`); }); } if (webDetection.partialMatchingImages.length) { console.log( `Partial matches found: ${webDetection.partialMatchingImages.length}` ); webDetection.partialMatchingImages.forEach(image => { console.log(` URL: ${image.url}`); console.log(` Score: ${image.score}`); }); } if (webDetection.webEntities.length) { console.log(`Web entities found: ${webDetection.webEntities.length}`); webDetection.webEntities.forEach(webEntity => { console.log(` Description: ${webEntity.description}`); console.log(` Score: ${webEntity.score}`); }); } if (webDetection.bestGuessLabels.length) { console.log( `Best guess labels found: ${webDetection.bestGuessLabels.length}` ); webDetection.bestGuessLabels.forEach(label => { console.log(` Label: ${label.label}`); }); } // [END vision_web_detection_gcs] } async function detectWebGeo(fileName) { // [START vision_web_detection_include_geo] // 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'; const request = { image: { source: { filename: fileName, }, }, imageContext: { webDetectionParams: { includeGeoResults: true, }, }, }; // Detect similar images on the web to a local file const [result] = await client.webDetection(request); const webDetection = result.webDetection; webDetection.webEntities.forEach(entity => { console.log(`Score: ${entity.score}`); console.log(`Description: ${entity.description}`); }); // [END vision_web_detection_include_geo] } async function detectWebGeoGCS(bucketName, fileName) { // [START vision_web_detection_include_geo_gcs] // 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 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'; const request = { image: { source: { imageUri: `gs://${bucketName}/${fileName}`, }, }, imageContext: { webDetectionParams: { includeGeoResults: true, }, }, }; // Detect similar images on the web to a remote file const [result] = await client.webDetection(request); const webDetection = result.webDetection; webDetection.webEntities.forEach(entity => { console.log(`Score: ${entity.score}`); console.log(`Description: ${entity.description}`); }); // [END vision_web_detection_include_geo_gcs] } async function detectFulltext(fileName) { // [START vision_fulltext_detection] // 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'; // Read a local image as a text document const [result] = await client.documentTextDetection(fileName); const fullTextAnnotation = result.fullTextAnnotation; console.log(`Full text: ${fullTextAnnotation.text}`); fullTextAnnotation.pages.forEach(page => { page.blocks.forEach(block => { console.log(`Block confidence: ${block.confidence}`); block.paragraphs.forEach(paragraph => { console.log(`Paragraph confidence: ${paragraph.confidence}`); paragraph.words.forEach(word => { const wordText = word.symbols.map(s => s.text).join(''); console.log(`Word text: ${wordText}`); console.log(`Word confidence: ${word.confidence}`); word.symbols.forEach(symbol => { console.log(`Symbol text: ${symbol.text}`); console.log(`Symbol confidence: ${symbol.confidence}`); }); }); }); }); }); // [END vision_fulltext_detection] } async function detectFulltextGCS(bucketName, fileName) { // [START vision_fulltext_detection_gcs] // 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'; // Read a remote image as a text document const [result] = await client.documentTextDetection( `gs://${bucketName}/${fileName}` ); const fullTextAnnotation = result.fullTextAnnotation; console.log(fullTextAnnotation.text); // [END vision_fulltext_detection_gcs] } async function detectPdfText(bucketName, fileName, outputPrefix) { // [START vision_text_detection_pdf_gcs] // Imports the Google Cloud client libraries const vision = require('@google-cloud/vision').v1; // Creates a client const client = new vision.ImageAnnotatorClient(); /** * TODO(developer): Uncomment the following lines before running the sample. */ // Bucket where the file resides // const bucketName = 'my-bucket'; // Path to PDF file within bucket // const fileName = 'path/to/document.pdf'; // The folder to store the results // const outputPrefix = 'results' const gcsSourceUri = `gs://${bucketName}/${fileName}`; const gcsDestinationUri = `gs://${bucketName}/${outputPrefix}/`; const inputConfig = { // Supported mime_types are: 'application/pdf' and 'image/tiff' mimeType: 'application/pdf', gcsSource: { uri: gcsSourceUri, }, }; const outputConfig = { gcsDestination: { uri: gcsDestinationUri, }, }; const features = [{type: 'DOCUMENT_TEXT_DETECTION'}]; const request = { requests: [ { inputConfig: inputConfig, features: features, outputConfig: outputConfig, }, ], }; const [operation] = await client.asyncBatchAnnotateFiles(request); const [filesResponse] = await operation.promise(); const destinationUri = filesResponse.responses[0].outputConfig.gcsDestination.uri; console.log('Json saved to: ' + destinationUri); // [END vision_text_detection_pdf_gcs] } async function localizeObjects(fileName) { // [START vision_localize_objects] // Imports the Google Cloud client libraries const vision = require('@google-cloud/vision'); const fs = require('fs'); // Creates a client const client = new vision.ImageAnnotatorClient(); /** * TODO(developer): Uncomment the following line before running the sample. */ // const fileName = `/path/to/localImage.png`; const request = { image: {content: fs.readFileSync(fileName)}, }; const [result] = await client.objectLocalization(request); const objects = result.localizedObjectAnnotations; objects.forEach(object => { console.log(`Name: ${object.name}`); console.log(`Confidence: ${object.score}`); const vertices = object.boundingPoly.normalizedVertices; vertices.forEach(v => console.log(`x: ${v.x}, y:${v.y}`)); }); // [END vision_localize_objects] } async function localizeObjectsGCS(gcsUri) { // [START vision_localize_objects_gcs] // 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 line before running the sample. */ // const gcsUri = `gs://bucket/bucketImage.png`; const [result] = await client.objectLocalization(gcsUri); const objects = result.localizedObjectAnnotations; objects.forEach(object => { console.log(`Name: ${object.name}`); console.log(`Confidence: ${object.score}`); const veritices = object.boundingPoly.normalizedVertices; veritices.forEach(v => console.log(`x: ${v.x}, y:${v.y}`)); }); // [END vision_localize_objects_gcs] } require(`yargs`) // eslint-disable-line .demand(1) .command( 'faces <fileName>', 'Detects faces in a local image file.', {}, opts => detectFaces(opts.fileName) ) .command( 'faces-gcs <bucketName> <fileName>', 'Detects faces in an image in Google Cloud Storage.', {}, opts => detectFacesGCS(opts.bucketName, opts.fileName) ) .command( 'labels <fileName>', 'Detects labels in a local image file.', {}, opts => detectLabels(opts.fileName) ) .command( 'labels-gcs <bucketName> <fileName>', 'Detects labels in an image in Google Cloud Storage.', {}, opts => detectLabelsGCS(opts.bucketName, opts.fileName) ) .command( 'landmarks <fileName>', 'Detects landmarks in a local image file.', {}, opts => detectLandmarks(opts.fileName) ) .command( 'landmarks-gcs <bucketName> <fileName>', 'Detects landmarks in an image in Google Cloud Storage.', {}, opts => detectLandmarksGCS(opts.bucketName, opts.fileName) ) .command('text <fileName>', 'Detects text in a local image file.', {}, opts => detectText(opts.fileName) ) .command( 'text-gcs <bucketName> <fileName>', 'Detects text in an image in Google Cloud Storage.', {}, opts => detectTextGCS(opts.bucketName, opts.fileName) ) .command( 'logos <fileName>', 'Detects logos in a local image file.', {}, opts => detectLogos(opts.fileName) ) .command( 'logos-gcs <bucketName> <fileName>', 'Detects logos in an image in Google Cloud Storage.', {}, opts => detectLogosGCS(opts.bucketName, opts.fileName) ) .command( 'properties <fileName>', 'Detects image properties in a local image file.', {}, opts => detectProperties(opts.fileName) ) .command( 'properties-gcs <bucketName> <fileName>', 'Detects image properties in an image in Google Cloud Storage.', {}, opts => detectPropertiesGCS(opts.bucketName, opts.fileName) ) .command( 'safe-search <fileName>', 'Detects safe search properties in a local image file.', {}, opts => detectSafeSearch(opts.fileName) ) .command( 'safe-search-gcs <bucketName> <fileName>', 'Detects safe search properties in an image in Google Cloud Storage.', {}, opts => detectSafeSearchGCS(opts.bucketName, opts.fileName) ) .command( 'crops <fileName>', 'Detects crop hints in a local image file.', {}, opts => detectCropHints(opts.fileName) ) .command( 'crops-gcs <bucketName> <fileName>', 'Detects crop hints in an image in Google Cloud Storage.', {}, opts => detectCropHintsGCS(opts.bucketName, opts.fileName) ) .command( 'web <fileName>', 'Finds similar photos on the web for a local image file.', {}, opts => detectWeb(opts.fileName) ) .command( 'web-gcs <bucketName> <fileName>', 'Finds similar photos on the web for an image in Google Cloud Storage.', {}, opts => detectWebGCS(opts.bucketName, opts.fileName) ) .command( 'web-geo <fileName>', 'Detects web entities with improved results using geographic metadata', {}, opts => detectWebGeo(opts.fileName) ) .command( 'web-geo-gcs <bucketName> <fileName>', 'Detects web entities with improved results using geographic metadata', {}, opts => detectWebGeoGCS(opts.bucketName, opts.fileName) ) .command( 'fulltext <fileName>', 'Extracts full text from a local image file.', {}, opts => detectFulltext(opts.fileName) ) .command( 'fulltext-gcs <bucketName> <fileName>', 'Extracts full text from an image in Google Cloud Storage.', {}, opts => detectFulltextGCS(opts.bucketName, opts.fileName) ) .command( 'pdf <bucketName> <fileName> <outputPrefix>', 'Extracts full text from a pdf file', {}, opts => detectPdfText(opts.bucketName, opts.fileName, opts.outputPrefix) ) .command( 'localize-objects <fileName>', 'Detects Objects in a local image file', {}, opts => localizeObjects(opts.fileName) ) .command( 'localize-objects-gcs <gcsUri>', 'Detects Objects Google Cloud Storage Bucket', {}, opts => localizeObjectsGCS(opts.gcsUri) ) .example('node $0 faces ./resources/face_no_surprise.jpg') .example('node $0 faces-gcs my-bucket your-image.jpg') .example('node $0 labels ./resources/wakeupcat.jpg') .example('node $0 labels-gcs my-bucket your-image.jpg') .example('node $0 landmarks ./resources/landmark.jpg') .example('node $0 landmarks-gcs my-bucket your-image.jpg') .example('node $0 text ./resources/wakeupcat.jpg') .example('node $0 text-gcs my-bucket your-image.jpg') .example('node $0 logos ./resources/logos.png') .example('node $0 logos-gcs my-bucket your-image.jpg.png') .example('node $0 properties ./resources/landmark.jpg') .example('node $0 properties-gcs my-bucket your-image.jpg') .example('node $0 safe-search ./resources/wakeupcat.jpg') .example('node $0 safe-search-gcs my-bucket your-image.jpg') .example('node $0 crops ./resources/wakeupcat.jpg') .example('node $0 crops-gcs my-bucket your-image.jpg') .example('node $0 web ./resources/wakeupcat.jpg') .example('node $0 web-gcs my-bucket your-image.jpg') .example('node $0 web-geo ./resources/city.jpg') .example('node $0 web-geo-gcs my-bucket your-image.jpg') .example('node $0 fulltext ./resources/wakeupcat.jpg') .example('node $0 fulltext-gcs my-bucket your-image.jpg') .example('node $0 pdf my-bucket my-pdf.pdf results') .example('node $0 localize-objects ./resources/duck_and_truck.jpg') .example('node $0 localize-objects-gcs gs://bucket/bucketImage.png') .wrap(120) .recommendCommands() .epilogue('For more information, see https://cloud.google.com/vision/docs') .help() .strict().argv;