サメの七変化 !

Amazon Nova Canvas の Image Variation & Conditioning が魅せるビジュアル革命

- LINE で気軽に画像生成

2025-05-01
デベロッパーのためのクラウド活用方法

Author : 奥村 美生

こんにちは ! AWS Solution Architect の奥村美生 (みみ) です。

2025 年 3 月 1 日、日本の AWS ユーザーグループ JAWS-UG (AWS User Group – Japan) によるイベント「JAWS DAYS 2025」でのライトニングトーク 「恒例 ! AWS エンジニアたちの怒涛の LT」にて、私が開発したアプリケーション「JAWS な answer💡〜 JAWS が JAWSに答えます! 〜」を発表しました。本記事では、このアプリケーションの機能とアーキテクチャについてご紹介します。このアーキテクチャを参考にすることで、LINE と Amazon Nova Canvas を活用した AI 画像生成サービスを効率的に開発することができます。

アプリ開発の動機は、JAWS DAYS 2025 での登壇が決まった際に、JAWS-UG のサメのロゴ を生成 AI で面白く加工できないかと考えたことがきっかけです。2024 年の AWS re:Invent で発表された、AWS 独自の基盤モデルである「Amazon Nova Canvas」の機能を活用し、創造的なアプリケーションを実現しました。

実際に JAWS DAYS 2025 では、参加者の皆様にアプリを体験していただき、Image Variation 機能を使ってサメのロゴがドラゴン風になるなど、様々な創造的なロゴバリエーションを生成することができました。参加者の皆様の想像力が形になる瞬間を共有できたことが何よりの喜びです。イベント後には機能を拡張し、Image Conditioning 機能も追加したことで、ロゴの構図を保ちながらキリン柄に変身させるなど、さらに多様な表現が可能になりました。

生成された画像例


JAWS な answer💡の機能

このアプリケーションは、LINE と Amazon Bedrock を活用した画像生成 + チャットアプリケーションです。JAWS DAYS のサメのロゴを元にした画像生成が可能で、ユーザーフレンドリーなインターフェースを提供しています。

遊び心あふれる画像生成機能

JAWS DAYS のマスコットであるサメのロゴを、あなたのアイデア次第で自由に変身させることができます !「画像生成 パソコンを触っている」「画像生成 サラリーマン風」など、思いついたアイデアを日本語で入力するだけ。あとは自動で英語に翻訳され、AI がユニークな画像を生成します。オリジナルロゴと見比べながら、サメの新しい姿を楽しめます。

シンプルなコマンドで、誰でも気軽にクリエイティブな体験が可能です。あなたならサメをどんな姿に変身させますか ?

Nova Canvas Image Variation の場合

Amazon Bedrock の「Nova Canvas Image Variation」は、既存の画像をベースに、テーマは維持しながらも自由な解釈で新しいバリエーションの画像を生成する AI サービスです。構図や背景、スタイルを大きく変更した、バリエーション豊かな画像を作成できます。

Nova Canvas Image Conditioning の場合

Amazon Bedrock の「Nova Canvas Image Conditioning」は、元画像の構図やレイアウトを厳密に保持しながら、色調やテクスチャなどの視覚的要素を変更できる AI サービスです。元のデザインの基本構造を維持したまま、スタイルの変更が可能です。

【主な違いと使い分け】

Image Variation は自由度が高く、同じテーマでまったく新しい表現を探りたい場合に適しています。例えば、ロゴのコンセプトから派生した様々なイラストやデザインの案出しなどに効果的です。

一方、Image Conditioning は元のデザインの構造を重視するため、ロゴやブランドイメージの微調整、既存デザインのカラーバリエーション作成など、より細かな制御が必要な場合に適しています。

身近で頼れるチャット機能

いつも使い慣れている LINE をインターフェースに採用することで、あなたの「知りたい」「相談したい」がもっと身近になりました。特別なアプリのインストールなしで気軽にアクセスでき、友達とチャットする感覚で会話を楽しめます。画像を見せながら「これってどう思う ?」と相談したり、「この前の続きなんだけど」と文脈を理解しながら会話を続けたり。最新の AI 技術を活用することで、まるで博識な友人が 24 時間スマートフォンの中で待機してくれているような、そんな心強い存在を目指しました。

技術的な質問、仕事の相談、趣味の話、ちょっとした疑問。どんな形式でも大丈夫です。あなたの「知りたい」気持ちに、いつでも寄り添います。


