diff --git a/video/cloud-client/faces/README.md b/video/cloud-client/faces/README.md new file mode 100644 index 000000000000..de8d4f319466 --- /dev/null +++ b/video/cloud-client/faces/README.md @@ -0,0 +1,29 @@ +# Google Cloud Video Intelligence + +Demonstrates face detection using the Google Cloud Video Intelligence API. + +## Setup +Please follow the [Set Up Your Project](https://cloud.google.com/video-intelligence/docs/getting-started#set_up_your_project) +steps in the Quickstart doc to create a project and enable the Google Cloud +Video Intelligence API. Following those steps, make sure that you +[Set Up a Service Account](https://cloud.google.com/video-intelligence/docs/common/auth#set_up_a_service_account), +and export the following environment variable: + +``` +export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your-project-credentials.json +``` + +## Run the sample + +Install [pip](https://pip.pypa.io/en/stable/installing) if not already installed. + +Install the necessary libraries using pip: + +```sh +$ pip install -r requirements.txt +``` + +Run the sample, for example: +``` +python faces.py gs://cloudmleap/video/googlework.mp4 +``` diff --git a/video/cloud-client/faces/faces.py b/video/cloud-client/faces/faces.py new file mode 100644 index 000000000000..3b52e2270190 --- /dev/null +++ b/video/cloud-client/faces/faces.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +# Copyright 2017 Google Inc. All Rights Reserved. +# +# 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. + +"""This application demonstrates how to perform shot change detection with the +Google Cloud Video Intelligence API. + +For more information, check out the documentation at +https://cloud.google.com/videointelligence/docs. +""" + +# [START full_tutorial] +# [START imports] +import argparse +import sys +import time + +from google.cloud.gapic.videointelligence.v1beta1 import enums +from google.cloud.gapic.videointelligence.v1beta1 import ( + video_intelligence_service_client) +# [END imports] + + +def analyze_faces(path): + # [START construct_request] + """ Detects faces given a GCS path. """ + video_client = (video_intelligence_service_client. + VideoIntelligenceServiceClient()) + features = [enums.Feature.FACE_DETECTION] + operation = video_client.annotate_video(path, features) + # [END construct_request] + print('\nProcessing video for face annotations:') + + # [START check_operation] + while not operation.done(): + sys.stdout.write('.') + sys.stdout.flush() + time.sleep(20) + + print('\nFinished processing.') + # [END check_operation] + + # [START parse_response] + # first result is retrieved because a single video was processed + face_annotations = (operation.result().annotation_results[0]. + face_annotations) + + for face_id, face in enumerate(face_annotations): + print('Thumbnail size: {}'.format(len(face.thumbnail))) + + for segment_id, segment in enumerate(face.segments): + print('Track {}: {} to {}'.format( + segment_id, + segment.start_time_offset, + segment.end_time_offset)) + # [END parse_response] + + +if __name__ == '__main__': + # [START running_app] + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument('path', help='GCS file path for face detection.') + args = parser.parse_args() + + analyze_faces(args.path) + # [END running_app] +# [END full_tutorial] diff --git a/video/cloud-client/faces/faces_test.py b/video/cloud-client/faces/faces_test.py new file mode 100644 index 000000000000..5eb4075dedb3 --- /dev/null +++ b/video/cloud-client/faces/faces_test.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +# Copyright 2017 Google, Inc +# +# 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. + +import os + +import pytest + +import faces + +BUCKET = os.environ['CLOUD_STORAGE_BUCKET'] +FACES_FILE_PATH = '/video/googlework.mp4' + + +@pytest.mark.slow +def test_work_video_faces(capsys): + faces.analyze_faces( + 'gs://{}{}'.format(BUCKET, FACES_FILE_PATH)) + out, _ = capsys.readouterr() + assert 'Thumbnail' in out diff --git a/video/cloud-client/faces/requirements.txt b/video/cloud-client/faces/requirements.txt new file mode 100644 index 000000000000..ba92ac973b77 --- /dev/null +++ b/video/cloud-client/faces/requirements.txt @@ -0,0 +1 @@ +https://storage.googleapis.com/videointelligence-alpha/videointelligence-python.zip diff --git a/video/cloud-client/shotchange/README.md b/video/cloud-client/shotchange/README.md index 1b510a0fd7de..4b338fa1f576 100644 --- a/video/cloud-client/shotchange/README.md +++ b/video/cloud-client/shotchange/README.md @@ -1,6 +1,6 @@ # Google Cloud Video Intelligence -Demonstrates label detection using the Google Cloud Video Intelligence API. +Demonstrates shot change detection using the Google Cloud Video Intelligence API. ## Setup Please follow the [Set Up Your Project](https://cloud.google.com/video-intelligence/docs/getting-started#set_up_your_project) diff --git a/video/cloud-client/shotchange/shotchange.py b/video/cloud-client/shotchange/shotchange.py index d6ecc88c0b00..a5ec65192d60 100644 --- a/video/cloud-client/shotchange/shotchange.py +++ b/video/cloud-client/shotchange/shotchange.py @@ -68,7 +68,7 @@ def analyze_shots(path): parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument('path', help='GCS file path for label detection.') + parser.add_argument('path', help='GCS path for shot change detection.') args = parser.parse_args() analyze_shots(args.path)