Skip to content

Commit

Permalink
Adds tutorials using Cloud Client (#930)
Browse files Browse the repository at this point in the history
* Adds tutorials.

* Removes unused enumerate
  • Loading branch information
gguuss authored and Jon Wayne Parrott committed May 5, 2017
1 parent 10b9a90 commit 29b0060
Show file tree
Hide file tree
Showing 12 changed files with 281 additions and 1 deletion.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def analyze_labels(path):
# first result is retrieved because a single video was processed
results = operation.result().annotation_results[0]

for i, label in enumerate(results.label_annotations):
for label in results.label_annotations:
print('Label description: {}'.format(label.description))
print('Locations:')

Expand Down
File renamed without changes.
File renamed without changes.
29 changes: 29 additions & 0 deletions video/cloud-client/labels/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Google Cloud Video Intelligence

Demonstrates label 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 labels.py gs://cloud-ml-sandbox/video/chicago.mp4
```
80 changes: 80 additions & 0 deletions video/cloud-client/labels/labels.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/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 basic operations 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_labels(path):
""" Detects labels given a GCS path. """
# [START construct_request]
video_client = (video_intelligence_service_client.
VideoIntelligenceServiceClient())
features = [enums.Feature.LABEL_DETECTION]
operation = video_client.annotate_video(path, features)
# [END construct_request]
print('\nProcessing video for label 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]
results = operation.result().annotation_results[0]

for label in results.label_annotations:
print('Label description: {}'.format(label.description))
print('Locations:')

for l, location in enumerate(label.locations):
print('\t{}: {} to {}'.format(
l,
location.segment.start_time_offset,
location.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 label detection.')
args = parser.parse_args()

analyze_labels(args.path)
# [END running_app]
# [END full_tutorial]
32 changes: 32 additions & 0 deletions video/cloud-client/labels/labels_test.py
Original file line number Diff line number Diff line change
@@ -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 labels

BUCKET = os.environ['CLOUD_STORAGE_BUCKET']
LABELS_FILE_PATH = '/video/cat.mp4'


@pytest.mark.slow
def test_feline_video_labels(capsys):
labels.analyze_labels(
'gs://{}{}'.format(BUCKET, LABELS_FILE_PATH))
out, _ = capsys.readouterr()
assert 'Whiskers' in out
1 change: 1 addition & 0 deletions video/cloud-client/labels/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://storage.googleapis.com/videointelligence-alpha/videointelligence-python.zip
29 changes: 29 additions & 0 deletions video/cloud-client/shotchange/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Google Cloud Video Intelligence

Demonstrates label 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 shotchange.py gs://cloudmleap/video/googlework.mp4
```
1 change: 1 addition & 0 deletions video/cloud-client/shotchange/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://storage.googleapis.com/videointelligence-alpha/videointelligence-python.zip
76 changes: 76 additions & 0 deletions video/cloud-client/shotchange/shotchange.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/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 basic operations 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_shots(path):
""" Detects camera shot changes. """
# [START construct_request]
video_client = (video_intelligence_service_client.
VideoIntelligenceServiceClient())
features = [enums.Feature.SHOT_CHANGE_DETECTION]
operation = video_client.annotate_video(path, features)
# [END construct_request]
print('\nProcessing video for shot change 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]
shots = operation.result().annotation_results[0]

for note, shot in enumerate(shots.shot_annotations):
print('Scene {}: {} to {}'.format(
note,
shot.start_time_offset,
shot.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 label detection.')
args = parser.parse_args()

analyze_shots(args.path)
# [END running_app]
# [END full_tutorial]
32 changes: 32 additions & 0 deletions video/cloud-client/shotchange/shotchange_test.py
Original file line number Diff line number Diff line change
@@ -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 shotchange

BUCKET = os.environ['CLOUD_STORAGE_BUCKET']
SHOTS_FILE_PATH = '/video/gbikes_dinosaur.mp4'


@pytest.mark.slow
def test_shots_dino(capsys):
shotchange.analyze_shots(
'gs://{}{}'.format(BUCKET, SHOTS_FILE_PATH))
out, _ = capsys.readouterr()
assert 'Scene 1:' in out

0 comments on commit 29b0060

Please sign in to comment.