이미지 캡셔닝을 사용하여 이미지 설명 가져오기

시각적 캡셔닝을 사용하면 이미지와 관련된 설명을 생성할 수 있습니다. 이 정보를 다양한 용도로 사용할 수 있습니다.

  • 저장 및 검색을 위해 이미지에 대한 보다 자세한 메타데이터를 가져옵니다.
  • 접근성 사용 사례를 지원하도록 자동 캡셔닝을 생성합니다.
  • 제품 및 시각적 애셋에 대한 빠른 설명을 확인합니다.
자막 처리된 샘플 이미지

이미지 소스: Unsplash산토시 쿠마르(자르기)

자막(짧은 형식): 흰색 물방울 무늬가 있는 파란색 셔츠가 고리에 걸려 있음

지원 언어

시각적 캡셔닝은 다음 언어로 제공됩니다.

  • 영어(en)
  • 프랑스어(fr)
  • 독일어(de)
  • 이탈리아어(it)
  • 스페인어(es)

성능 및 제한사항

모델을 사용할 때 다음 한도가 적용됩니다.

한도
프로젝트별 분당 최대 API 요청 수(짧은 형식) 500
응답으로 반환되는 최대 토큰 수(짧은 형식) 토큰 64개
요청에 허용되는 최대 토큰 수(VQA 짧은 형식만) 토큰 80개

이 모델을 사용할 때 다음 서비스 지연 시간 추정치가 적용됩니다. 이러한 값은 설명을 위한 것이며 서비스가 보장되지 않습니다.

지연 시간
API 요청(짧은 형식) 1.5초

위치

위치는 데이터가 영구 저장되는 위치를 제어하기 위해 요청에서 지정할 수 있는 리전입니다. 사용 가능한 리전 목록은 Vertex AI의 생성형 AI 위치를 참조하세요.

책임감 있는 AI 안전 필터링

이미지 캡션 및 시각적 질의 응답(VQA) 기능 모델은 사용자가 구성할 수 있는 안전 필터를 지원하지 않습니다. 그러나 전반적인 Imagen 안전 필터링은 다음 데이터에 적용됩니다.

  • 사용자 입력
  • 모델 출력

따라서 Imagen에서 이러한 안전 필터를 적용하면 출력이 샘플 출력과 다를 수 있습니다. 다음 예시를 고려하세요.

필터링된 입력

입력이 필터링된 경우 응답은 다음과 비슷합니다.

{
  "error": {
    "code": 400,
    "message": "Media reasoning failed with the following error: The response is blocked, as it may violate our policies. If you believe this is an error, please send feedback to your account team. Error Code: 63429089, 72817394",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::invalid_argument: Media reasoning failed with the following error: The response is blocked, as it may violate our policies. If you believe this is an error, please send feedback to your account team. Error Code: 63429089, 72817394 [google.rpc.error_details_ext] { message: \"Media reasoning failed with the following error: The response is blocked, as it may violate our policies. If you believe this is an error, please send feedback to your account team. Error Code: 63429089, 72817394\" }"
      }
    ]
  }
}

필터링된 출력

반환된 응답 수가 지정한 샘플 수보다 적으면 누락된 응답이 책임감 있는 AI에 의해 필터링된 것입니다. 예를 들어 다음은 "sampleCount": 2가 포함된 요청에 대한 응답이지만 응답 중 하나가 필터링됩니다.

{
  "predictions": [
    "cappuccino"
  ]
}

모든 출력이 필터링되면 응답은 다음과 유사한 빈 객체입니다.

{}

짧은 형식의 이미지 자막 가져오기

다음 샘플을 사용하여 이미지에 짧은 형식의 자막을 생성합니다.

REST

imagetext 모델 요청에 대한 자세한 내용은 imagetext 모델 API 참조를 확인하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • LOCATION: 프로젝트의 리전입니다. 예를 들면 us-central1, europe-west2, asia-northeast3입니다. 사용 가능한 리전 목록은 Vertex AI의 생성형 AI 위치를 참조하세요.
  • B64_IMAGE: 자막을 가져올 이미지입니다. 이미지는 base64 인코딩 바이트 문자열로 지정되어야 합니다. 크기 제한: 10MB.
  • RESPONSE_COUNT: 생성할 이미지 자막의 수입니다. 허용되는 정수 값: 1~3.
  • LANGUAGE_CODE: 지원되는 언어 코드 중 하나입니다. 지원되는 언어는 다음과 같습니다.
    • 영어(en)
    • 프랑스어(fr)
    • 독일어(de)
    • 이탈리아어(it)
    • 스페인어(es)

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagetext:predict

JSON 요청 본문:

