diff --git a/vision/api/label/README.md b/vision/api/label/README.md new file mode 100644 index 000000000000..fa457e3de540 --- /dev/null +++ b/vision/api/label/README.md @@ -0,0 +1,3 @@ +Python label detection [Vision API](https://cloud.google.com/vision/) example. +See the [tutorial](https://cloud.google.com/vision/docs/label-tutorial). + diff --git a/vision/api/label/label.py b/vision/api/label/label.py new file mode 100755 index 000000000000..56360ba4724c --- /dev/null +++ b/vision/api/label/label.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# Copyright 2015 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 script uses the Vision API's label detection capabilities to find a label +based on an image's content. + +To run the example, install the necessary libraries by running: + + pip install -r requirements.txt + +Run the script on an image to get a label, E.g.: + + ./label.py +""" + +# [START import_libraries] +import argparse +import base64 + +from googleapiclient import discovery +from oauth2client.client import GoogleCredentials + +# The url template to retrieve the discovery document for trusted testers. +DISCOVERY_URL = 'https://{api}.googleapis.com/$discovery/rest?version={apiVersion}' # noqa +# [END import_libraries] + + +def main(photo_file): + """Run a label request on a single image""" + + # [START authenticate] + credentials = GoogleCredentials.get_application_default() + service = discovery.build('vision', 'v1', credentials=credentials, + discoveryServiceUrl=DISCOVERY_URL) + # [END authenticate] + + # [START construct_request] + with open(photo_file, 'rb') as image: + image_content = base64.b64encode(image.read()) + service_request = service.images().annotate(body={ + 'requests': [{ + 'image': { + 'content': image_content.decode('UTF-8') + }, + 'features': [{ + 'type': 'LABEL_DETECTION', + 'maxResults': 1 + }] + }] + }) + # [END construct_request] + # [START parse_response] + response = service_request.execute() + label = response['responses'][0]['labelAnnotations'][0]['description'] + print('Found label: %s for %s' % (label, photo_file)) + return 0 + # [END parse_response] + +# [START run_application] +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('image_file', help='The image you\'d like to label.') + args = parser.parse_args() + main(args.image_file) +# [END run_application] diff --git a/vision/api/label/label_test.py b/vision/api/label/label_test.py new file mode 100644 index 000000000000..71a37321083d --- /dev/null +++ b/vision/api/label/label_test.py @@ -0,0 +1,25 @@ +# Copyright 2016, 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 re + +from label import main + + +def test_main(resource, capsys): + in_file = resource('cat.jpg') + + main(in_file) + + stdout, _ = capsys.readouterr() + assert re.match(r'Found label:.*cat', stdout) diff --git a/vision/api/label/requirements.txt b/vision/api/label/requirements.txt new file mode 100644 index 000000000000..6eb939864849 --- /dev/null +++ b/vision/api/label/requirements.txt @@ -0,0 +1 @@ +google-api-python-client>=1.3.1 diff --git a/vision/api/label/resources/cat.jpg b/vision/api/label/resources/cat.jpg new file mode 100644 index 000000000000..76af906f0a34 Binary files /dev/null and b/vision/api/label/resources/cat.jpg differ