Amazon Web Services ブログ

Amazon Nova Canvas update: Virtual try-on とスタイルオプションが一般公開

商品を購入する前に、新しい服が自分にどのように似合うかをすばやく確認できたらいいのに、と思ったことはありませんか?あるいは、リビングに置いた家具はどう見えるか、気になったことはありませんか?本日、このような商品画像生成の課題に対応する Amazon Nova Canvas の新しい Virtual try-on 機能を紹介できることを嬉しく思います。さらに、スタイルの一貫性を向上させるための 8 つの新しいスタイルオプションが、text-to-image ベースのスタイルプロンプトに追加されました。これらの機能により、Nova Canvas AI を活用した画像生成機能が拡張され、顧客体験を向上させるリアルな製品の視覚化や、定型化された画像の作成作業がこれまでになく簡単になります。

今すぐ使い始める方法を簡単に見てみましょう。

Getting started

まず、通常の方法で Nova Canvas モデルにアクセスできることを確認します。Amazon Bedrock コンソールで [モデルアクセス] を選択し、アカウントの Amazon Nova Canvas を有効にして、ワークロードに適したリージョンを選択していることを確認します。モデルアクセスの有効化方法については、ブログ「Amazon Bedrock のモデルアクセスの有効化や制限値の引き上げができない時の対応方法」をご覧ください。すでに Nova Canvas にアクセスして使用している場合は、新機能が自動的に利用可能になるので、すぐに使い始めることができます。

Virtual try-on

最初のエキサイティングな新機能は Virtual try-on です。この機能を使用して、2 枚の写真をアップロードして Amazon Nova Canvas に依頼すると、現実的な仕上がりとなるようにそれらの画像が合成されます。これらの画像は、アパレル、アクセサリー、家具、および、多様な衣類を含む、様々な種類のその他の製品の写真が想定されます。たとえば、ソース画像として人物の写真、参照画像として衣服の写真を指定すると、Amazon Nova Canvas が同じ人が衣服を着ている新しい画像が作成されます。これを試してみましょう。

私はまず、2 つの画像を選択することから始めました。服の交換にぴったりだと思うポーズをしている私の写真と、AWS ブランドのパーカーの写真を 1 枚選びました。

Nova Canvas が扱える画像サイズは、最大 410 万ピクセル(2,048 x 2,048 に相当)であることに注意してください。(詳細要件は Amazon Nova ユーザーガイド(英語) を参照) 必要に応じて、これらの制限に合わせて画像のサイズを調整してください。また、この記事で取り上げた Python コードを実行したい場合は、Python 3.9 以降と Python パッケージ boto3 と pillow がインストールされていることを確認してください。

このパーカーを私の写真に適用するには、Amazon Bedrock ランタイムの invokeModel API を使っています。この API のリクエストとレスポンス構造の詳細については、Amazon Nova ユーザーガイド(英語) をご覧ください。コードは単純で、必要な推論パラメータはごくわずかです。私は "VIRTUAL_TRY_ON" という新しい taskType を使用しました。次に、virtualTryOnParams オブジェクトを使用して必要なパラメータをいくつか設定し、ソースイメージと参照イメージの両方を含め、必要な設定を指定しました。どちらのイメージも Base64 文字列に変換する必要があることに注意してください。

import base64

def load_image_as_base64(image_path): 
   """Helper function for preparing image data."""
   with open(image_path, "rb") as image_file:
      return base64.b64encode(image_file.read()).decode("utf-8")

inference_params = {
   "taskType": "VIRTUAL_TRY_ON",
   "virtualTryOnParams": {
      "sourceImage": load_image_as_base64("person.png"),
      "referenceImage": load_image_as_base64("aws-hoodie.jpg"),
      "maskType": "GARMENT",
      "garmentBasedMask": {"garmentClass": "UPPER_BODY"}
   }
}

Nova Canvas はマスキングを使用して画像を操作します。これは、マスキングテープを使用してペイントしたくない領域を保護するのと同様に、AI 画像生成で画像の特定の領域または領域に焦点を合わせながら、他の領域は保存できるようにする手法です。

マスキングには、3 種類のマスキングモードを使用できます。 maskType を適切な値に設定することで選択できます。今回は、日本語で衣料品を示す言葉である "GARMENT" タイプを使っているので、同時に、体のどの部分をマスクしたいかを指定する必要があります。私は "UPPER_BODY" を使用していますが、特に足をターゲットにしたい場合は "LOWER_BODY" や、 "FULL_BODY""FOOTWEAR" など他のものを使用してもかまいません。オプションの全リストは Amazon Nova ユーザーガイド(英語) を参照してください。

次に invokeModel API を呼び出し、これらの推論引数を渡して、生成されたイメージをディスクに保存します。

# Note: 上記の inference_params 変数が以下で参照されています。

import base64
import io
import json

import boto3
from PIL import Image

# Create the Bedrock Runtime client.
bedrock = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Prepare the invocation payload.
body_json = json.dumps(inference_params, indent=2)

# Invoke Nova Canvas.
response = bedrock.invoke_model(
   body=body_json,
   modelId="amazon.nova-canvas-v1:0",
   accept="application/json",
   contentType="application/json"
)

# Extract the images from the response.
response_body_json = json.loads(response.get("body").read())
images = response_body_json.get("images", [])

# Check for errors.
if response_body_json.get("error"):
   print(response_body_json.get("error"))

# Decode each image from Base64 and save as a PNG file.
for index, image_base64 in enumerate(images):
   image_bytes = base64.b64decode(image_base64)
   image_buffer = io.BytesIO(image_bytes)
   image = Image.open(image_buffer)
   image.save(f"image_{index}.png")

