Skip to content
This repository was archived by the owner on Jul 20, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 57 additions & 40 deletions samples/async-batch-annotate-images.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));
116 changes: 71 additions & 45 deletions samples/batch-annotate-files-gcs.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));
113 changes: 70 additions & 43 deletions samples/batch-annotate-files.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));