Может ли API видения Google принимать URL-адрес внешнего изображения?

Я читаю документацию по схеме запроса API видения. В источнике изображения я вижу только вариант использования URL-адреса путей изображения GCS. Можно ли использовать внешний URL-адрес изображения, например http://example.com/images/image01.jpg ?


person Ashish Jain    schedule 04.03.2016    source источник
comment
Какой API вы имеете в виду? Этот? developers.google.com/vision   -  person pm0733464    schedule 07.03.2016
comment
cloud.google.com/vision Я полагаю, что обе службы облачного зрения находятся в бэкэнде.   -  person Ashish Jain    schedule 08.03.2016
comment
Вы нашли решение для загрузки внешних изображений?   -  person rwehresmann    schedule 10.09.2017


Ответы (5)


Да, это работает отлично:

{
  "requests": [
    {
      "features": [
        {
          "type": "WEB_DETECTION"
        }
      ],
      "image": {
        "source": {
          "imageUri": "http://i3.kym-cdn.com/photos/images/facebook/000/242/592/1c8.jpg"
        }
      }
    }
  ]
}
person JacopKane    schedule 19.04.2017
comment
Если это работает, то действительно не должно (иначе люди могли бы использовать Vision API для хостов образов DOS)! Поле imageUri всегда должно начинаться с gs:// (указывая на Google Cloud Storage). - person JJ Geewax; 03.07.2017
comment
У меня все работало нормально, когда я тестировал API в прошлом месяце. - person JacopKane; 04.07.2017
comment
@JJGeewax У Google есть предупреждение на странице документации: Внимание! При получении изображений с URL-адресов HTTP/HTTPS Google не может гарантировать, что запрос будет выполнен. Ваш запрос может завершиться ошибкой, если указанный хост отклонит запрос (например, из-за регулирования запроса или предотвращения DOS) или если Google будет регулировать запросы к сайту для предотвращения злоупотреблений. Вы не должны зависеть от внешних размещенных образов для производственных приложений. cloud.google.com/vision/docs/ocr#vision_text_detection-cli - person Deepak Thomas; 23.07.2019
comment
Короче говоря, image.source.imageUri работает, но при соблюдении условий, указанных выше. - person Deepak Thomas; 23.07.2019
comment
Спасибо за отзывы ребята. Прошло довольно много времени с тех пор, как я не использовал API, поэтому, пожалуйста, не стесняйтесь редактировать мой ответ, если вы хотите обновить/улучшить. - person JacopKane; 31.07.2019

Да, это возможно, но ТОЛЬКО с использованием URL-адресов облачного хранилища Google. Попробуй это:

{
  "requests": [
    {
      "image": {
        "source": {
          gcsImageUri: 'gs://something.com/image',
        },
      },
      "features": ...
      "imageContext": ...
    },
  ]
}
person Belfordz    schedule 10.03.2016
comment
Спасибо. Это проблема, которую я пытаюсь обойти, чтобы мне не приходилось каждый раз загружать сначала в GS. Я предполагаю, что это почти одно и то же: загрузка напрямую в сервис изображений или сначала загрузка в GS, а затем обработка. Просто еще один дополнительный вызов API для загрузки в GS перед обработкой и удаления из GS после обработки. - person Ashish Jain; 11.03.2016
comment
в зависимости от используемого языка могут быть некоторые полезные методы для получения изображения через http и получения представления изображения base64, которое вы можете передать в API Google. - person Belfordz; 11.03.2016

Да, вы можете сделать это с любым изображением, если оно меньше 4 МБ. Он не обязательно находиться в Google Cloud Storage.

Вот пример использования клиентской библиотеки Golang:

// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.

// [START vision_quickstart]
// Sample vision-quickstart uses the Google Cloud Vision API to label an image.
package main

import (
    "fmt"
    "log"

    // Imports the Google Cloud Vision API client package.
    vision "cloud.google.com/go/vision/apiv1"
    "golang.org/x/net/context"
)