非常にエキサイティングな結果を得ました!

このように、私は AWS ブランドのパーカーを着ることができ、誇りに思います!
"GARMENT" mask type に加えて、"PROMPT""IMAGE" マスクも使用することができます。"PROMPT" では、ソース画像と参照画像も提供する必要がありますが、ソース画像のどの部分を置換するかを自然言語のプロンプトで指定します。これは、Nova Canvas の "INPAINTING""OUTPAINTING" タスクの仕組みと似ています。独自のイメージマスクを使用する場合は、 "IMAGE" mask type を使用し、マスクとして使用する白黒画像を指定します。黒はソースイメージで置き換えたいピクセルを示し、白は維持したいピクセルを示します。

この機能は小売業者にとって特に便利です。これを利用して、購入前に商品の見た目を確認することで、顧客がより適切な購入判断を下せるようになります。

Style options

アニメのスーパーヒーローになったらどんなふうになるのだろうといつも思っていました。以前は、Nova Canvasを使って自分の画像を操作できましたが、それを適切に行うには、優れたプロンプトエンジニアリングスキルに頼らざるを得ませんでした。
現在、Nova Canvasには事前にトレーニングされたスタイルオプションが付属しており、それを画像に適用して、お好みの芸術的スタイルに沿った高品質の結果を得ることができます。3Dアニメーションファミリーフィルム、デザインスケッチ、フラットベクターイラスト、グラフィックノベル、マキシマリズム、ミッドセンチュリーレトロ、フォトリアリズム、ソフトデジタルペインティングなど、8つのスタイルが用意されています。

それらの適用は、Nova Canvas API に追加のパラメーターを渡すのと同じくらい簡単です。例を試してみましょう。

「3D アニメーションファミリーフィルム」スタイルを使って AWS のスーパーヒーローのイメージを生成したいと思います。そのためには、 "TEXT_IMAGE" という taskType と、textstyle の 2 つのパラメータを含む textToImageParams オブジェクトを指定します。text パラメータには、作成したい画像を説明するプロンプトが含まれています。今回は「大きな AWS ロゴとケープが付いた黄色い衣装のスーパーヒーロー」と指定しています。style パラメータは、定義済みのスタイル値の 1 つを指定します。ここでは "3D_ANIMATED_FAMILY_FILM" を使用していますが、全リストはAmazon Nova ユーザーガイド(英語) に記載されています。

inference_params = {
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "text": "a superhero in a yellow outfit with a big AWS logo and a cape.",
        "style": "3D_ANIMATED_FAMILY_FILM",
    },
    "imageGenerationConfig": {
        "width": 1280,
        "height": 720,
        "seed": 321
    }
}

次に、前の例と同じように invokeModel API を呼び出します。(ここでは簡潔にするためにコードを省略しています)。そしてその結果は?さて、皆様ご判断いただければと思いますが、AWS のスーパーヒーローが、私の好きな色を、私が思い描いていた 3D アニメーションのファミリーフィルムのスタイルにあわせて着ています。とても満足していると言わざるを得ません。

本当に素晴らしいのは、コードとプロンプトをまったく同じにしたまま、スタイル属性の値を変更するだけで、まったく異なるスタイルの画像を生成できることです。これを試してみましょう。stylePHOTOREALISM に設定しました。

inference_params = {
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "text": "a superhero in a yellow outfit with a big AWS logo and a cape.",
        "style": "PHOTOREALISM",
    },
    "imageGenerationConfig": {
        "width": 1280,
        "height": 720,
        "seed": 7
    }
}

そして、その結果は印象的なものとなりました!私が説明したとおりのフォトリアリスティックなスーパーヒーロー。これは前に生成されたアニメスタイルとは全く異なるものとなり、必要な作業は、1 行のコードを変更することだけでした。

知っておくべきこと

利用可能なリージョン – Virtual try-on とスタイルオプションは、US East (N. Virginia)、Asia Pacific (Tokyo)、 Europe (Ireland) の Amazon Nova Canvas で利用いただけます。Amazon Nova Canvas の既存ユーザーは、新しいモデルに移行しなくてもすぐにこれらの機能を使用できます。

料金 – Amazon Bedrock 料金ページをご覧ください。

Virtual try-on は簡単に試すことができます。nova.amazon.com へアクセスし、人物と衣服の画像をアップロードして、様々な服の着せ替えを楽しんでください!

日本語で提供しているアセット、GenAI Design Studio もぜひお試しください。ワンクリックでデプロイでき、すぐに Nova Canvas をお試しいただくことができるようになっています。

始める準備ができたら、Nova Canvas ユーザーガイドを確認するか、AWS コンソールにアクセスしてください。

Matheus Guimaraes | @codingmatheus

Matheus Guimaraes

Matheus Guimaraes (@codingmatheus) は .NET と microservice のスペシャリストで、インターナショナル キーノートスピーカーです。また、AWS の開発者支援者25 年以上技術に携わってきた彼は、ジュニアゲームプログラマーから CTO、スタートアップの創設者まで、さまざまな役職を歴任してきました。Matheus は、あらゆる規模の企業のシステムの近代化と拡張を支援し、デジタルトランスフォーメーションを主導し、クラウドネイティブアーキテクチャを設計してきました。現在、彼は講演、ブログ、ビデオを通じて専門知識をグローバルに共有し、業界で他の企業の成長を支援することに情熱を注いでいます。テクノロジー以外にも、彼はゲーマー、スイマー、ミュージシャンであり、創造性とコードの強力な融合を信じています。