Пакет SDK Компьютерного зрения Cognitive Services Azure для Python

Служба ''Компьютерное зрение'' предоставляет разработчикам доступ к расширенным алгоритмам обработки изображений и возврата данных. Алгоритмы Компьютерного зрения анализируют содержимое изображений по-разному, в зависимости от интересующих вас визуальных компонентов.

Компьютерное зрение в приложении может выполнять такие функции.

  • Анализ изображений для получения полезных сведений
  • Извлечение текста из изображений
  • Создание эскизов

Ищете дополнительную документацию?

Предварительные требования

При необходимости можно создать учетную запись API Компьютерного зрения с помощью следующей команды Azure CLI:

RES_REGION=westeurope
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>

az cognitiveservices account create \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --location $RES_REGION \
    --kind ComputerVision \
    --sku S1 \
    --yes

Установка

Установите пакет SDK Компьютерного зрения Cognitive Services Azure с помощью pip, дополнительно это можно установить в виртуальной среде.

Настройка виртуальной среды (необязательно)

Хотя это и не требуется, можно сохранять базовую систему и среды пакета SDK для Azure изолированными друг от друга при использовании виртуальной среды. Выполните следующие команды для настройки и введите расположение виртуальной среды с постфиксом venv, напримерcogsrv-vision-env:

python3 -m venv cogsrv-vision-env
source cogsrv-vision-env/bin/activate

Установка пакета SDK

Установите пакет SDK Компьютерного зрения Azure Cognitive Services для Python посредством pip.

pip install azure-cognitiveservices-vision-computervision

Аутентификация

После создания ресурса Компьютерного зрения вам потребуется его регион и один из его ключей учетной записи, чтобы создать экземпляр клиентского объекта.

Эти значения понадобятся при создании экземпляра клиентского объекта ComputerVisionClient.

Получение учетных данных

Используйте фрагмент приведенной ниже команды Azure CLI, чтобы заполнить две переменные среды регионом учетной записи Компьютерного зрения и одним из ее ключей (эти значения также можно найти на портале Azure). Фрагмент кода отформатирован для оболочки Bash.

RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>

export ACCOUNT_REGION=$(az cognitiveservices account show \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --query location \
    --output tsv)

export ACCOUNT_KEY=$(az cognitiveservices account keys list \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --query key1 \
    --output tsv)

Создание клиента

После заполнения ACCOUNT_REGION переменных среды и ACCOUNT_KEY можно создать клиентский объект ComputerVisionClient .

from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials

import os
region = os.environ['ACCOUNT_REGION']
key = os.environ['ACCOUNT_KEY']

credentials = CognitiveServicesCredentials(key)
client = ComputerVisionClient(
    endpoint="https://" + region + ".api.cognitive.microsoft.com/",
    credentials=credentials
)

Использование

После инициализации клиентского объекта ComputerVisionClient вы можете:

  • Анализ изображения. Вы можете проанализировать изображение на предмет определенных признаков, таких как лица, цвета, теги.
  • Создание эскизов. Создайте пользовательское изображение JPEG для использования в качестве эскиза исходного изображения.
  • Получение описания изображения: получение описания изображения на основе его предметной области.

Дополнительные сведения об этой службе см. в статье What is Computer Vision? (Что собой представляет компьютерное зрение?).

Примеры

В следующих разделах приведено несколько фрагментов кода, охватывающих наиболее распространенные задачи Компьютерного зрения.

Анализ изображения

Изображение можно анализировать на определенные особенности с помощью analyze_image. Используйте свойство visual_features, чтобы задать типы анализа, выполняемого на изображении. Обычными значениями являются VisualFeatureTypes.tags и VisualFeatureTypes.description.

url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"

image_analysis = client.analyze_image(url,visual_features=[VisualFeatureTypes.tags])

for tag in image_analysis.tags:
    print(tag)

Получение списка предметных областей

Просмотрите предметные области, используемые для анализа изображений, с помощью функции list_models. Эти имена областей используются при анализе изображения по области. Примером области является landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Анализ изображений по области