{
  "instances": [
    {
      "image": {
          "bytesBase64Encoded": "B64_IMAGE"
      }
    }
  ],
  "parameters": {
    "sampleCount": RESPONSE_COUNT,
    "language": "LANGUAGE_CODE"
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagetext:predict"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagetext:predict" | Select-Object -Expand Content
다음은 "sampleCount": 2가 포함된 요청의 샘플 응답입니다. 응답은 예측 문자열 2개를 반환합니다.

영어(en):

{
  "predictions": [
    "a yellow mug with a sheep on it sits next to a slice of cake",
    "a cup of coffee with a heart shaped latte art next to a slice of cake"
  ],
  "deployedModelId": "DEPLOYED_MODEL_ID",
  "model": "projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID",
  "modelDisplayName": "MODEL_DISPLAYNAME",
  "modelVersionId": "1"
}

스페인어(es):

{
  "predictions": [
    "una taza de café junto a un plato de pastel de chocolate",
    "una taza de café con una forma de corazón en la espuma"
  ]
}

Python

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Python 설정 안내를 따르세요. 자세한 내용은 Vertex AI Python API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

이 샘플에서는 load_from_file 메서드를 사용하여 로컬 파일을 기본 Image로 참조해 자막을 가져옵니다. 기본 이미지를 지정한 후 ImageTextModel에서 get_captions 메서드를 사용하고 출력을 인쇄합니다.


import vertexai
from vertexai.preview.vision_models import Image, ImageTextModel

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# input_file = "input-image.png"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = ImageTextModel.from_pretrained("imagetext@001")
source_img = Image.load_from_file(location=input_file)

captions = model.get_captions(
    image=source_img,
    # Optional parameters
    language="en",
    number_of_results=2,
)

print(captions)
# Example response:
# ['a cat with green eyes looks up at the sky']

Node.js

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Node.js 설정 안내를 따르세요. 자세한 내용은 Vertex AI Node.js API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

이 샘플에서는 PredictionServiceClient에서 predict 메서드를 호출합니다. 서비스는 제공된 이미지의 자막을 반환합니다.

/**
 * TODO(developer): Update these variables before running the sample.
 */
const projectId = process.env.CAIP_PROJECT_ID;
const location = 'us-central1';
const inputFile = 'resources/cat.png';

const aiplatform = require('@google-cloud/aiplatform');

// Imports the Google Cloud Prediction Service Client library
const {PredictionServiceClient} = aiplatform.v1;

// Import the helper module for converting arbitrary protobuf.Value objects
const {helpers} = aiplatform;

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: `${location}-aiplatform.googleapis.com`,
};

// Instantiates a client
const predictionServiceClient = new PredictionServiceClient(clientOptions);

async function getShortFormImageCaptions() {
  const fs = require('fs');
  // Configure the parent resource
  const endpoint = `projects/${projectId}/locations/${location}/publishers/google/models/imagetext@001`;

  const imageFile = fs.readFileSync(inputFile);
  // Convert the image data to a Buffer and base64 encode it.
  const encodedImage = Buffer.from(imageFile).toString('base64');

  const instance = {
    image: {
      bytesBase64Encoded: encodedImage,
    },
  };
  const instanceValue = helpers.toValue(instance);
  const instances = [instanceValue];

  const parameter = {
    // Optional parameters
    language: 'en',
    sampleCount: 2,
  };
  const parameters = helpers.toValue(parameter);

  const request = {
    endpoint,
    instances,
    parameters,
  };

  // Predict request
  const [response] = await predictionServiceClient.predict(request);
  const predictions = response.predictions;
  if (predictions.length === 0) {
    console.log(
      'No captions were generated. Check the request parameters and image.'
    );
  } else {
    predictions.forEach(prediction => {
      console.log(prediction.stringValue);
    });
  }
}
await getShortFormImageCaptions();

이미지 캡셔닝 매개변수 사용

이미지 자막을 가져오면 사용 사례에 따라 여러 매개변수를 설정할 수 있습니다.

알림당 결과 수

결과 수 매개변수를 사용하여 전송하는 요청마다 반환되는 자막 양을 제한합니다. 자세한 내용은 imagetext(이미지 캡셔닝) 모델 API 참조를 확인하세요.

시드 번호

생성된 설명을 확정하도록 요청에 추가하는 숫자입니다. 요청에 시드 번호를 추가하면 매번 같은 예측(설명)을 가져올 수 있습니다. 그러나 이미지 자막은 반드시 동일한 순서로 반환되지 않습니다. 자세한 내용은 imagetext(이미지 캡셔닝) 모델 API 참조를 확인하세요.

다음 단계

Imagen 및 Vertex AI의 기타 생성형 AI 제품 관련 문서 읽기: