Модерирование изображений
Важно
Описанные ниже возможности сервиса Vision OCR устарели и перестали поддерживаться 14 мая 2024 года.
Чтобы определить, соответствует ли изображение таким признакам, как контент для взрослых
, шок-контент
, водяные знаки
, воспользуйтесь возможностью Классификация изображений.
Для этого в методе batchAnalyze в свойстве type
укажите Classification
, а в конфигурации укажите модель moderation.
Примеры
Перед началом работы
Чтобы воспользоваться примерами, установите cURL
Получите данные вашего аккаунта для аутентификации:
-
Получите IAM-токен для аккаунта на Яндексе или федеративного аккаунта.
-
Получите идентификатор каталога, на который у вашего аккаунта есть роль
ai.vision.user
или выше. -
При обращении к Vision OCR через API в каждом запросе передавайте полученные параметры:
-
Для Vision API и Classifier API:
Указывайте IAM-токен в заголовке
Authorization
в следующем формате:Authorization: Bearer <IAM-токен>
Идентификатор каталога указывайте в теле запроса в параметре
folderId
. -
Для OCR API:
- в заголовке
Authorization
указывайте IAM-токен; - в заголовке
x-folder-id
указывайте идентификатор каталога.
Authorization: Bearer <IAM-токен> x-folder-id <идентификатор_каталога>
- в заголовке
-
Vision OCR поддерживает два способа аутентификации с сервисным аккаунтом:
-
С помощью IAM-токена:
-
Полученный IAM-токен передавайте в заголовке
Authorization
в следующем формате:Authorization: Bearer <IAM-токен>
-
С помощью API-ключей.
Используйте API-ключи, если у вас нет возможности автоматически запрашивать IAM-токен.
-
Полученный API-ключ передавайте в заголовке
Authorization
в следующем формате:Authorization: Api-Key <API-ключ>
Не указывайте в запросах идентификатор каталога — сервис использует каталог, в котором был создан сервисный аккаунт.
Примените модель для модерации
-
Подготовьте файл изображения, соответствующий требованиям:
- Поддерживаемые форматы файлов: JPEG, PNG, PDF. MIME-тип
файла указывайте в свойствеmime_type
. По умолчаниюimage
. - Максимальный размер файла: 1 МБ.
- Размер изображения не должен превышать 20 мегапикселей (длина × ширина).
Примечание
Нужно изображение? Скачайте пример
. - Поддерживаемые форматы файлов: JPEG, PNG, PDF. MIME-тип
-
Кодируйте файл в формат Base64:
UNIXWindowsPowerShellPythonNode.jsJavaGobase64 -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_path): with open(file_path, "rb") as fid: file_content = fid.read() return base64.b64encode(file_content).decode("utf-8")
// Считайте содержимое файла в память. 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)
-
Создайте файл с телом запроса, например
body.json
:body.json:
{ "folderId": "b1gvmob95yys********", "analyze_specs": [{ "content": "iVBORw0KGgo...", "features": [{ "type": "CLASSIFICATION", "classificationConfig": { "model": "moderation" } }] }] }
Где:
folderId
– идентификатор любого каталога, на который у вашего аккаунта есть рольai.vision.user
или выше.analyze_specs: content
– изображение, кодированное в Base64.
-
Отправьте запрос с помощью метода batchAnalyze и сохраните ответ в файл, например
output.json
:BashCMDPowerShellexport IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '@body.json' \ https://vision.api.cloud.yandex.net/vision/v1/batchAnalyze > output.json
set IAM_TOKEN=<IAM-токен> curl ^ --request POST ^ --header "Content-Type: application/json" ^ --header "Authorization: Bearer %IAM_TOKEN%" ^ --data "@body.json" ^ https://vision.api.cloud.yandex.net/vision/v1/batchAnalyze > output.json
$Env:IAM_TOKEN="<IAM-токен>" curl ` --request POST ` --header "Content-Type: application/json" ` --header "Authorization: Bearer $Env:IAM_TOKEN" ` --data '@body.json' ` https://vision.api.cloud.yandex.net/vision/v1/batchAnalyze > output.json
Где
IAM_TOKEN
— IAM-токен, полученный перед началом работы.В ответе будут содержаться признаки и вероятность соответствия этим признакам. По этим признакам вы можете модерировать изображение:
{ "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
Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Скопируйте в терминал функцию:
vision_moderation() { curl --header "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 изображение, переданное в аргументах функции.
-
Теперь вы можете вызывать эту функцию, передав путь к изображению в аргументах:
vision_moderation path/to/image.jpg
Совет
Если вызов функции завершился с ошибкой 408 Request Timeout
, попробуйте решить проблему одним из способов:
- отправьте запрос повторно;
- уменьшите размер изображения;
- загрузите меньшее количество изображений в batchAnalyze.