アーキテクチャ説明

アーキテクチャ図

今回のアーキテクチャ図は以下の通りです。

全体的なデータフロー

UI プラットフォームとして LINE を採用し、LINE Messaging API を活用してユーザーとのインタラクションを実現しています。

処理モードの分類

システムは以下の 2 つのモードに対応しています。

各モードに応じて処理を分岐させることで、多様なユーザー要求に対応できるようにしています。

「①画像生成モード」のデータフロー

上記のアーキテクチャ図は「①画像生成モード」の処理を表しています。

  1. LINE 上でユーザーが「画像生成 <プロンプト>」と入力
  2. データは Amazon API Gateway から AWS Lambda (LineMessageHandler) へ流れる
  3. Lambda (LineMessageHandler) が「画像生成中です。しばらくお待ちください。」と即時応答
  4. 入力されたプロンプトを Amazon SQS キューへ格納
  5. Lambda (BedrockResponseHandler) が SQS から非同期にメッセージを取得
  6. 入力されたプロンプトを Amazon Translate で英語に変換 (Amazon Nova Canvas が日本語非対応のため)
  7. Amazon S3 に格納しておいたサメのロゴ画像と英語に翻訳したプロンプトを、Amazon Bedrock API を介して Nova Canvas に送信
  8. 生成された画像を Lambda (BedrockResponseHandler) によって LINE 上に表示

「②チャットモード」の機能

「②チャットモード (マルチモーダル対応)」では、以下の機能を実装しています。

  • Amazon DynamoDB を活用した会話履歴の管理
    • LINE の UserID とタイムスタンプをキーとして個人単位でチャットを管理
    • 過去の会話内容を参照することで、よりスムーズなチャット体験を提供
  • チャット機能は Amazon Bedrock Claude 3 Sonnet を使用

アーキテクチャ選定理由

本システムはサーバーレスアーキテクチャを採用しています。選定理由は以下のとおりです。

  • イベント駆動型 (イベントドリブン) な特性に適合
    • 常時大量に呼び出されるわけではなく、ユーザーからのリクエスト時のみ処理が必要
    • Amazon EC2 や Amazon ECS のような常時稼働サービスではなく、Lambda 関数を使用することでコスト最適化
  • Bedrock の応答時間に対する対策
    • 同期処理ではユーザー体験の低下やタイムアウト発生のリスクがある
    • 非同期処理によりこれらの課題を解決

開発アプローチ

Infrastructure as Code (IaC) の手法として AWS SAM (Serverless Application Model) を採用しました。

  • サーバーレスアーキテクチャと IaC の相性の良さを活用
  • API Gateway , Lambda, SQS, DynamoDB などのサーバーレスサービスをコードで簡潔に実装

Amazon Bedrock Nova Canvas の実装詳細

Image Variation 機能

Nova Canvas の Image Variation 機能は、既存の画像をベースに、テーマは維持しながらも自由な解釈で新しいバリエーションの画像を生成できる機能です。

主な特徴

  • 大胆な変換:元画像のコンセプトを保ちながらも、構図、ポーズ、背景などを大きく変更可能
  • 創造的な拡張:元の要素をもとに、新しい要素や状況を追加した画像を生成
  • 多様な解釈:同じ入力画像から全く異なるスタイルやアプローチの画像を生成可能

活用例

  • JAWS-UG のサメロゴをドラゴン風、忍者風、宇宙飛行士風など様々なキャラクター設定で再解釈
  • 「サメがオフィスで働いている」「サメが海辺でサーフィンしている」など、新しいシチュエーションを追加
  • 元のデザイン要素を活かしながら、全く新しい構図やレイアウトで表現

コード例

このコードは Nova Canvas モデルを使用して画像のバリエーションを生成するための Bedrock API リクエストの例です。