func main() {
    ctx := context.Background()

    // Creates a client.
    client, err := vision.NewImageAnnotatorClient(ctx)
    if err != nil {
        log.Fatalf("Failed to create client: %v", err)
    }

    image := vision.NewImageFromURI("https://www.denaligrizzlybear.com/assets/images/scenic-denali.jpg")

    labels, err := client.DetectLabels(ctx, image, nil, 10)
    if err != nil {
        log.Fatalf("Failed to detect labels: %v", err)
    }

    fmt.Println("Labels:")
    for _, label := range labels {
        fmt.Println(label.Description)
    }
}

Вот функция в Godoc:https://godoc.org/cloud.google.com/go/vision/apiv1#NewImageFromURI

В документах указано:

NewImageFromURI возвращает изображение, которое ссылается на объект в Google Cloud Storage (если uri имеет вид «gs://BUCKET/OBJECT») или на общедоступный URL-адрес.

person Joel    schedule 25.10.2017

Ответ для пользователей Python.

def detect_labels_uri(uri):
    """Detects labels in the file located in Google Cloud Storage or on the
    Web."""
    from google.cloud import vision
    client = vision.ImageAnnotatorClient()
    image = vision.types.Image()
    image.source.image_uri = uri

    response = client.label_detection(image=image)
    labels = response.label_annotations
    print('Labels:')

    for label in labels:
        print(label.description)
# [END vision_label_detection_gcs]
person Parker Shamblin    schedule 23.06.2019
comment
Это не ответ, это немного связанный фрагмент кода без каких-либо разумных объяснений. Пожалуйста, ответьте на вопрос ОП. - person bugmenot123; 28.02.2020

Да, API Google Cloud Vision ДЕЙСТВИТЕЛЬНО принимает изображения с внешними URL. Я просто использовал это изображение, чтобы получить ярлыки:

python label_sample.py -u "https://upload.wikimedia.org/wikipedia/commons/e/e6/Bleeding_finger.jpg"

Found label: red with 96.47 percent probability!!!!!!!!!!!
Found label: color with 95.46 percent probability!!!!!!!!!!!
Found label: pink with 92.15 percent probability!!!!!!!!!!!
Found label: finger with 91.06 percent probability!!!!!!!!!!!
Found label: hand with 90.45 percent probability!!!!!!!!!!!
Found label: nail with 73.23 percent probability!!!!!!!!!!!
Found label: lip with 73.09 percent probability!!!!!!!!!!!
Found label: jewellery with 68.84 percent probability!!!!!!!!!!!
Found label: produce with 68.39 percent probability!!!!!!!!!!!
Found label: macro photography with 67.86 percent probability!!!!!!!!!!!

Вы должны указать URL-адрес в правильном формате, используя библиотеку urllib, и прокомментировать часть открытия изображения следующим образом:

url = url_file
opener = urllib.urlopen(url)

#    with open(photo_file, 'rb') as image:
image_content = base64.b64encode(opener.read())
person muglikar    schedule 03.09.2016
comment
Я не понимаю причину отрицательного ответа на мой ответ. - person muglikar; 26.02.2017
comment
Вопрос был в том, может ли API видения Google принимать внешний URL-адрес изображения? Другими словами: может ли API Google принимать URL-адрес с любого внешнего сервера (например, imgur, flickr, s3) и возвращать ответ на это изображение. Если вопрос был в том, как я могу загрузить любой ресурс изображения в Интернете и обработать его с помощью Google Vision, то ваш ответ будет действительным. - person mmla; 09.04.2017
comment
Вы неправильно истолковали мой ответ, а также мое решение проблемы. Мое решение делает именно то, что задано в вопросе, то есть принимает URL-адрес с любого внешнего сервера и возвращает ответ на это изображение. - person muglikar; 26.05.2017
comment
@muglikar В вашем примере файл загружается локально, а затем отправляется в Vision API. Вопрос заключался в том, можете ли вы просто отправить только URL-адрес (а не само изображение) в Vision API для обработки (что он может, но только для URL-адресов, начинающихся с gs://). - person JJ Geewax; 03.07.2017