Модерирование изображений

Классификация изображений сейчас находится на стадии Preview.

Чтобы определить, соответствует ли изображение таким признакам, как контент для взрослых, шок-контент, водяные знаки, воспользуйтесь возможностью Классификация изображений.

Для этого в методе batchAnalyze в свойстве type укажите Classification, а в конфигурации укажите модель moderation.

Примеры

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

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

  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:

    body.json:

    {
        "folderId": "b1gvmob95yysaplct532",
        "analyze_specs": [{
            "content": "iVBORw0KGgo...",
            "features": [{
                "type": "CLASSIFICATION",
                "classificationConfig": {
                    "model": "moderation"
                }
            }]
        }]
    }
    
  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": [
        {
         "classification": {
          "properties": [
           {
            "name": "adult",
            "probability": 0.0017486262368038297
           },
           {
            "name": "gruesome",
            "probability": 0.0002884353743866086
           },
           {
            "name": "text",
            "probability": 0.13789896667003632
           },
           {
            "name": "watermarks",
            "probability": 0.99908816814422607
           }
          ]
         }
        }
       ]
      }
     ]
    }
    

Готовая функция для отправки запросов в bash

  1. Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

  2. Скопируйте в терминал функцию:

    vision_moderation() {
        curl -H "Authorization: Bearer `yc iam create-token`" \
        "https://vision.api.cloud.yandex.net/vision/v1/batchAnalyze" \
        -d @<(cat << EOF
    {
        "folderId": "`yc config get folder-id`",
        "analyze_specs": [{
            "content": "`base64 -i $1`",
            "features": [{
                "type": "CLASSIFICATION",
                "classificationConfig": {
                    "model": "moderation"
                }
            }]
        }]
    }
    EOF
    )
    }
    

    Пояснения:

    • yc iam create-token — получить IAM-токен.
    • -d @<(cat << EOF ... EOF) — сформировать тело запроса.
    • yc config get folder-id — получить ID каталога, выбранного по умолчанию в CLI.
    • base64 -i $1 — кодировать в Base64 изображение, переданное в аргументах функции.
  3. Теперь вы можете вызывать эту функцию, передав путь к изображению в аргументах:

    vision_moderation path/to/image.jpg