Анализировать изображение по предметной области можно с помощью функции analyze_image_by_domain. Получите список поддерживаемых предметных областей, чтобы использовать правильные имена областей.

domain = "landmarks"
url = "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg"
language = "en"

analysis = client.analyze_image_by_domain(domain, url, language)

for landmark in analysis.result["landmarks"]:
    print(landmark["name"])
    print(landmark["confidence"])

Получение текстового описания изображений

Получить текстовое описание изображения на основе языка можно с помощью функции describe_image. Запросите несколько описаний с помощью свойства max_description, если нужно выполнить анализ текста на ключевые слова, связанные с изображением. Примеры текстовых описаний для следующих изображений: a train crossing a bridge over a body of water, a large bridge over a body of water и a train crossing a bridge over a large body of water.

domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3

analysis = client.describe_image(url, max_descriptions, language)

for caption in analysis.captions:
    print(caption.text)
    print(caption.confidence)

Получение текста из изображения

Из изображения можно получить любой текст: рукописный или печатный. Для этого нужно вызвать два разных метода пакета SDK: read и get_read_result. Вызов чтения является асинхронным. В результатах вызова get_read_result перед извлечением текстовых данных необходимо проверить, завершился OperationStatusCodes ли первый вызов. Результаты включают текст, а также координаты ограничительной рамки для текста.

# import models
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes

url = "https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/raw/master/samples/vision/images/make_things_happen.jpg"
raw = True
numberOfCharsInOperationId = 36

# SDK call
rawHttpResponse = client.read(url, language="en", raw=True)

# Get ID from returned headers
operationLocation = rawHttpResponse.headers["Operation-Location"]
idLocation = len(operationLocation) - numberOfCharsInOperationId
operationId = operationLocation[idLocation:]

# SDK call
result = client.get_read_result(operationId)

# Get data
if result.status == OperationStatusCodes.succeeded:

    for line in result.analyze_result.read_results[0].lines:
        print(line.text)
        print(line.bounding_box)

Создание эскизов

Создать эскиз изображения (в формате JPG) можно с помощью generate_thumbnail. Необязательно создавать эскиз в тех же пропорциях, что и исходное изображение.

В этом примере используется пакет Pillow для локального сохранения нового эскиза изображения.

from PIL import Image
import io

width = 50
height = 50
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"

thumbnail = client.generate_thumbnail(width, height, url)

for x in thumbnail:
    image = Image.open(io.BytesIO(x))

image.save('thumbnail.jpg')

Устранение неполадок

Общие сведения

При взаимодействии с клиентским объектом ComputerVisionClient с помощью пакета SDK для Python используется класс ComputerVisionErrorException для возврата ошибок. Ошибки, возвращаемые службой, соответствуют тем же кодам состояния HTTP, которые возвращаются для запросов REST API.

Например, при попытке проанализировать изображение с неверным ключом будет возвращена ошибка 401. В следующем фрагменте кода ошибка корректно обрабатывается путем перехвата исключения и отображения дополнительных сведений об ошибке.


domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3

try:
    analysis = client.describe_image(url, max_descriptions, language)

    for caption in analysis.captions:
        print(caption.text)
        print(caption.confidence)
except HTTPFailure as e:
    if e.status_code == 401:
        print("Error unauthorized. Make sure your key and region are correct.")
    else:
        raise

Обработка временных ошибок с помощью повторных вызовов

При работе с клиентом ComputerVisionClient вы можете столкнуться с временными сбоями, вызванными ограничениями скорости, применяемыми службой, или другими временными проблемами, такими как отказ сети. Для получения дополнительной информации об обработке этих типов сбоев ознакомьтесь со статьей Шаблон повторов в руководстве по конструктивным шаблонам облачных решений и соответствующим шаблоном автоматического выключения.

Дальнейшие действия

Больше примеров кода

Несколько примеров кода пакета SDK Компьютерного зрения для Python доступны в репозитории GitHub. Это примеры кода для дополнительных сценариев, обычно встречающихся при работе с Компьютерным зрением:

Дополнительная документация

Более подробную документацию по службе "Компьютерное зрение" см. здесь на сайте docs.microsoft.com.