Amazon Web Services ブログ

インテリアデザインと商品写真における Amazon Nova Canvas の実用例

本記事は 2025 年 5 月 29 日に AWS Machine Learning Blog で公開された Real-world applications of Amazon Nova Canvas for interior design and product photography を翻訳したものです。翻訳はソリューションアーキテクトの川戸渉が担当しました。
ブログ翻訳時点(2025 年 6 月)では、Amazon Nova Canvas は英語のみをサポートしており、プロンプトは英語で記載する必要があります。本記事では理解の助けになるよう、英文プロンプトに和訳を併記しています。

AI 画像生成技術が今日のビジネスの現場で重要性を増す中、多くの企業や組織は、業界特有の課題を解決するためにこの技術をどう活用すべきか模索しています。AI 画像生成には計り知れない可能性があるものの、自社の独自のニーズに合わせて効果的に活用できている企業はまだ少ないのが実情です。

この記事では、Amazon Nova Canvas が高度な画像生成技術を通じて実際のビジネス課題をどのように解決できるかを探ります。特に、この技術の強力さと柔軟性を示す 2 つの具体的なユースケースに焦点を当てています:

  • インテリアデザイン – セグメンテーションを活用した画像調整技術により、インテリアデザイナーはデザイン案を素早く何パターンも試せるようになり、クライアントへのプレゼンテーション資料を作成する時間とコストを大幅に削減できます
  • 商品写真 – アウトペインティング機能を使えば、商品の撮影担当者は大がかりな撮影をしなくても、商品をさまざまな環境の中で魅力的に見せる画像を作成できます

インテリアデザイン会社でデザイン案の作成プロセスを効率化したい方も、小売業で商品写真の撮影コストを削減したい方も、この記事が役に立ちます。Amazon Nova Canvas の先進機能を活用して、ビジネス目標を達成する方法を紹介します。それでは、これらのパワフルなツールがどのように画像制作の流れを一新するのか、具体的に見ていきましょう。

前提条件

本ソリューションを試すには、以下の前提条件が必要です:

インテリアデザイン

あるインテリアデザイン会社は次のような問題を抱えていました:デザイナーたちがクライアントへのプレゼンテーション用に写実的なデザインを作成するのに何時間もかけており、同じ部屋に対して異なるテーマや装飾要素を用いた複数のバリエーションが必要でした。従来の 3D レンダリングは時間がかかり、コストも高くなります。この問題を解決するために、Amazon Nova Canvas の画像調整機能 ( セグメンテーション ) を使用することで、既存の部屋の写真を素早く様々なバージョンに変換できます。元となる画像を分析して主要な形や構造を識別し、これをもとにセグメンテーションマスクが作成されます。このマスクが画像生成をガイドする役割を果たします。生成された新しい画像は元の画像のレイアウトを忠実に踏襲しながらも、各領域の境界内で AI モデルが創造的なアレンジを加えることができます。

以下の画像は、元の入力画像、入力に基づいたセグメンテーションマスク、そして 2 つの異なるプロンプトに基づく出力例を示しています。

リビングルームの入力画像 リビングルームのセグメンテーションマスク
プロンプト : A minimalistic living room
( ミニマリスティックなリビングルーム )
プロンプト : A coastal beach themed living room
( 海辺をテーマにしたリビングルーム )

この記事では、リビングルームの基本的な構造はそのままに、インテリアのデザイン要素だけを変更する方法をご紹介します。この手法を使えば、簡単なプロンプトと元の写真だけで、わずか数分のうちに様々なデザインバリエーションを作成できます。下記のコードは、セグメンテーション機能を使った画像加工に必要な API リクエストの構造を示しています。変換に必要な各種設定は API リクエストを通してモデルに送信されます。なお、画像が不自然に歪まないよう、出力画像のサイズは入力画像と同じにすることをお勧めします。

{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "conditionImage": string (Base64 encoded image), #Original living room
        "controlMode": "SEGMENTATION", 
        "controlStrength": float, #Specify how closely to follow the condition       #image (0.0-1.0; Default: 0.7).
        "text": string, #A minimalistic living room ( ミニマリスティックなリビングルーム )
        "negativeText": string
    },
    "imageGenerationConfig": {
        "width": int,
        "height": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}

taskType オブジェクトは実行する処理タイプを指定するもので、それぞれの処理タイプに応じたパラメータがあります。これに対して、imageGenerationConfig オブジェクトには、背景削除を除くすべての処理タイプに共通する基本パラメータが含まれています。各種生成タイプに関するリクエスト / レスポンス構造の詳細については、Request and response structure for image generation を参照してください。

以下の Python コードは、Amazon Bedrock 上の Amazon Nova Canvas v1.0 モデルを呼び出して画像加工を行う方法を示しています:

import base64  #For encoding/decoding base64 data
import io  #For handling byte streams
import json  #For JSON operations
import boto3  #AWS SDK for Python
from PIL import Image  #Python Imaging Library for image processing
from botocore.config import Config  #For AWS client configuration
#Create a variable to fix the region to where Nova Canvas is enabled 
region = "us-east-1"

