Использование Vision API с Python  |  Google Codelabs (original) (raw)

Перейти к основному контенту

1. Обзор

5ab7829fc22b21c4.png

Vision API позволяет разработчикам легко интегрировать функции обнаружения зрения в приложения, включая маркировку изображений, распознавание лиц и ориентиров, оптическое распознавание символов (OCR) и маркировку непристойного контента.

В этом руководстве вы сосредоточитесь на использовании Vision API с Python.

Что вы узнаете

Что вам понадобится

Опрос

Как вы будете использовать этот урок?

Прочтите только до конца Прочитайте его и выполните упражнения.

Как бы вы оценили свой опыт работы с Python?

Новичок Средний Опытный

Как бы вы оценили свой опыт работы с сервисами Google Cloud?

Новичок Средний Опытный

2. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Cloud Shell , среду командной строки, работающую в облаке.

Активировать Cloud Shell

  1. В Cloud Console нажмите «Активировать Cloud Shell». 853e55310c205094.png .

55efc1aaa7a4d3ad.png

Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .

9c92662c6a846a5c.png

Подготовка и подключение к Cloud Shell займет всего несколько минут.

9f0e51b578fecce5.png

Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью браузера.

После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и что для проекта установлен идентификатор вашего проекта.

  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:

gcloud auth list

Вывод команды

Credentialed Accounts ACTIVE ACCOUNT

To set the active account, run: $ gcloud config set account ACCOUNT

  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:

gcloud config list project

Вывод команды

[core] project =

Если это не так, вы можете установить это с помощью этой команды:

gcloud config set project

Вывод команды

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 принимает входное изображение и возвращает наиболее вероятные метки, применимые к этому изображению. Он возвращает наиболее подходящие метки вместе с показателем достоверности соответствия изображению.

В этом примере вы выполните обнаружение меток на изображении (любезно предоставлено Алексом Найтом ) Сетагая, популярного района Токио:

756f97f0b1e46c38.jpeg

Скопируйте следующий код в свой сеанс 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

Вот как результаты представлены в онлайн-демо:

2191b0425c9c148f.png

Краткое содержание

На этом этапе вы смогли выполнить обнаружение меток на изображении и отобразить наиболее вероятные метки, связанные с этим изображением. Узнайте больше об обнаружении меток .

5. Выполните обнаружение текста

Обнаружение текста выполняет оптическое распознавание символов (OCR). Он обнаруживает и извлекает текст внутри изображения с поддержкой широкого спектра языков. Он также имеет функцию автоматической идентификации языка.

В этом примере вы выполните обнаружение текста на изображении дорожного знака:

4dedd3fcfd9ad99b.jpeg

Скопируйте следующий код в свой сеанс 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)

Вот как результаты представлены в онлайн-демо:

9c70fbce871c5fe5.png

Краткое содержание

На этом этапе вы смогли выполнить обнаружение текста на изображении и отобразить распознанный текст с изображения. Узнайте больше об обнаружении текста .

6. Выполните обнаружение ориентиров.

Обнаружение ориентиров позволяет обнаружить на изображении популярные природные и искусственные структуры.

В этом примере вы выполните обнаружение ориентиров на изображении Эйфелевой башни (любезно предоставлено Джоном Таунером ):

fb7801e36884b875.jpeg

Скопируйте следующий код в свой сеанс 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

Вот как результаты представлены в онлайн-демо:

2788697365670985.png

Краткое содержание

На этом этапе вы смогли выполнить обнаружение ориентиров на изображении Эйфелевой башни. Узнайте больше об обнаружении ориентиров .

7. Выполните распознавание лиц

Обнаружение черт лица обнаруживает несколько лиц на изображении вместе со связанными с ними ключевыми атрибутами лица, такими как эмоциональное состояние или ношение головного убора.

В этом примере вы увидите лица на следующем изображении (любезно предоставлено Химаншу Сингхом Гурджаром ):

58c578ece524cf32.jpeg

Скопируйте следующий код в свой сеанс 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

Вот как результаты представлены в онлайн-демо:

cbb7f59299651b83.png

Краткое содержание

На этом этапе вы смогли выполнить распознавание лиц. Узнайте больше об распознавании лиц .

8. Выполните обнаружение объекта

В этом примере вы выполните обнаружение объекта на том же предыдущем изображении (любезно предоставлено Алексом Найтом ) Сетагая:

756f97f0b1e46c38.jpeg

Скопируйте следующий код в свой сеанс 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)

Вот как результаты представлены в онлайн-демо:

e1c2ca803d874a6b.png

Краткое содержание

На этом этапе вы смогли выполнить обнаружение объектов. Узнайте больше об обнаружении объектов .

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. Поздравляем!

5ab7829fc22b21c4.png

Вы узнали, как использовать Vision API с Python, и протестировали несколько функций обнаружения изображений!

Очистить

Чтобы очистить среду разработки из Cloud Shell:

Чтобы удалить проект Google Cloud из Cloud Shell:

Узнать больше

Лицензия

Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.

Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.