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
「チャー・シュー・メン!」