{
    "taskType": "IMAGE_VARIATION",
    "imageVariationParams": {
        "images": string[] (list of Base64 encoded images),
        "similarityStrength": float,
        "text": string,
        "negativeText": string 
    },
    "imageGenerationConfig": {
        "height": int,
        "width": int,
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}

実際のコード

{
    "taskType": "IMAGE_VARIATION",
    "imageVariationParams": {
        "images": [image_data],
        "similarityStrength": 1.0,
        "text": input_text,
        "negativeText": "bad quality, low resolution, cartoon"
    },
    "imageGenerationConfig": {
        "height": 512,
        "width": 512,
        "cfgScale": 10,
        "seed": 12,
        "numberOfImages": 1
    }
}

主要パラメータの説明

  • text : 生成画像の特性を指定するプロンプト。1 ~ 1024 文字の長さである必要がある。
  • negativeText : 生成画像に含めたくない特性を指定。1 ~ 1024 文字の長さである必要がある。
  • images : 変換の元となる入力画像。1 ~ 5 枚まで追加できる。
  • similarityStrength : 元の入力画像との類似度制御 (0.2〜1.0)。値が低いほどより創造性が高まり、高いほど入力画像に忠実になる。今回はできるだけ元の画像の原型を留めて欲しかったので 1.0 に設定しました。
  • cfgScale : プロンプトへの忠実度を制御 (値が高いほどプロンプトに忠実)。
  • seed : シード値。今回はデフォルトの 12 に設定しました。

生成画像

イメージ:ドラゴン風

元のサメの色やエラの具合、体の向きや姿勢、背景の波飛沫はそのままに、ドラゴンスタイルのサメに仕上がっています。

Image conditioning 機能

Nova Canvas の Image conditioning 機能は、元画像の構図やレイアウトを厳密に保持しながら、色調やテクスチャなどの視覚的要素を変更できる機能です。

主な特徴

  • 構造の忠実な保持:元画像の形状、配置、比率などの基本構造を維持
  • スタイル変換:同じ構図のまま、異なる画風、素材感、色調などを適用
  • エッジ保存処理:CANNY_EDGE モードを使用することで、元画像の輪郭線を正確に保持した変換が可能

活用例

  • JAWS-UG のサメロゴの形状はそのままに、キリン柄、ヒョウ柄、亀の甲羅模様などの異なるテクスチャに変換
  • ロゴの配置や比率を維持したまま、金属質、木目調、大理石などの素材感を表現
  • 元のデザインの認識性を保ちながら、季節やブランドイメージに合わせた配色バリエーションを作成

コード例

{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "conditionImage": string (Base64 encoded image),
        "controlMode": "CANNY_EDGE" | "SEGMENTATION", 
        "controlStrength": float,
        "text": string,
        "negativeText": string
    },
    "imageGenerationConfig": {
        "width": int,
        "height": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}

実際のコード

{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "conditionImage": image_data,
        "controlMode": "CANNY_EDGE",
        "controlStrength": 1.0,
        "text": "A 2D illustration of a crescent-shaped character with a head on the top left, a dorsal fin on the top right, an orange back , tail on the left bottom, and a white belly. In the center are large wave splashes and Mt. Fuji. Flat design, cartoon style, bright colors, simple shapes and clean lines.Add the following sentences as an arrangement."+input_text,
        "negativeText": "bad quality, low resolution"
    },
    "imageGenerationConfig": {
        "width": 512,
        "height": 512,
        "cfgScale": 10,
        "seed": 290407041,
        "numberOfImages": 1
    }
}

主要パラメータの説明

  • conditionImage : 構図やレイアウトを保持するための元となる画像。
  • controlMode : 入力画像の処理方法を指定。デフォルトは "CANNY_EDGE" 。
    • CANNY_EDGE : 画像の輪郭線 (エッジ) を検出し、その線に沿った生成を行う。元画像の細かい線や形状を正確に保持したい場合に適している。
    • SEGMENTATION : 画像を領域ごとに分割し、大まかな構造や配置を維持しながら生成を行う。細部よりも全体的な構成を重視し、より創造的な表現が可能。
  • controlStrength : 入力画像との構造的類似度の制御 (0〜1.0)。値が低いほど創造性が高まり、高いほど入力画像の構造に忠実になる。デフォルトは 0.7.
  • seed : シード値。シード値の選定が最大の技術的課題でした。Nova Canvas モデルの応答の質と一貫性を確保するため、数多くのシード値でテストを重ねました。現在使用しているシード値でも一定の結果は得られていますが、「これが最適解である」という確証は得られていません。シード値と出力品質の関係性については、依然として多くの謎が残されている状況です。

生成画像

イメージ:キリン柄

元のサメの輪郭や向き、背景の富士山や波などの構図やレイアウトはそのままに、キリンの模様を表現しています。


工夫ポイント

ユーザー体験の最適化

応答速度の改善

  • SQS を活用した非同期処理で、Bedrock 呼び出しの待ち時間を解消
    → ユーザーからのリクエスト後すぐに「画像を生成中です。少々お待ちください。」の応答を返し、実際の画像生成処理をバックグラウンドで行うことで、体感的な応答速度を大幅に向上させました。

