Skip to content

Commit

Permalink
docs(samples): streaming beta samples (#210)
Browse files Browse the repository at this point in the history
  • Loading branch information
nirupa-kumar authored and Ace Nassri committed Nov 17, 2022
1 parent b7ecd47 commit 96cba21
Show file tree
Hide file tree
Showing 10 changed files with 551 additions and 0 deletions.
74 changes: 74 additions & 0 deletions video-intelligence/analyze-streaming-annotation-to-storage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/**
* Copyright 2019, 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 main(path = 'YOUR_LOCAL_FILE', outputUri = 'PATH_TO_OUTPUT') {
// [START video_streaming_annotation_to_storage_beta]
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const path = 'Local file to analyze, e.g. ./my-file.mp4';
// const outputUri = 'Path to output, e.g. gs://path_to_output';

const {
StreamingVideoIntelligenceServiceClient,
} = require('@google-cloud/video-intelligence').v1p3beta1;
const fs = require('fs');

// Instantiates a client
const client = new StreamingVideoIntelligenceServiceClient();
// Streaming configuration
const configRequest = {
videoConfig: {
feature: 'STREAMING_LABEL_DETECTION',
storageConfig: {
enableStorageAnnotationResult: true,
annotationResultStorageDirectory: outputUri,
},
},
};
const readStream = fs.createReadStream(path, {
highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB)
encoding: 'base64',
});
//Load file content
const chunks = [];
readStream
.on('data', chunk => {
const request = {
inputContent: chunk.toString(),
};
chunks.push(request);
})
.on('close', function() {
// configRequest should be the first in the stream of requests
stream.write(configRequest);
for (let i = 0; i < chunks.length; i++) {
stream.write(chunks[i]);
}
stream.end();
});

const stream = client.streamingAnnotateVideo().on('data', response => {
//Gets annotations for video
console.log(
`The annotation is stored at: ${response.annotationResultsUri} `
);
});
// [END video_streaming_annotation_to_storage_beta]
}

main(...process.argv.slice(2)).catch(console.error());
73 changes: 73 additions & 0 deletions video-intelligence/analyze-streaming-labels.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Copyright 2019, 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 main(path = 'YOUR_LOCAL_FILE') {
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const path = 'Local file to analyze, e.g. ./my-file.mp4';
const {
StreamingVideoIntelligenceServiceClient,
} = require('@google-cloud/video-intelligence').v1p3beta1;
const fs = require('fs');

// Instantiates a client
const client = new StreamingVideoIntelligenceServiceClient();
// Streaming configuration
const configRequest = {
videoConfig: {
feature: 'STREAMING_LABEL_DETECTION',
},
};
const readStream = fs.createReadStream(path, {
highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB)
encoding: 'base64',
});
//Load file content
const chunks = [];
readStream
.on('data', chunk => {
const request = {
inputContent: chunk.toString(),
};
chunks.push(request);
})
.on('close', function() {
// configRequest should be the first in the stream of requests
stream.write(configRequest);
for (let i = 0; i < chunks.length; i++) {
stream.write(chunks[i]);
}
stream.end();
});

const stream = client.streamingAnnotateVideo().on('data', response => {
//Gets annotations for video
const annotations = response.annotationResults;
const labels = annotations.labelAnnotations;
labels.forEach(label => {
console.log(
`Label ${label.entity.description} occurs at: ${label.frames[0]
.timeOffset.seconds || 0}` +
`.${(label.frames[0].timeOffset.nanos / 1e6).toFixed(0)}s`
);
console.log(` Confidence: ${label.frames[0].confidence}`);
});
});
// [END video_streaming_label_detection_beta]
}
main(...process.argv.slice(2)).catch(console.error());
83 changes: 83 additions & 0 deletions video-intelligence/analyze-streaming-object.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/**
* Copyright 2019, 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 main(path = 'YOUR_LOCAL_FILE') {
// [START video_streaming_object_tracking_beta]
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const path = 'Local file to analyze, e.g. ./my-file.mp4';
const {
StreamingVideoIntelligenceServiceClient,
} = require('@google-cloud/video-intelligence').v1p3beta1;
const fs = require('fs');

// Instantiates a client
const client = new StreamingVideoIntelligenceServiceClient();
// Streaming configuration
const configRequest = {
videoConfig: {
feature: 'STREAMING_OBJECT_TRACKING',
},
};
const readStream = fs.createReadStream(path, {
highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB)
encoding: 'base64',
});
//Load file content
const chunks = [];
readStream
.on('data', chunk => {
const request = {
inputContent: chunk.toString(),
};
chunks.push(request);
})
.on('close', function() {
// configRequest should be the first in the stream of requests
stream.write(configRequest);
for (let i = 0; i < chunks.length; i++) {
stream.write(chunks[i]);
}
stream.end();
});

const stream = client.streamingAnnotateVideo().on('data', response => {
//Gets annotations for video
const annotations = response.annotationResults;
const objects = annotations.objectAnnotations;
objects.forEach(object => {
console.log(`Entity description: ${object.entity.description}`);
console.log(`Entity id: ${object.entity.entityId}`);
console.log(`Track id: ${object.trackId}`);
console.log(`Confidence: ${object.confidence}`);
console.log(
`Time offset for the frame: ${object.frames[0].timeOffset.seconds ||
0}` + `.${(object.frames[0].timeOffset.nanos / 1e6).toFixed(0)}s`
);
//Every annotation has only one frame.
const box = object.frames[0].normalizedBoundingBox;
console.log(`Bounding box position:`);
console.log(` left :${box.left}`);
console.log(` top :${box.top}`);
console.log(` right :${box.right}`);
console.log(` bottom:${box.bottom}`);
});
});
// [END video_streaming_object_tracking_beta]
}
main(...process.argv.slice(2)).catch(console.error());
74 changes: 74 additions & 0 deletions video-intelligence/analyze-streaming-safe-search.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/**
* Copyright 2019, 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 main(path = 'YOUR_LOCAL_FILE') {
// [START video_streaming_explicit_content_detection_beta]
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const path = 'Local file to analyze, e.g. ./my-file.mp4';
const {
StreamingVideoIntelligenceServiceClient,
} = require('@google-cloud/video-intelligence').v1p3beta1;
const fs = require('fs');

// Instantiates a client
const client = new StreamingVideoIntelligenceServiceClient();
// Streaming configuration
const configRequest = {
videoConfig: {
feature: 'STREAMING_EXPLICIT_CONTENT_DETECTION',
},
};

const readStream = fs.createReadStream(path, {
highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB)
encoding: 'base64',
});
//Load file content
const chunks = [];
readStream
.on('data', chunk => {
const request = {
inputContent: chunk.toString(),
};
chunks.push(request);
})
.on('close', function() {
// configRequest should be the first in the stream of requests
stream.write(configRequest);
for (let i = 0; i < chunks.length; i++) {
stream.write(chunks[i]);
}
stream.end();
});

const stream = client.streamingAnnotateVideo().on('data', response => {
//Gets annotations for video
const annotations = response.annotationResults;
const explicitContentResults = annotations.explicitAnnotation.frames;
explicitContentResults.forEach(result => {
console.log(
`Time: ${result.timeOffset.seconds || 0}` +
`.${(result.timeOffset.nanos / 1e6).toFixed(0)}s`
);
console.log(` Pornography likelihood: ${result.pornographyLikelihood}`);
});
});
// [END video_streaming_explicit_content_detection_beta]
}
main(...process.argv.slice(2)).catch(console.error());
78 changes: 78 additions & 0 deletions video-intelligence/analyze-streaming-shot-change.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/**
* Copyright 2019, 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 main(path = 'YOUR_LOCAL_FILE') {
// [START video_streaming_shot_change_detection_beta]
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const path = 'Local file to analyze, e.g. ./my-file.mp4';
const {
StreamingVideoIntelligenceServiceClient,
} = require('@google-cloud/video-intelligence').v1p3beta1;
const fs = require('fs');

// Instantiates a client
const client = new StreamingVideoIntelligenceServiceClient();
// Streaming configuration
const configRequest = {
videoConfig: {
feature: 'STREAMING_SHOT_CHANGE_DETECTION',
},
};
const readStream = fs.createReadStream(path, {
highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB)
encoding: 'base64',
});
//Load file content
const chunks = [];
readStream
.on('data', chunk => {
const request = {
inputContent: chunk.toString(),
};
chunks.push(request);
})
.on('close', function() {
// configRequest should be the first in the stream of requests
stream.write(configRequest);
for (let i = 0; i < chunks.length; i++) {
stream.write(chunks[i]);
}
stream.end();
});

const stream = client.streamingAnnotateVideo().on('data', response => {
//Gets annotations for video
const annotations = response.annotationResults;
const shotChanges = annotations.shotAnnotations;
console.log(JSON.stringify(shotChanges));
if (shotChanges.length === 1) {
console.log(`The entire video is one shot.`);
}
shotChanges.forEach(shot => {
console.log(
` Shot: ${shot.startTimeOffset.seconds || 0}` +
`.${(shot.startTimeOffset.nanos / 1e6).toFixed(0)}s to ${shot
.endTimeOffset.seconds || 0}` +
`.${(shot.endTimeOffset.nanos / 1e6).toFixed(0)}s`
);
});
});
// [END video_streaming_shot_change_detection_beta]
}
main(...process.argv.slice(2)).catch(console.error());
Loading

0 comments on commit 96cba21

Please sign in to comment.