Как начать работать c Vision

Этот раздел описывает, как начать использовать Vision API для анализа изображений.

Перед началом

Чтобы воспользоваться примерами в этом разделе:

  1. На странице биллинга убедитесь, что платежный аккаунт находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.
  2. Убедитесь, что у вас установлена утилита cURL, используемая в примерах.
  3. Получите идентификатор любого каталога, на который у вашего аккаунта есть роль editor или выше.
  4. Получите IAM-токен для своего аккаунта на Яндексе.

Чтобы выполнять эти операции от имени сервисного аккаунта:

  1. Назначьте сервисному аккаунту роль editor или выше на каталог, в котором он был создан.
  2. Не указывайте в запросе идентификатор каталога — сервис использует каталог, в котором был создан сервисный аккаунт.
  3. Выберите способ аутентификации: получите IAM-токен или API-ключ.

Проанализируйте изображение

Вы можете использовать любые возможности для анализа из списка. Для примера, воспользуемся возможностью Распознавание текста:

  1. Подготовьте файл изображения, соответствующий требованиям:

    • Поддерживаемые форматы файлов: JPEG, PNG, PDF.

      MIME-тип файла указывается указывается в свойстве mime_type. По умолчанию image.

    • Максимальный размер файла: 1 МБ.

    • Размер изображения не должен превышать 20 мегапикселей (длина x ширина).

    Примечание

    Нужен пример изображения? Скачайте изображение дорожного знака, предупреждающего о пингвинах.

  2. Кодируйте файл в формат Base64:

    $ base64 -i input.jpg > output.txt
    
    C:> Base64.exe -e input.jpg > output.txt
    
    [Convert]::ToBase64String([IO.File]::ReadAllBytes("./input.jpg")) > output.txt
    
    # Импортируйте библиотеку для кодирования в Base64
    import base64
    
    # Создайте функцию, которая кодирует файл и возвращает результат.
    def encode_file(file):
      file_content = file.read()
      return base64.b64encode(file_content)
    
    // Считайте содержимое файла в память.
    var fs = require('fs');
    var file = fs.readFileSync('/path/to/file');
    
    // Получите содержимое файла в формате Base64.
    var encoded = Buffer.from(file).toString('base64');
    
    // Импортируйте библиотеку для кодирования в Base64.
    import org.apache.commons.codec.binary.Base64;
    
    // Получите содержимое файла в формате Base64.
    byte[] fileData = Base64.encodeBase64(yourFile.getBytes());
    
    import (
        "bufio"
        "encoding/base64"
        "io/ioutil"
        "os"
    )
    
    // Откройте файл
    f, _ := os.Open("/path/to/file")
    
    // Прочитайте содержимое файла.
    reader := bufio.NewReader(f)
    content, _ := ioutil.ReadAll(reader)
    
    // Получите содержимое файла в формате Base64.
    base64.StdEncoding.EncodeToString(content)
    
  3. Создайте файл с телом запроса, например body.json. В свойстве content укажите изображение, кодированное в Base64.

    Чтобы сервис автоматически определил язык текста, укажите в конфигурации свойство "language_codes": ["*"].

    body.json:

    {
        "folderId": "b1gvmob95yysaplct532",
        "analyze_specs": [{
            "content": "iVBORw0KGgo...",
            "features": [{
                "type": "TEXT_DETECTION",
                "text_detection_config": {
                    "language_codes": ["*"]
                }
            }]
        }]
    }
    
  4. Отправьте запрос с помощью метода batchAnalyze и сохраните ответ в файл, например output.json:

    $ export IAM_TOKEN=CggaATEVAgA...
    $ curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer ${IAM_TOKEN}" \
        -d '@body.json' \
        https://vision.api.cloud.yandex.net/vision/v1/batchAnalyze > output.json
    

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

    {
      "results": [{
        "results": [{
          "textDetection": {
            "pages": [{
              "blocks": [{
                "boundingBox": { ... },
                "lines": [{
                    "boundingBox": { ... },
                    "words": [{
                      "boundingBox": {
                        "vertices": [{
                            "x": "504",
                            "y": "760"
                          },
                          {
                            "x": "504",
                            "y": "836"
                          },
                          {
                            "x": "826",
                            "y": "836"
                          },
                          {
                            "x": "826",
                            "y": "760"
                          }
                        ]
                      },
                      "languages": [{
                        "languageCode": "en",
                        "confidence": 0.9520227313
                      }],
                      "text": "PENGUINS",
                      "confidence": 0.9520227313
                    }],
                    "confidence": 0.9520227313
                  },
                  ...
                ]
              }],
              "width": "1920",
              "height": "1280"
            }]
          }
        }]
      }]
    }
    
  5. Чтобы получить все распознанные слова с изображения, найдите все строки с свойством text, например с помощью grep:

    $ grep -o "\"text\":\s\".*\"" output.json
    "text": "PENGUINS"
    "text": "CROSSING"
    "text": "SLOW"
    

Что дальше