From 5ddbab9ab7ac035a3a4fcb3c4033f6bca59e2feb Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Wed, 11 Mar 2020 09:18:10 -0600 Subject: [PATCH] docs: update beta samples to v1 and style (#553) --- samples/async-batch-annotate-images.js | 97 ++++++++++++--------- samples/batch-annotate-files-gcs.js | 116 +++++++++++++++---------- samples/batch-annotate-files.js | 113 +++++++++++++++--------- 3 files changed, 198 insertions(+), 128 deletions(-) diff --git a/samples/async-batch-annotate-images.js b/samples/async-batch-annotate-images.js index 244a73b8..e204b175 100644 --- a/samples/async-batch-annotate-images.js +++ b/samples/async-batch-annotate-images.js @@ -14,55 +14,72 @@ 'use strict'; -async function main(inputImageUri, outputUri) { - // [START vision_async_batch_annotate_images_beta] +function main( + inputImageUri = 'gs://cloud-samples-data/vision/label/wakeupcat.jpg', + outputUri = 'gs://YOUR_BUCKET_ID/path/to/save/results/' +) { + // [START vision_async_batch_annotate_images] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const inputImageUri = 'gs://cloud-samples-data/vision/label/wakeupcat.jpg'; + // const outputUri = 'gs://YOUR_BUCKET_ID/path/to/save/results/'; // Imports the Google Cloud client libraries - const {ImageAnnotatorClient} = require('@google-cloud/vision').v1p4beta1; + const {ImageAnnotatorClient} = require('@google-cloud/vision').v1; - // Creates a client + // Instantiates a client const client = new ImageAnnotatorClient(); - /** - * TODO(developer): Uncomment the following lines before running the sample. - */ - // GCS path where the image resides - // const inputImageUri = 'gs://my-bucket/my_image.jpg'; - // GCS path where to store the output json - // const outputUri = 'gs://mybucket/out/' - - const features = [ - {type: 'DOCUMENT_LABEL_DETECTION'}, - {type: 'DOCUMENT_TEXT_DETECTION'}, - {type: 'DOCUMENT_IMAGE_DETECTION'}, - ]; - - const outputConfig = { - gcsDestination: { - uri: outputUri, - }, - }; + // You can send multiple images to be annotated, this sample demonstrates how to do this with + // one image. If you want to use multiple images, you have to create a request object for each image that you want annotated. + async function asyncBatchAnnotateImages() { + // Set the type of annotation you want to perform on the image + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#google.cloud.vision.v1.Feature.Type + const features = [ + {type: 'LABEL_DETECTION'}, + ]; - const request = { - requests: [ - { - image: { - source: { - imageUri: inputImageUri, - }, + // Build the image request object for that one image. Note: for additional images you have to create + // additional image request objects and store them in a list to be used below. + const imageRequest = { + image: { + source: { + imageUri: inputImageUri, }, - features: features, }, - ], - outputConfig, - }; + features: features, + } + + // Set where to store the results for the images that will be annotated. + const outputConfig = { + gcsDestination: { + uri: outputUri, + }, + batchSize: 2, // The max number of responses to output in each JSON file + }; + + // Add each image request object to the batch request and add the output config. + const request = { + requests: [ + imageRequest, // add additional request objects here + ], + outputConfig, + }; + + // Make the asynchronous batch request. + const [operation] = await client.asyncBatchAnnotateImages(request); + + // Wait for the operation to complete + const [filesResponse] = await operation.promise(); - const [operation] = await client.asyncBatchAnnotateImages(request); - const [filesResponse] = await operation.promise(); + // The output is written to GCS with the provided output_uri as prefix + const destinationUri = filesResponse.outputConfig.gcsDestination.uri; + console.log(`Output written to GCS with prefix: ${destinationUri}`); + } - const destinationUri = filesResponse.outputConfig.gcsDestination.uri; - console.log(`Json saved to: ${destinationUri}`); - // [END vision_async_batch_annotate_images_beta] + asyncBatchAnnotateImages(); + // [END vision_async_batch_annotate_images] } -main(...process.argv.slice(2)).catch(console.error); +main(...process.argv.slice(2)); diff --git a/samples/batch-annotate-files-gcs.js b/samples/batch-annotate-files-gcs.js index 5dd05e44..3ccc3b8e 100644 --- a/samples/batch-annotate-files-gcs.js +++ b/samples/batch-annotate-files-gcs.js @@ -14,66 +14,92 @@ 'use strict'; -async function main(gcsSourceUri) { - // [START vision_batch_annotate_files_gcs_beta] +function main( + gcsSourceUri = 'gs://cloud-samples-data/vision/document_understanding/kafka.pdf' +) { + // [START vision_batch_annotate_files_gcs] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const gcsSourceUri = 'gs://cloud-samples-data/vision/document_understanding/kafka.pdf'; + // Imports the Google Cloud client libraries - const {ImageAnnotatorClient} = require('@google-cloud/vision').v1p4beta1; + const {ImageAnnotatorClient} = require('@google-cloud/vision').v1; - // Creates a client + // Instantiates a client const client = new ImageAnnotatorClient(); - /** - * TODO(developer): Uncomment the following line before running the sample. - */ - // GCS path where the pdf file resides - // const gcsSourceUri = 'gs://my-bucket/my_pdf.pdf'; - - const inputConfig = { - // Supported mime_types are: 'application/pdf' and 'image/tiff' - mimeType: 'application/pdf', - gcsSource: { - uri: gcsSourceUri, - }, - }; - const features = [{type: 'DOCUMENT_TEXT_DETECTION'}]; - const request = { - requests: [ - { - inputConfig: inputConfig, - features: features, - // Annotate the first two pages and the last one (max 5 pages) - // First page starts at 1, and not 0. Last page is -1. - pages: [1, 2, -1], + // You can send multiple files to be annotated, this sample demonstrates how to do this with + // one file. If you want to use multiple files, you have to create a request object for each file that you want annotated. + async function batchAnnotateFiles() { + // First Specify the input config with the file's uri and its type. + // Supported mime_type: application/pdf, image/tiff, image/gif + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#inputconfig + const inputConfig = { + mimeType: 'application/pdf', + gcsSource: { + uri: gcsSourceUri, }, - ], - }; + }; - const [result] = await client.batchAnnotateFiles(request); - const responses = result.responses[0].responses; + // Set the type of annotation you want to perform on the file + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#google.cloud.vision.v1.Feature.Type + const features = [{type: 'DOCUMENT_TEXT_DETECTION'}]; - for (const response of responses) { - for (const page of response.fullTextAnnotation.pages) { - for (const block of page.blocks) { - console.log(`Block confidence: ${block.confidence}`); - for (const paragraph of block.paragraphs) { - console.log(` Paragraph confidence: ${paragraph.confidence}`); - for (const word of paragraph.words) { - const symbol_texts = word.symbols.map(symbol => symbol.text); - const word_text = symbol_texts.join(''); - console.log( - ` Word text: ${word_text} (confidence: ${word.confidence})` - ); - for (const symbol of word.symbols) { + // Build the request object for that one file. Note: for additional files you have to create + // additional file request objects and store them in a list to be used below. + // Since we are sending a file of type `application/pdf`, we can use the `pages` field to + // specify which pages to process. The service can process up to 5 pages per document file. + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#google.cloud.vision.v1.AnnotateFileRequest + const fileRequest = { + inputConfig: inputConfig, + features: features, + // Annotate the first two pages and the last one (max 5 pages) + // First page starts at 1, and not 0. Last page is -1. + pages: [1, 2, -1], + }; + + // Add each `AnnotateFileRequest` object to the batch request. + const request = { + requests: [ + fileRequest, + ], + }; + + // Make the synchronous batch request. + const [result] = await client.batchAnnotateFiles(request); + + // Process the results, just get the first result, since only one file was sent in this + // sample. + const responses = result.responses[0].responses; + + for (const response of responses) { + console.log(`Full text: ${response.fullTextAnnotation.text}`) + for (const page of response.fullTextAnnotation.pages) { + for (const block of page.blocks) { + console.log(`Block confidence: ${block.confidence}`); + for (const paragraph of block.paragraphs) { + console.log(` Paragraph confidence: ${paragraph.confidence}`); + for (const word of paragraph.words) { + const symbol_texts = word.symbols.map(symbol => symbol.text); + const word_text = symbol_texts.join(''); console.log( - ` Symbol: ${symbol.text} (confidence: ${symbol.confidence})` + ` Word text: ${word_text} (confidence: ${word.confidence})` ); + for (const symbol of word.symbols) { + console.log( + ` Symbol: ${symbol.text} (confidence: ${symbol.confidence})` + ); + } } } } } } } - // [END vision_batch_annotate_files_gcs_beta] + + batchAnnotateFiles(); + // [END vision_batch_annotate_files_gcs] } main(...process.argv.slice(2)); diff --git a/samples/batch-annotate-files.js b/samples/batch-annotate-files.js index 82af94e4..8826d781 100644 --- a/samples/batch-annotate-files.js +++ b/samples/batch-annotate-files.js @@ -14,66 +14,93 @@ 'use strict'; -async function main(fileName) { - // [START vision_batch_annotate_files_beta] +function main( + fileName = 'path/to/your/file.pdf' +) { + // [START vision_batch_annotate_files] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const fileName = 'path/to/your/file.pdf'; + // Imports the Google Cloud client libraries - const {ImageAnnotatorClient} = require('@google-cloud/vision').v1p4beta1; + const {ImageAnnotatorClient} = require('@google-cloud/vision').v1; const fs = require('fs'); const {promisify} = require('util'); const readFileAsync = promisify(fs.readFile); - // Creates a client + // Instantiates a client const client = new ImageAnnotatorClient(); - /** - * TODO(developer): Uncomment the following line before running the sample. - */ - // const fileName = `/path/to/localDocument.pdf`; + // You can send multiple files to be annotated, this sample demonstrates how to do this with + // one file. If you want to use multiple files, you have to create a request object for each file that you want annotated. + async function batchAnnotateFiles() { + // First Specify the input config with the file's path and its type. + // Supported mime_type: application/pdf, image/tiff, image/gif + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#inputconfig + const inputConfig = { + mimeType: 'application/pdf', + content: await readFileAsync(fileName), + }; - const inputConfig = { - // Other supported mime_types: image/tiff' or 'image/gif' - mimeType: 'application/pdf', - content: await readFileAsync(fileName), - }; - const features = [{type: 'DOCUMENT_TEXT_DETECTION'}]; - const request = { - requests: [ - { - inputConfig, - features: features, - // Annotate the first two pages and the last one (max 5 pages) - // First page starts at 1, and not 0. Last page is -1. - pages: [1, 2, -1], - }, - ], - }; + // Set the type of annotation you want to perform on the file + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#google.cloud.vision.v1.Feature.Type + const features = [{type: 'DOCUMENT_TEXT_DETECTION'}]; - const [result] = await client.batchAnnotateFiles(request); - const responses = result.responses[0].responses; + // Build the request object for that one file. Note: for additional files you have to create + // additional file request objects and store them in a list to be used below. + // Since we are sending a file of type `application/pdf`, we can use the `pages` field to + // specify which pages to process. The service can process up to 5 pages per document file. + // https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1#google.cloud.vision.v1.AnnotateFileRequest + const fileRequest = { + inputConfig: inputConfig, + features: features, + // Annotate the first two pages and the last one (max 5 pages) + // First page starts at 1, and not 0. Last page is -1. + pages: [1, 2, -1], + }; - for (const response of responses) { - for (const page of response.fullTextAnnotation.pages) { - for (const block of page.blocks) { - console.log(`Block confidence: ${block.confidence}`); - for (const paragraph of block.paragraphs) { - console.log(` Paragraph confidence: ${paragraph.confidence}`); - for (const word of paragraph.words) { - const symbol_texts = word.symbols.map(symbol => symbol.text); - const word_text = symbol_texts.join(''); - console.log( - ` Word text: ${word_text} (confidence: ${word.confidence})` - ); - for (const symbol of word.symbols) { + // Add each `AnnotateFileRequest` object to the batch request. + const request = { + requests: [ + fileRequest, + ], + }; + + // Make the synchronous batch request. + const [result] = await client.batchAnnotateFiles(request); + + // Process the results, just get the first result, since only one file was sent in this + // sample. + const responses = result.responses[0].responses; + + for (const response of responses) { + console.log(`Full text: ${response.fullTextAnnotation.text}`) + for (const page of response.fullTextAnnotation.pages) { + for (const block of page.blocks) { + console.log(`Block confidence: ${block.confidence}`); + for (const paragraph of block.paragraphs) { + console.log(` Paragraph confidence: ${paragraph.confidence}`); + for (const word of paragraph.words) { + const symbol_texts = word.symbols.map(symbol => symbol.text); + const word_text = symbol_texts.join(''); console.log( - ` Symbol: ${symbol.text} (confidence: ${symbol.confidence})` + ` Word text: ${word_text} (confidence: ${word.confidence})` ); + for (const symbol of word.symbols) { + console.log( + ` Symbol: ${symbol.text} (confidence: ${symbol.confidence})` + ); + } } } } } } } - // [END vision_batch_annotate_files_beta] + + batchAnnotateFiles(); + // [END vision_batch_annotate_files] } -main(...process.argv.slice(2)).catch(console.error); +main(...process.argv.slice(2));