#Create Bedrock client with 300 second timeout
bedrock = boto3.client(service_name='bedrock-runtime', region_name=region,
        config=Config(read_timeout=300))

#Original living room image in current working directory
input_image_path = "Original Living Room.jpg"

#Read and encode the image
def prepare_image(image_path):
    with open(image_path, 'rb') as image_file:
        image_data = image_file.read()
        base64_encoded = base64.b64encode(image_data).decode('utf-8')
    return base64_encoded

#Get the base64 encoded image
input_image = prepare_image(input_image_path)

#Set the content type and accept headers for the API call
accept = "application/json"
content_type = "application/json"

#Prepare the request body
api_request = json.dumps({
       "taskType": "TEXT_IMAGE",  #Type of generation task
       "textToImageParams": {
             "text": "A minimalistic living room",  #Prompt ( ミニマリスティックなリビングルーム )
             "negativeText": "bad quality, low res",  #What to avoid
             "conditionImage": input_image,  #Base64 encoded original living room
             "controlMode": "SEGMENTATION"  #Segmentation mode
            },
       "imageGenerationConfig": {
             "numberOfImages": 1,  #Generate one image
             "height": 1024,  #Image height, same as the input image
             "width": 1024,  #Image width, same as the input image
             "seed": 0, #Modify seed value to get variations on the same prompt
             "cfgScale": 7.0  #Classifier Free Guidance scale
            }
})

#Call the model to generate image
response = bedrock.invoke_model(body=api_request, modelId='amazon.nova-canvas-v1:0', accept=accept, contentType=content_type)

#Parse the response body
response_json = json.loads(response.get("body").read())

#Extract and decode the base64 image
base64_image = response_json.get("images")[0]  #Get first image
base64_bytes = base64_image.encode('ascii')  #Convert to ASCII
image_data = base64.b64decode(base64_bytes)  #Decode base64 to bytes

#Display the generated image
output_image = Image.open(io.BytesIO(image_data))
output_image.show()
#Save the image to current working directory
output_image.save('output_image.png')

商品写真

あるスポーツシューズ企業は次のような課題を抱えていました:新しく作ったランニングシューズが様々な場所 ( 陸上トラック、自然の中など ) で使えることをアピールしたいのですが、それぞれの環境で実際に撮影すると、場所代や撮影費用がかさんでしまいます。さらに、シューズの色違いやデザインの違いなど、すべてのバリエーションで撮影するとなると、さらに多くの時間と費用がかかってしまいます。こうした問題の解決策として、Amazon Nova Canvas を使用して 1 枚の商品写真から多様なショットを生成することができます。アウトペインティング機能を使えば、画像の背景を置き換えることが可能です。モデルに対して “Shoes ( 靴 )” といったマスクプロンプトを含めることで、画像の特定部分を保存するよう指示できます。マスクプロンプトとは、アウトペインティングの処理中に変更せずにそのままにしたい画像内のオブジェクトを自然言語で説明したものです。その後、新しいプロンプトを使って、さまざまな異なる背景の靴の画像を生成できます。

以下の画像は、最初の入力画像、“Shoes ( 靴 )” 用に作成されたマスク、そして2つの異なるプロンプトに基づく出力例を示しています。

ランニングシューズのスタジオ写真 “Shoes ( 靴 )” 用に作成されたマスク
プロンプト : Product photoshoot of sports shoes placed on a running track outdoor
( 屋外の陸上トラックに置かれたスポーツシューズの商品撮影 )
プロンプト : Product photoshoot of sports shoes on rocky terrain, forest background
( 岩の多い地形、森の背景でのスポーツシューズの商品撮影 )

マスクプロンプトの代わりに、保存したい画像の領域を定義するマスク画像を入力することもできます。マスク画像は入力画像と同じサイズでなければなりません。編集する領域は完全な白で、保存する領域は完全な黒で表示します。アウトペインティングのモードは、画像の保持部分と変更部分をどのように処理するかを決めるパラメータです。DEFAULT モードを選ぶと、保持したい部分と変更する部分の境目が自然につながるようになります。これは、元の背景と似た雰囲気の新しい背景を作りたい場合に適しています。ただし、元の背景と全く異なる背景に変更しようとすると、ハロー効果が現れることがあります。一方、PRECISE モードでは、保持部分と変更部分の境界をはっきりと区切ります。これは背景を大きく変更する場合に適しており、よりクリアな境界線が得られます。

この記事では、商品の正確さを維持しながらアウトペインティングを使用し、1 枚のスタジオ写真を異なる環境にシームレスに変換する方法を紹介します。以下のコードは、アウトペインティングのための API リクエスト構造を示しています:

