1. Обзор
Vision API позволяет разработчикам легко интегрировать функции обнаружения зрения в приложения, включая маркировку изображений, распознавание лиц и ориентиров, оптическое распознавание символов (OCR) и пометку непристойного контента.
В этом руководстве вы сосредоточитесь на использовании Vision API с Python.
Что вы узнаете
- Как настроить свою среду
- Как выполнить обнаружение меток
- Как выполнить обнаружение текста
- Как выполнить обнаружение ориентиров
- Как выполнить распознавание лиц
- Как выполнить обнаружение объекта
Что вам понадобится
Опрос
Как вы будете использовать этот урок?
Как бы вы оценили свой опыт работы с Python?
Как бы вы оценили свой опыт работы с сервисами Google Cloud?
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Cloud Shell , среду командной строки, работающую в облаке.
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell». .
Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью браузера.
После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и что для проекта установлен идентификатор вашего проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list
Вывод команды
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить его с помощью этой команды:
gcloud config set project <PROJECT_ID>
Вывод команды
Updated property [core/project].
3. Настройка среды
Прежде чем начать использовать Vision API, выполните следующую команду в Cloud Shell, чтобы включить API:
gcloud services enable vision.googleapis.com
Вы должны увидеть что-то вроде этого:
Operation "operations/..." finished successfully.
Теперь вы можете использовать Vision API!
Перейдите в свой домашний каталог:
cd ~
Создайте виртуальную среду Python, чтобы изолировать зависимости:
virtualenv venv-vision
Активируйте виртуальную среду:
source venv-vision/bin/activate
Установите IPython и клиентскую библиотеку Vision API:
pip install ipython google-cloud-vision
Вы должны увидеть что-то вроде этого:
... Installing collected packages: ..., ipython, google-cloud-vision Successfully installed ... google-cloud-vision-3.4.0 ...
Теперь вы готовы использовать клиентскую библиотеку Vision API!
На следующих шагах вы будете использовать интерактивный интерпретатор Python под названием IPython , который вы установили на предыдущем шаге. Запустите сеанс, запустив ipython
в Cloud Shell:
ipython
Вы должны увидеть что-то вроде этого:
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Вы готовы сделать свой первый запрос...
4. Выполните обнаружение этикеток.
Одной из основных функций Vision API является идентификация объектов или объектов на изображении, известная как аннотация метки. Обнаружение этикеток идентифицирует общие объекты, местоположения, виды деятельности, виды животных, продукты и многое другое. Vision API принимает входное изображение и возвращает наиболее вероятные метки, применимые к этому изображению. Он возвращает наиболее подходящие метки вместе с показателем достоверности соответствия изображению.
В этом примере вы выполните обнаружение меток на изображении (любезно предоставлено Алексом Найтом ) Сетагая, популярного района Токио:
Скопируйте следующий код в свой сеанс IPython:
from typing import Sequence
from google.cloud import vision
def analyze_image_from_uri(
image_uri: str,
feature_types: Sequence,
) -> vision.AnnotateImageResponse:
client = vision.ImageAnnotatorClient()
image = vision.Image()
image.source.image_uri = image_uri
features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
request = vision.AnnotateImageRequest(image=image, features=features)
response = client.annotate_image(request=request)
return response
def print_labels(response: vision.AnnotateImageResponse):
print("=" * 80)
for label in response.label_annotations:
print(
f"{label.score:4.0%}",
f"{label.description:5}",
sep=" | ",
)
Уделите минутку изучению кода и посмотрите, как он использует метод клиентской библиотеки annotate_image
для анализа изображения на предмет набора заданных функций.
Отправьте запрос с функцией LABEL_DETECTION
:
image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_labels(response)
Вы должны получить следующий вывод:
================================================================================ 97% | Bicycle 96% | Tire 94% | Wheel 91% | Automotive lighting 89% | Infrastructure 87% | Bicycle wheel 86% | Mode of transport 85% | Building 83% | Electricity 82% | Neighbourhood
Вот как результаты представлены в онлайн-демо:
Краткое содержание
На этом этапе вы смогли выполнить обнаружение меток на изображении и отобразить наиболее вероятные метки, связанные с этим изображением. Узнайте больше об обнаружении меток .
5. Выполните обнаружение текста
Обнаружение текста выполняет оптическое распознавание символов (OCR). Он обнаруживает и извлекает текст внутри изображения с поддержкой широкого спектра языков. Он также имеет автоматическую идентификацию языка.
В этом примере вы выполните обнаружение текста на изображении дорожного знака:
Скопируйте следующий код в свой сеанс IPython:
def print_text(response: vision.AnnotateImageResponse):
print("=" * 80)
for annotation in response.text_annotations:
vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
print(
f"{repr(annotation.description):42}",
",".join(vertices),
sep=" | ",
)
Отправьте запрос с функцией TEXT_DETECTION
:
image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_text(response)
Вы должны получить следующий вывод:
================================================================================ 'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965) 'WAITING' | (344,821),(2025,879),(2016,1127),(335,1069) '?' | (2057,881),(2225,887),(2216,1134),(2048,1128) 'PLEASE' | (1208,1230),(1895,1253),(1891,1374),(1204,1351) 'TURN' | (1217,1414),(1718,1434),(1713,1558),(1212,1538) 'OFF' | (1787,1437),(2133,1451),(2128,1575),(1782,1561) 'YOUR' | (1211,1609),(1741,1626),(1737,1747),(1207,1731) 'ENGINE' | (1213,1805),(1923,1819),(1920,1949),(1210,1935)
Вот как результаты представлены в онлайн-демо:
Краткое содержание
На этом этапе вы смогли выполнить обнаружение текста на изображении и отобразить распознанный текст с изображения. Узнайте больше об обнаружении текста .
6. Выполните обнаружение ориентиров.
Обнаружение ориентиров позволяет обнаружить на изображении популярные природные и искусственные структуры.
В этом примере вы выполните обнаружение ориентиров на изображении Эйфелевой башни (любезно предоставлено Джоном Таунером ):
Скопируйте следующий код в свой сеанс IPython:
def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
print("=" * 80)
for landmark in response.landmark_annotations:
if landmark.score < min_score:
continue
vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
lat_lng = landmark.locations[0].lat_lng
print(
f"{landmark.description:18}",
",".join(vertices),
f"{lat_lng.latitude:.5f}",
f"{lat_lng.longitude:.5f}",
sep=" | ",
)
Отправьте запрос с помощью функции LANDMARK_DETECTION
:
image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)
Вы должны получить следующий вывод:
================================================================================ Trocadéro Gardens | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928 Eiffel Tower | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435
Вот как результаты представлены в онлайн-демо:
Краткое содержание
На этом этапе вы смогли выполнить обнаружение ориентиров на изображении Эйфелевой башни. Узнайте больше об обнаружении ориентиров .
7. Выполните распознавание лиц
Обнаружение черт лица обнаруживает несколько лиц на изображении вместе со связанными с ними ключевыми атрибутами лица, такими как эмоциональное состояние или ношение головного убора.
В этом примере вы увидите лица на следующем изображении (любезно предоставлено Химаншу Сингхом Гурджаром ):
Скопируйте следующий код в свой сеанс IPython:
def print_faces(response: vision.AnnotateImageResponse):
print("=" * 80)
for face_number, face in enumerate(response.face_annotations, 1):
vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
print(f"# Face {face_number} @ {vertices}")
print(f"Joy: {face.joy_likelihood.name}")
print(f"Exposed: {face.under_exposed_likelihood.name}")
print(f"Blurred: {face.blurred_likelihood.name}")
print("-" * 80)
Отправьте запрос с функцией FACE_DETECTION
:
image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_faces(response)
Вы должны получить следующий вывод:
================================================================================ # Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399) Joy: VERY_LIKELY Exposed: VERY_UNLIKELY Blurred: VERY_UNLIKELY -------------------------------------------------------------------------------- # Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844) Joy: VERY_UNLIKELY Exposed: VERY_UNLIKELY Blurred: UNLIKELY -------------------------------------------------------------------------------- # Face 3 @ (785,167),(1100,167),(1100,534),(785,534) Joy: VERY_UNLIKELY Exposed: LIKELY Blurred: VERY_LIKELY --------------------------------------------------------------------------------
Вот как результаты представлены в онлайн-демо:
Краткое содержание
На этом этапе вы смогли выполнить распознавание лиц. Узнайте больше об распознавании лиц .
8. Выполните обнаружение объекта
В этом примере вы выполните обнаружение объекта на том же предыдущем изображении (любезно предоставлено Алексом Найтом ) Сетагая:
Скопируйте следующий код в свой сеанс IPython:
def print_objects(response: vision.AnnotateImageResponse):
print("=" * 80)
for obj in response.localized_object_annotations:
nvertices = obj.bounding_poly.normalized_vertices
print(
f"{obj.score:4.0%}",
f"{obj.name:15}",
f"{obj.mid:10}",
",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
sep=" | ",
)
Отправьте запрос с функцией OBJECT_LOCALIZATION
:
image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]
response = analyze_image_from_uri(image_uri, features)
print_objects(response)
Вы должны получить следующий вывод:
================================================================================ 93% | Bicycle | /m/0199g | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9) 92% | Bicycle wheel | /m/01bqk0 | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9) 91% | Tire | /m/0h9mv | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0) 75% | Bicycle | /m/0199g | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7) 51% | Tire | /m/0h9mv | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
Вот как результаты представлены в онлайн-демо:
Краткое содержание
На этом этапе вы смогли выполнить обнаружение объектов. Узнайте больше об обнаружении объектов .
9. Множество функций
Вы видели, как использовать некоторые функции Vision API, но их гораздо больше, и вы можете запросить несколько функций в одном запросе.
Вот тип запроса, который вы можете сделать, чтобы получить всю информацию сразу:
image_uri = "gs://..."
features = [
vision.Feature.Type.OBJECT_LOCALIZATION,
vision.Feature.Type.FACE_DETECTION,
vision.Feature.Type.LANDMARK_DETECTION,
vision.Feature.Type.LOGO_DETECTION,
vision.Feature.Type.LABEL_DETECTION,
vision.Feature.Type.TEXT_DETECTION,
vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
vision.Feature.Type.SAFE_SEARCH_DETECTION,
vision.Feature.Type.IMAGE_PROPERTIES,
vision.Feature.Type.CROP_HINTS,
vision.Feature.Type.WEB_DETECTION,
vision.Feature.Type.PRODUCT_SEARCH,
vision.Feature.Type.OBJECT_LOCALIZATION,
]
# response = analyze_image_from_uri(image_uri, features)
И есть больше возможностей, например, выполнять обнаружение пакета изображений синхронно или асинхронно. Ознакомьтесь со всеми практическими руководствами .
10. Поздравляем!
Вы узнали, как использовать Vision API с Python, и протестировали несколько функций обнаружения изображений!
Очистить
Чтобы очистить среду разработки из Cloud Shell:
- Если вы все еще находитесь в сеансе IPython, вернитесь в оболочку:
exit
- Прекратите использовать виртуальную среду Python:
deactivate
- Удалите папку виртуальной среды:
cd ~ ; rm -rf ./venv-vision
Чтобы удалить проект Google Cloud из Cloud Shell:
- Получите текущий идентификатор проекта:
PROJECT_ID=$(gcloud config get-value core/project)
- Убедитесь, что это именно тот проект, который вы хотите удалить:
echo $PROJECT_ID
- Удалить проект:
gcloud projects delete $PROJECT_ID
Узнать больше
- Проверьте онлайн-демонстрацию в своем браузере: https://cloud.google.com/vision.
- Документация Vision API: https://cloud.google.com/vision/docs.
- Python в Google Cloud: https://cloud.google.com/python
- Облачные клиентские библиотеки для Python: https://github.com/googleapis/google-cloud-python.
Лицензия
Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.