From e6ea0139aa7236929124569833f6c78ef4457cec Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Wed, 30 Nov 2016 18:17:26 -0500 Subject: [PATCH] Add system test for Vision Logo detection. --- system_tests/attempt_system_tests.py | 1 + system_tests/data/logo.png | Bin 0 -> 35532 bytes system_tests/run_system_test.py | 2 + system_tests/vision.py | 110 +++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 system_tests/data/logo.png create mode 100644 system_tests/vision.py diff --git a/system_tests/attempt_system_tests.py b/system_tests/attempt_system_tests.py index c6e7297a5fa0..2cfb1672a5aa 100644 --- a/system_tests/attempt_system_tests.py +++ b/system_tests/attempt_system_tests.py @@ -60,6 +60,7 @@ 'datastore', 'storage', 'speech', + 'vision', 'bigquery', 'pubsub', 'language', diff --git a/system_tests/data/logo.png b/system_tests/data/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4d74fe33f9077446024ec2120e59f9eeff32fe GIT binary patch literal 35532 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 Rg 0.25) + + def test_detect_logos_content(self): + client = Config.CLIENT + with open(LOGO_FILE, 'rb') as image_file: + image = client.image(content=image_file.read()) + logos = image.detect_logos() + self.assertEqual(len(logos), 1) + logo = logos[0] + self._assert_logo(logo) + + def test_detect_logos_filename(self): + client = Config.CLIENT + image = client.image(filename=LOGO_FILE) + logos = image.detect_logos() + self.assertEqual(len(logos), 1) + logo = logos[0] + self._assert_logo(logo) + + def test_detect_logos_gcs(self): + bucket_name = Config.TEST_BUCKET.name + blob_name = 'logo.png' + blob = Config.TEST_BUCKET.blob(blob_name) + self.to_delete_by_case.append(blob) # Clean-up. + with open(LOGO_FILE, 'rb') as file_obj: + blob.upload_from_file(file_obj) + + source_uri = 'gs://%s/%s' % (bucket_name, blob_name) + + client = Config.CLIENT + image = client.image(source_uri=source_uri) + logos = image.detect_logos() + self.assertEqual(len(logos), 1) + logo = logos[0] + self._assert_logo(logo)