{
    "taskType": "OUTPAINTING",
    "outPaintingParams": {
        "image": string (Base64 encoded image),
        "maskPrompt": string, #Shoes
        "maskImage": string, #Base64 encoded image
        "outPaintingMode": "DEFAULT" | "PRECISE", 
        "text": string,  #Product photoshoot of sports shoes on rocky terrain ( 岩の多い地形でのスポーツシューズの商品撮影 )
        "negativeText": string
    },
    "imageGenerationConfig": {
        "numberOfImages": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int
    }
}

以下の Python コードは、Amazon Bedrock 上の Amazon Nova Canvas v1.0 モデルを呼び出してアウトペインティングによる背景置換を実行する方法を示しています。より多くのコード例については、Code examples を参照してください。

import base64  #For encoding/decoding base64 data
import io  #For handling byte streams
import json  #For JSON operations
import boto3  #AWS SDK for Python
from PIL import Image  #Python Imaging Library for image processing
from botocore.config import Config  #For AWS client configuration
#Create a variable to fix the region to where Nova Canvas is enabled 
region = "us-east-1"

#Create Bedrock client with 300 second timeout
bedrock = boto3.client(service_name='bedrock-runtime', region_name=region,
        config=Config(read_timeout=300))

#Original studio image of shoes in current working directory
input_image_path = "Shoes.png"

#Read and encode the image
def prepare_image(image_path):
    with open(image_path, 'rb') as image_file:
        image_data = image_file.read()
        base64_encoded = base64.b64encode(image_data).decode('utf-8')
    return base64_encoded

#Get the base64 encoded image
input_image = prepare_image(input_image_path)

#Set the content type and accept headers for the API call
accept = "application/json"
content_type = "application/json"

#Prepare the request body
api_request = json.dumps({
        "taskType": "OUTPAINTING",
        "outPaintingParams": {
             "image": input_image,
             "maskPrompt": "Shoes", 
             "outPaintingMode": "DEFAULT", 
             "text": "Product photoshoot of sports shoes placed on a running track outdoor", # 屋外の陸上トラックに置かれたスポーツシューズの商品撮影
             "negativeText": "bad quality, low res"
            },
        "imageGenerationConfig": {
             "numberOfImages": 1,
             "seed": 0, #Modify seed value to get variations on the same prompt
             "cfgScale": 7.0
            }
})

#Call the model to generate image
response = bedrock.invoke_model(body=api_request, modelId='amazon.nova-canvas-v1:0', accept=accept, contentType=content_type)

#Parse the response body
response_json = json.loads(response.get("body").read())

#Extract and decode the base64 image
base64_image = response_json.get("images")[0]  #Get first image
base64_bytes = base64_image.encode('ascii')  #Convert to ASCII
image_data = base64.b64decode(base64_bytes)  #Decode base64 to bytes

#Display the generated image
output_image = Image.open(io.BytesIO(image_data))
output_image.show()
#Save the image to current working directory
output_image.save('output_image.png')

クリーンアップ

ソリューションのテストが完了したら、使用していないリソースによる課金を防ぐため、以下のリソースをクリーンアップしてください:

  • SageMaker ノートブックインスタンス内の Jupyter ノートブックをバックアップしましょう
  • SageMaker ノートブックインスタンスをシャットダウンし、削除してください

コストに関する考慮事項

AWS にデプロイしたソリューションでは、以下の費用が発生します:

  • Amazon Bedrock での生成 AI 推論に対する料金が発生します。詳細は Amazon Bedrock の料金を参照してください。
  • SageMaker ノートブックインスタンスの使用料が発生します。詳細は Amazon SageMaker AI の料金を参照してください。

まとめ

この記事では、ビジネスに大きな価値をもたらす 2 つのシナリオを通じて、Amazon Nova Canvas の実践的な活用法を紹介しました。従来は何時間もかかっていた複数のデザインバリエーションや多様な環境の制作が、わずか数分で可能になります。Amazon Nova Canvas を導入することで、従来の視覚コンテンツ制作にかかるコストを大幅に削減できるでしょう。Amazon Nova Canvas が提供するその他の機能については、Generating images with Amazon Nova のドキュメントをご覧ください。

次のステップとして、まずは自社のビジネスニーズに最も合致する一つのユースケースから始めることをお勧めします。この記事で紹介したコード例をベースとして、お客様固有の要件に合わせてカスタマイズしてください。基本的な実装に慣れたら、複数の技術を組み合わせながら段階的に規模を拡大していきましょう。また、時間の短縮やコスト削減の実績を記録し、投資対効果を測定することもお忘れなく。企業規模での導入についてさらに詳しいガイダンスが必要な場合は、担当の AWS アカウントチームにご相談ください。


著者について

Arjun Singh は、Amazon のシニアデータサイエンティストとして活躍中で、人工知能、機械学習、ビジネスインテリジェンスの分野に精通しています。ビジュアル志向の人物であり、コンテンツ作成における生成 AI 技術に強い関心を持っています。顧客と協力して、顧客の目標達成に向けた機械学習および AI ソリューションの構築に取り組んでいます。シンシナティ大学にて情報システムの修士課程を修了。仕事以外では、テニスや筋トレ、新しいスキルの習得を趣味としています。