5Kマラソンを完走したものの筋肉痛で元気がない IoTおじさん こと アプリケーションサービス部の木次です。
前回は Amazon Nova Canvas をコンソールから使ってみましたが、今回は AWS CLI から試してみました。 前回の記事はこちらを参照してください。
前準備
ターミナルを開いてデフォルトのリージョンをバージニア北部 (us-east-1) に設定します。
% export AWS_DEFAULT_REGION=us-east-1
まずは利用出来る基盤モデルに Nova Canvas があることを確認します。
% aws bedrock list-foundation-models --query "modelSummaries[?contains(modelId, \`canvas\`)]"
[
{
"modelArn": "arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-canvas-v1:0",
"modelId": "amazon.nova-canvas-v1:0",
"modelName": "Nova Canvas",
"providerName": "Amazon",
"inputModalities": [
"TEXT",
"IMAGE"
],
"outputModalities": [
"IMAGE"
],
"responseStreamingSupported": false,
"customizationsSupported": [],
"inferenceTypesSupported": [
"ON_DEMAND"
],
"modelLifecycle": {
"status": "ACTIVE"
}
}
]
Amazon Nova Canvas の現時点のモデル ID は amazon.nova-canvas-v1:0 です。
jq コマンドを利用するため、必要であればインストールします。
入力画像は引き続き、弊社代表の画像 (input.jpg) を利用します。
背景を削除
タスクタイプに BACKGROUND_REMOVAL を指定して背景を削除します。
リクエスト形式
{
"taskType": "BACKGROUND_REMOVAL",
"backgroundRemovalParams": {
"image": "base64-encoded string"
}
}
応答フォーマット
{
"images": [
"base64-encoded string",
...
],
"error": "string"
}
bedrock-runtime の invoke-model を実行します。結果は jq コマンドを利用して画像データのみ抽出し、デコードしてファイルに保存します。
% BASE64_IMAGE=$(base64 -i input.jpg)
% BASE64_JSON=$(echo '{
"taskType": "BACKGROUND_REMOVAL",
"backgroundRemovalParams": {
"image": "'$BASE64_IMAGE'"
}
}' | base64)
% aws bedrock-runtime invoke-model \
--model-id amazon.nova-canvas-v1:0 \
--body "${BASE64_JSON}" \
background-removal.json
% cat background-removal.json | jq -r '.images[0]' | base64 --decode > output.png

背景のみ削除されましたね。
オブジェクトを削除
タスクタイプに INPAINTING を指定してオブジェクトを削除します。
リクエスト形式
{
"taskType": "INPAINTING",
"inPaintingParams": {
"image": "base64-encoded string",
"text": "string",
"negativeText": "string",
"maskPrompt": "string",
"maskImage": "base64-encoded string",
"returnMask": boolean # False by default
},
"imageGenerationConfig": {
"numberOfImages": int,
"height": int,
"width": int,
"cfgScale": float
}
}
maskPrompt 値に削除するオブジェクトを指定します。
% BASE64_IMAGE=$(base64 -i input.jpg)
% BASE64_JSON=$(echo '{
"taskType": "INPAINTING",
"inPaintingParams": {
"maskPrompt": "person",
"image": "'$BASE64_IMAGE'"
}
}' | base64)
% aws bedrock-runtime invoke-model \
--model-id amazon.nova-canvas-v1:0 \
--body "${BASE64_JSON}" \
background-removal.json
% cat background-removal.json | jq -r '.images[0]' | base64 --decode > output.png

背景だけが残りました。
オブジェクトを置換
タスクタイプに OUTPAINTING を指定して顔以外を変更します。
リクエスト形式
{
"taskType": "OUTPAINTING",
"outPaintingParams": {
"text": "string",
"negativeText": "string",
"image": "base64-encoded string",
"maskPrompt": "string",
"maskImage": "base64-encoded string",
"returnMask": boolean, # False by default
"outPaintingMode": "DEFAULT | PRECISE"
},
"imageGenerationConfig": {
"numberOfImages": int,
"height": int,
"width": int,
"cfgScale": float
}
}
maskPrompt に残す部分を、text に変更箇所を指定します。
% BASE64_IMAGE=$(base64 -i input.jpg)
% BASE64_JSON=$(echo '{
"taskType": "OUTPAINTING",
"outPaintingParams": {
"text": "a man in golf attire holding a golf club at a golf course",
"maskPrompt": "face",
"image": "'$BASE64_IMAGE'"
}
}' | base64)
% aws bedrock-runtime invoke-model \
--model-id amazon.nova-canvas-v1:0 \
--body "${BASE64_JSON}" \
background-removal.json
% cat background-removal.json | jq -r '.images[0]' | base64 --decode > output.png

「チャー・シュー・メン!」
