diff --git a/video-intelligence/analyze-streaming-automl-classification.js b/video-intelligence/analyze-streaming-automl-classification.js new file mode 100644 index 0000000000..11babf35ea --- /dev/null +++ b/video-intelligence/analyze-streaming-automl-classification.js @@ -0,0 +1,95 @@ +/** + * 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', + projectId = 'YOUR_GCP_PROJECT', + modelId = 'YOUR_AUTOML_MODELID' +) { + // [START video_streaming_automl_classification_beta] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const path = 'Local file to analyze, e.g. ./my-file.mp4'; + // const modelId = 'autoMl model' + // const projectId = 'Your GCP Project' + + const { + StreamingVideoIntelligenceServiceClient, + } = require('@google-cloud/video-intelligence').v1p3beta1; + const fs = require('fs'); + + // Instantiates a client + const client = new StreamingVideoIntelligenceServiceClient(); + + // Streaming configuration + const modelPath = `projects/${projectId}/locations/us-central1/models/${modelId}`; + const configRequest = { + videoConfig: { + feature: 'STREAMING_AUTOML_CLASSIFICATION', + automlClassificationConfig: { + modelName: modelPath, + }, + }, + }; + + const readStream = fs.createReadStream(path, { + highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB) + encoding: 'base64', + }); + //Load file content + // Note: Input videos must have supported video codecs. See + // https://cloud.google.com/video-intelligence/docs/streaming/streaming#supported_video_codecs + // for more details. + 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}`); + }); + }) + .on('error', response => { + console.error(response); + }); + // [END video_streaming_automl_classification_beta] +} +main(...process.argv.slice(2)).catch(console.error()); diff --git a/video-intelligence/analyze-streaming-labels.js b/video-intelligence/analyze-streaming-labels.js index 50c3cc4ee2..2dc320a9d5 100644 --- a/video-intelligence/analyze-streaming-labels.js +++ b/video-intelligence/analyze-streaming-labels.js @@ -1,5 +1,5 @@ /** - * Copyright 2019, Google, LLC + * 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 diff --git a/video-intelligence/resources/googlework_short.mp4 b/video-intelligence/resources/googlework_short.mp4 index be0f40f8ad..30af418a6c 100644 Binary files a/video-intelligence/resources/googlework_short.mp4 and b/video-intelligence/resources/googlework_short.mp4 differ diff --git a/video-intelligence/system-test/analyze-streaming-annotation-to-storage.test.js b/video-intelligence/system-test/analyze-streaming-annotation-to-storage.test.js index f422f969f9..b79b94154c 100644 --- a/video-intelligence/system-test/analyze-streaming-annotation-to-storage.test.js +++ b/video-intelligence/system-test/analyze-streaming-annotation-to-storage.test.js @@ -1,5 +1,5 @@ /** - * Copyright 2019, Google, LLC. + * 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 @@ -20,7 +20,7 @@ const {assert} = require('chai'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cmd = `node analyze-streaming-annotation-to-storage.js`; -const project = process.env.GLCOUD_PROJECT; +const project = process.env.GCLOUD_PROJECT; const file = 'resources/cat.mp4'; const outputUri = 'gs://' + project + '/VIDEO_STREAMING_OUTPUT'; diff --git a/video-intelligence/system-test/analyze-streaming-automl-classification.test.js b/video-intelligence/system-test/analyze-streaming-automl-classification.test.js new file mode 100644 index 0000000000..b717518627 --- /dev/null +++ b/video-intelligence/system-test/analyze-streaming-automl-classification.test.js @@ -0,0 +1,35 @@ +/** + * 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'; + +const cp = require('child_process'); +const {assert} = require('chai'); + +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); + +const cmd = `node analyze-streaming-automl-classification.js`; +const modelId = `VCN3094808572840640512`; +const project = process.env.GCLOUD_PROJECT; +const file = 'resources/cat.mp4'; + +describe('streaming automl classification', () => { + it('should classify the action in the streaming video', async () => { + const output = execSync(`${cmd} ${file} ${project} ${modelId}`); + assert.match(output, /brush_hair/); + assert.match(output, /cartwheel/); + assert.match(output, /Confidence: \d+\.\d+/); + }); +});