API スロットリング対策

  • エクスポネンシャルバックオフの設定 (通常 AWS SDK 側で実装されています。 詳細は こちら)
    → リクエスト失敗時に徐々に待機時間を長くしながら再試行することで、API 制限に適応し安定した処理を実現しています。
  • 複数リージョンの Nova Canvas モデルを活用
    → Bedrock Nova Canvas には、1 リージョンあたり 1 分間に 100 リクエスト (約 1.67 リクエスト/秒) という クォータ制限 があります。この制限を超えるリクエストが発生した場合に備え、複数リージョンのモデルを利用する仕組みを実装しました。これにより、ピーク時の同時アクセスにも対応し、処理の継続性を確保しています。ただし、リージョンを跨いだデータ転送に関する法令遵守やコスト面での考慮は必要です。

会話履歴の管理

  • DynamoDB を活用したユーザーごとの会話履歴を時系列管理
    → スケーラブルな NoSQL データベースを使用し、大量のユーザー会話を効率的に保存・検索できる仕組みを構築しました。
  • 過去の会話を参照し、自然な応答を生成
    → 会話の文脈を理解した AI 応答により、ユーザーは自然な対話体験を得られます。

メッセージタイプの判別と応答

  • テキスト / 画像メッセージを判別し、適切な応答を生成
    → 各メッセージタイプに最適化された処理フローを実装することで、多様なユーザー入力に柔軟に対応しています。

画像生成機能の実装

  • Bedrock API を使用した画像生成
    → 高品質な画像生成モデルを活用しました。
  • 入力プロンプトと生成画像のペア返信
    → LINE での連続した画像生成リクエスト時に、どのプロンプトがどの生成画像に対応するのか明確にするため、常にプロンプトと生成画像をセットで返信。これにより、複数の生成結果が混同されることを防ぎ、ユーザー体験を向上させています。
  • JAWS のサメのロゴと生成画像の比較提供
    → オリジナルと生成画像を並べて表示することで、AI による変換効果を視覚的に理解しやすくしました。

言語対応

  • バックグラウンドでの英語翻訳により、日本語入力に対応
    → Nova Canvas が日本語に対応していないため、ユーザーの日本語入力を自動的に英語に翻訳してから処理。翻訳処理を透過的に行うことで、日本語話者が母国語のまま直感的にサービスを利用できる環境を実現しています。

セキュリティ

  • Amazon Bedrock の自動安全機能の活用
    → Amazon Bedrock に組み込まれた自動不正検出メカニズムにより、著作権侵害や不適切表現などのコンテンツが自動的にフィルタリングされます。追加実装なしで有害コンテンツのブロック機能を享受でき、責任ある AI 利用と安全なサービス提供を実現しています。
  • エラー情報の直接伝達
    → システムエラー発生時には、Amazon Bedrock から返されるエラーメッセージを直接 LINE に転送し、ユーザーに現状を正確に伝えています。

まとめ

いかがでしたか ? Amazon Nova Canvas の凄さを感じていただけましたでしょうか?このプロジェクトを通じて、Nova Canvas の柔軟な画像生成能力と、サーバーレスアーキテクチャの組み合わせが、ユーザーフレンドリーなアプリケーション開発にいかに効果的かを実感しました。特に、Image Variation と Image Conditioning 機能を活用することで、JAWS-UG のサメのロゴを様々な形に変身させる楽しい体験を提供できました。

実際に開発を進める中で感じたのは、シード値とプロンプトの設定の難しさです。同じプロンプトでも、シード値によって全く異なる画像が生成されることがあり、結果の予測が難しい側面があります。プロンプトのわずかな言い回しの違いや、シード値の変更だけで生成される画像の質や雰囲気が大きく変わってくるのは、挑戦的でありながらも非常に興味深い体験でした。この「偶然性」と「制御」のバランスを探る過程自体が、AI 画像生成の魅力の一つだと感じています。

皆さんも是非 Nova Canvas で遊んでみませんか ? 直感的な操作で、AI の画像生成の力がグッと身近になりますよ。「こんな画像が作れたら面白いのに」というアイデア、Nova Canvas なら実現できるかもしれません !


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

奥村美生(おくむらみみ)
パブリックセクター技術統括本部 ソリューションアーキテクト

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する