Почему API видения google-cloud-python возвращает несколько аннотаций?

Я работаю с Google Cloud Vision API с Python
( https://googlecloudplatform.github.io/google-cloud-python/stable/vision-usage.html)

Но я не мог понять, почему результат аннотации одного изображения состоит из list из annotations.
В документе говорится:

>>> from google.cloud import vision
>>> from google.cloud.vision.feature import Feature
>>> from google.cloud.vision.feature import FeatureTypes
>>> client = vision.Client()
>>> image = client.image(source_uri='gs://my-test-bucket/image.jpg')
>>> features = [Feature(FeatureTypes.FACE_DETECTION, 5),
...             Feature(FeatureTypes.LOGO_DETECTION, 3)]
>>> annotations = image.detect(features)
>>> len(annotations)
2
>>> for face in annotations[0].faces:
...     print(face.joy)
Likelihood.VERY_LIKELY
Likelihood.VERY_LIKELY
Likelihood.VERY_LIKELY
>>> for logo in annotations[0].logos:
...     print(logo.description)
'google'
'github'

Зачем image.detect возвращает несколько аннотаций для одного изображения?
Это кажется ненужным, потому что результаты обнаружения содержатся в каждом атрибуте (annotations[0].faces, annotations[0].logos, так далее.).

И когда я пытаюсь API с моим собственным изображением, он возвращает annotations длины 1.

Итак, мой вопрос:

  • Почему клиент python vision api возвращает несколько аннотаций для одного изображения?
  • Нужно ли разбирать каждый annotation в списке annotations?

1 ответ

В настоящее время API Google Cloud Vision предоставляет 10 различных аннотаций, которые можно применять к любому изображению. Например, среди 10 доступных аннотаций вы можете обнаружить:

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

Итак, чтобы ответить на ваши вопросы:

  • API видения будет возвращать любые аннотации, которые вы просите вернуть. Если вы попросите вернуть несколько аннотаций, он вернет несколько. Если вы запрашиваете только 1 из 10 аннотаций, она вернет только одну. Пример кода Python, который вы цитировали в своем сообщении, запрашивает две аннотации: FACE_DETECTION и LOGO_DETECTION, поэтому эти две и только эти две аннотации будут возвращены.
  • Вам нужно только разобрать аннотации, которые вы хотите проанализировать. Поскольку у каждой аннотации есть свои расходы (цены указаны на этой странице), я бы порекомендовал вам запрашивать только те аннотации, результаты которых вы хотите увидеть, иначе это может дорого обойтись.

Обратите внимание, что при запуске примера Python, который вы цитировали в своем посте, len(annotations) будет возвращать "1" независимо от того, сколько аннотаций вы выбрали для обнаружения с помощью кода.

Также обратите внимание, что любые добавленные вами аннотации, которые не возвращают значений, например, логотипы не найдены на изображении, ничего не возвращают.

Другие вопросы по тегам