|

Nano Banana Inpainting API による部分画像編集の3つの実装方法と完全なコードを習得する

nano-banana-inpainting-api-image-editing-guide-ja 图示

AIで画像を編集する際、多くの開発者が最も気になるのは、画像の一部だけを変更し、他の部分には影響を与えないようにできるか? ということです。これは、inpainting(ローカル修復/ローカル編集)技術が解決すべき核心的な問題です。

朗報です。Nano Bananaシリーズモデルはinpaintingによるローカル編集を確かにサポートしており、従来の手法よりも強力なmask-free(マスク不要)編集機能を提供しています。本記事では、APIを通じてローカル編集を実現する3つの方法を詳しく解説し、最適な技術ルートを素早く選択できるようお手伝いします。

核心的な価値: この記事を読み終えると、Nano Banana inpainting APIの3つの呼び出し方法を習得し、ご自身のプロジェクトでプロフェッショナルレベルのAIローカル編集機能を実装できるようになります。


Nano Banana Inpainting 能力の全体像:3つのローカル編集手法

多くの開発者には、Nano Bananaは画像を生成するだけで、inpaintingをサポートしていないという誤解があります。実際には、Nano Bananaはinpaintingをサポートしており、複数の実現方法を提供しています。

手法 モデル 原理 精度 速度 適用シーン
手法1: Mask-Free 自然言語編集 Nano Banana 2 テキスト指示 + 元画像 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 迅速な編集、背景置き換え
手法2: Mask-Based 精密編集 Nano Banana Pro Edit マスク + テキスト指示 + 元画像 ⭐⭐⭐⭐⭐ ⭐⭐⭐ 精密な領域制御
手法3: 多段階対話型編集 Nano Banana 2 多段階対話 + コンテキスト ⭐⭐⭐⭐ ⭐⭐⭐ 複雑な編集、段階的な最適化

Nano Banana Inpainting と従来手法の主な違い

従来のinpaintingツール(例:Stable Diffusion Inpainting)では、開発者が手動で白黒マスクを描画し、変更する領域を指定する必要がありました。Nano Bananaの核心的な突破点は以下の通りです:

  • 意味理解駆動: 「背景をビーチに変えて」といった自然言語指示を理解し、背景領域を自動的に識別できます。
  • コンテキスト認識: ローカルを変更する際、周囲の環境の照明、遠近法、色彩に自動的に合わせます。
  • マスク不要: ほとんどの編集シーンで手動マスク作成が不要であり、開発のハードルを下げています。

🎯 技術的アドバイス: Nano Bananaのinpainting機能は、標準的なOpenAI互換インターフェースを通じて提供されています。APIYI apiyi.com プラットフォームを通じて呼び出すことをお勧めします。これにより、Nano Banana 2とNano Banana Proの2つのモデルの呼び出しを一元管理でき、異なる手法間での切り替えテストが容易になります。


方案一:Mask-Free 自然言語 Inpainting(初心者におすすめ)

これはNano Banana inpaintingの最も強力な機能の一つです——マスクが不要で、テキストによる記述だけで画像の一部を修正できます。

Nano Banana Mask-Free Inpainting の核心原理

Nano Banana 2(Gemini 3.1 Flash Imageベース)はセマンティックセグメンテーション機能を内蔵しており、モデルは以下の処理を行います:

  1. 編集指示の解析 — 画像のどの部分を修正したいかを理解します
  2. 領域の自動識別 — 意味理解を通じて修正が必要なピクセル領域を特定します
  3. コンテキスト推論 — 照明の方向、遠近法、3D空間関係を分析します
  4. 精密な置換 — 周囲の環境との一貫性を保ちながら対象領域を修正します

Mask-Free Inpainting の極簡コード例

import openai
import base64

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"  # APIYI 統一インターフェース
)

response = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Remove the person from this photo and fill the area with the surrounding background naturally"},
            {"type": "image_url", "image_url": {"url": "https://example.com/your-photo.jpg"}}
        ]
    }]
)

# 編集後の画像を抽出
content = response.choices[0].message.content
print("編集完了、画像データを抽出中...")

Nano Banana Inpainting よく使われる編集指示テンプレート

編集タイプ 英語指示テンプレート 日本語説明
オブジェクト削除 Remove the [object] from the image and fill naturally 指定オブジェクトを削除し自然に塗りつぶします
背景置換 Replace the background with [new scene] 背景シーンを置き換えます
要素追加 Add a [object] to the [position] of the image 指定位置に要素を追加します
属性変更 Change the [object]'s color from [A] to [B] オブジェクトの色を変更します
背景ぼかし Blur the background while keeping the foreground sharp 背景をぼかします(前景は鮮明に)
欠陥修復 Remove the stain/scratch from the [area] 汚れや傷を取り除きます
姿勢調整 Change the person's pose to [description] 人物の姿勢を調整します
スタイル変換 Convert the [area] to watercolor painting style 局所的なスタイル変換を行います

nano-banana-inpainting-api-image-editing-guide-ja 图示

Mask-Free Inpainting 完全なコードを見る(画像保存とエラー処理を含む)
#!/usr/bin/env python3
"""
Nano Banana Mask-Free Inpainting 完全な例
自然言語指示による局所的な画像編集
"""

import openai
import base64
import re
from datetime import datetime

# 設定
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.apiyi.com/v1"

client = openai.OpenAI(api_key=API_KEY, base_url=BASE_URL)

def inpaint_image(image_url: str, edit_instruction: str, output_path: str = None):
    """
    Mask-Free Inpaintingを使用して画像を編集します

    Args:
        image_url: 元画像のURLまたはbase64 data URI
        edit_instruction: 英語の編集指示
        output_path: 出力ファイルパス(オプション)
    Returns:
        bool: 成功したかどうか
    """
    print(f"📝 編集指示: {edit_instruction}")
    print(f"🖼️  元画像: {image_url[:80]}...")

    try:
        response = client.chat.completions.create(
            model="gemini-2.5-flash-image-preview",
            messages=[{
                "role": "user",
                "content": [
                    {"type": "text", "text": f"Generate an image: {edit_instruction}"},
                    {"type": "image_url", "image_url": {"url": image_url}}
                ]
            }]
        )

        content = response.choices[0].message.content

        # base64画像データを抽出
        patterns = [
            r'data:image/[^;]+;base64,([A-Za-z0-9+/=]+)',
            r'([A-Za-z0-9+/=]{1000,})'
        ]

        base64_data = None
        for pattern in patterns:
            match = re.search(pattern, content)
            if match:
                base64_data = match.group(1)
                break

        if not base64_data:
            print(f"⚠️ 画像データが見つかりません、モデル応答: {content[:200]}")
            return False

        # 画像を保存
        if not output_path:
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            output_path = f"inpainted_{timestamp}.png"

        image_bytes = base64.b64decode(base64_data)
        with open(output_path, 'wb') as f:
            f.write(image_bytes)

        print(f"✅ 編集完了! 保存先: {output_path} ({len(image_bytes):,} バイト)")
        return True

    except Exception as e:
        print(f"❌ 編集失敗: {e}")
        return False


# 使用例
if __name__ == "__main__":
    # 例 1: オブジェクト削除
    inpaint_image(
        image_url="https://example.com/photo-with-person.jpg",
        edit_instruction="Remove the person on the right side and fill with natural background",
        output_path="result_remove_person.png"
    )

    # 例 2: 背景置換
    inpaint_image(
        image_url="https://example.com/portrait.jpg",
        edit_instruction="Replace the background with a sunset beach scene, keep the person unchanged",
        output_path="result_new_background.png"
    )

    # 例 3: 局所属性変更
    inpaint_image(
        image_url="https://example.com/room.jpg",
        edit_instruction="Change the wall color to light blue, keep furniture unchanged",
        output_path="result_wall_color.png"
    )

方法2: マスクベースの精密インペインティング(上級者向け)

ピクセル単位で編集領域を正確に制御する必要がある場合は、Nano Banana Pro Editのマスクモードを使用できます。

マスクベースインペインティングの仕組み

このモードでは、白黒のマスク画像(mask)を提供する必要があります。白い領域が編集する部分、黒い領域が変更しない部分を示します。

パラメータ 説明 要件
元画像 編集が必要な画像 PNG/JPEG、4096×4096以下を推奨
マスク画像 編集領域をマークする白黒画像 元画像と同じサイズ、白=編集領域
編集指示 白い領域をどのように埋めるかの説明 英語指示が最も効果的

マスクベースインペインティングのコード例

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"
)

# 複数画像入力: 元画像 + マスク + テキスト指示
response = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "Generate an image: The first image is the original photo. The second image is a mask where white areas indicate regions to edit. Replace the masked area with a beautiful garden scene."
            },
            {"type": "image_url", "image_url": {"url": "https://example.com/original.jpg"}},
            {"type": "image_url", "image_url": {"url": "https://example.com/mask.png"}}
        ]
    }]
)

マスクベースインペインティングを選ぶべき場合

  • 境界の正確な制御が必要な場合(例:肌に影響を与えずシャツのみを変更)
  • 編集領域の形状が不規則で、自然言語で正確に記述するのが難しい場合
  • 同じ領域の複数画像を一括処理する必要がある場合
  • エッジの滑らかさに高い要求がある専門的な場面

💡 実用的なヒント: マスクを作成する最も簡単な方法は、PhotoshopやGIMPで編集したい領域をブラシで白く塗りつぶし、PNGとしてエクスポートすることです。手動でマスクを作成するのが面倒な場合は、方法1のマスク不要モードがほとんどの場面で十分に使えます。


方法3: マルチターン会話インペインティング(反復最適化)

Nano Banana 2は、1つのセッション内で複数回の編集をサポートしており、各ラウンドで前回の結果を基にさらに変更を加えることができます。この方法は、細かい調整が必要な場面に特に適しています。

マルチターンインペインティングの会話フロー

第1ラウンド: 「背景をオフィスに変更」 → 編集後の画像Aを取得
第2ラウンド: 画像A + 「机の上のコップをノートパソコンに変更」 → 編集後の画像Bを取得
第3ラウンド: 画像B + 「全体の光を明るくし、窓からの光の効果を追加」 → 最終画像Cを取得

マルチターンインペインティングのコード実装

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"
)

# マルチターン会話を構築
messages = [
    # 第1ラウンド: 初期編集
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Replace the background with a modern office scene"},
            {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
        ]
    }
]

# 第1ラウンドリクエスト
response_1 = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=messages
)

# 第1ラウンドの結果をコンテキストに追加
messages.append({"role": "assistant", "content": response_1.choices[0].message.content})

# 第2ラウンド: 前回の結果を基にさらに編集
messages.append({
    "role": "user",
    "content": [{"type": "text", "text": "Now add a laptop on the desk and make the lighting warmer"}]
})

response_2 = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=messages
)

nano-banana-inpainting-api-image-editing-guide-ja 图示


Nano Banana Inpainting モデルバージョンの比較

どのNano Bananaモデルを選択するかは、あなたのinpainting(画像補完)のニーズによります:

比較項目 Nano Banana 2 Nano Banana Pro 説明
モデル ID gemini-3.1-flash-image-preview gemini-3.0-pro-image
マスク不要編集 ✅ 対応 ✅ 対応 両方とも自然言語による編集をサポート
編集精度 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Proはより細かい意味理解が可能
生成速度 3-8 秒 10-20 秒 Flashアーキテクチャは3-5倍高速
最大解像度 4K (4096px) 2K (2048px) Banana 2はより高解像度
マルチターン編集 ✅ 対応 ✅ 対応 両方とも複数回の対話をサポート
API 価格 ~$0.02/回 ~$0.04/回 Banana 2はコスト半減
推奨シナリオ バッチ編集、高速反復 プロフェッショナルな写真修正、高精度ニーズ APIYI apiyi.com プラットフォームで同時呼び出し可能

Nano Banana Inpainting モデル選択のアドバイス

  • 日常的な編集、バッチ処理: Nano Banana 2を選択 — 高速、低コスト、4K解像度
  • プロフェッショナルな写真修正、商用素材: Nano Banana Proを選択 — 最も細かい意味理解と色彩再現
  • どちらを使うか迷ったら: まずNano Banana 2でテストし、不満足ならProに切り替え

Nano Banana Inpainting と Gemini ウェブ版編集の違い

多くのユーザーがGeminiウェブ版(gemini.google.com)で画像編集機能を体験した後、この質問をします:このAPIでも同じことができますか?

答えは できますが、違いがあります

項目 Gemini ウェブ版 Nano Banana API
インタラクション方法 マウス選択 + テキスト説明 純粋なAPI呼び出し(テキスト + 画像)
マスク作成 ウェブ版内蔵ブラシツール マスク画像を自前で準備、またはmask-freeモードを使用
制御精度 視覚的な選択、直感的 コードレベルでの制御、自動化可能
バッチ処理 非対応 ✅ バッチ呼び出しをサポート
ウォーターマーク SynthIDウォーターマークあり SynthIDウォーターマークあり
統合能力 ウェブ使用のみ あらゆるアプリケーションに組み込み可能
価格 無料(制限あり) 回数制課金

重要な違い: Geminiウェブ版の画像編集体験はよりインタラクティブ視覚的です。ユーザーは直接マウスで選択範囲を描けます。一方、API版の核心的な強みは自動化とスケーラビリティにあります — コード内で画像をバッチ処理し、製品プロセスに組み込むことができます。

🎯 技術的アドバイス: もしあなたのニーズが、自身の製品にAI画像編集機能を統合することであれば、APIが唯一の選択肢です。APIYI apiyi.com プラットフォームを通じて、より安定したインターフェースアクセスと技術サポートを得ることができます。

Nano Banana Inpainting ベストプラクティス

編集指示の最適化テクニック

適切な編集指示は、inpaintingの効果を大幅に向上させます:

テクニック 悪い指示 ❌ 良い指示 ✅
具体的な記述 "背景を変えて" "背景を夕焼けのビーチに置き換え、暖かい黄金色の光で"
保持する領域の指定 "背景を変えて" "人物は完全にそのままに、背景だけを置き換えて"
照明の説明 "ライトを追加して" "左上からの柔らかい暖色の照明を追加し、優しい影を落として"
材質の記述 "床を変えて" "床を木目がはっきり見えるライトオークのハードウッドフローリングに置き換えて"
範囲の限定 "色を変えて" "車のボディカラーのみをミッドナイトブルーに変更し、窓とタイヤはそのままに"

Nano Banana Inpainting パフォーマンス最適化の提案

  1. 入力画像の前処理 — 1024×1024 から 2048×2048 の間が推奨されます。大きすぎると処理時間が増加します。
  2. 英語指示の優先 — 英語指示の理解精度は、中国語よりも明らかに高くなります。
  3. 一度に一つの修正に集中 — 複雑な編集は複数回に分割し、各回で一つのことだけを行います。
  4. "Generate an image:" プレフィックスの追加 — モデルに、純粋なテキスト応答ではなく画像を出力することを明確に伝えます。

よくある質問

Q1: Nano Banana API は本当に inpainting をサポートしていますか?ウェブ版にしかないのでは?

はい、Nano Banana API は完全に inpainting(部分的な画像編集)をサポートしています。Nano Banana 2(gemini-3.1-flash-image-preview)と Nano Banana Pro(gemini-3.0-pro-image)はどちらも、API を通じた画像編集をサポートしています。最も強力な機能は mask-free inpainting です。マスクを作成する必要はなく、自然言語で編集のニーズを記述するだけで、モデルが自動的にターゲット領域を識別して修正します。APIYI apiyi.com プラットフォームを通じて、APIキーを素早く取得し、テストを開始できます。

Q2: Mask-Free と Mask-Based Inpainting、どちらが効果的ですか?

シナリオによります。背景の置き換え、オブジェクトの削除、色の変更などの一般的なニーズには、Mask-Free モードで十分に正確であり、より便利です。境界線の要件が極めて厳格なシナリオ(例えば、肌に影響を与えずにシャツの模様だけを変更するなど)では、Mask-Based モードがより正確な制御を提供できます。まず Mask-Free モードでテストし、不満足な場合にマスクを使用することをお勧めします。APIYI apiyi.com プラットフォームは両方のモードの呼び出しをサポートしており、切り替えは非常に簡単です。

Q3: Nano Banana の inpainting は Photoshop の効果に匹敵しますか?

多くのシナリオでは、Photoshop のコンテンツに応じた塗りつぶし(Content-Aware Fill)に非常に近づき、それを超えることもあります。Nano Banana の強みは、シーンの意味を理解することです。例えば、人を削除した後、背後にどのような建物や風景があるべきかを知っており、単純なテクスチャの塗りつぶしではありません。ただし、非常に細かい商業用レタッチには、最終調整のために Photoshop を組み合わせることをお勧めします。

Q4: なぜ私の編集指示が時々効かず、モデルが全く新しい画像を生成してしまうのですか?

これはよくある問題です。あなたの指示が「生成」ではなく「編集」であることを明確に表現していることを確認してください。指示の前に "Generate an image:" という接頭辞を追加し、元の画像のどの部分を保持するかを明確に説明することをお勧めします。例:"Generate an image: Edit the original photo - replace only the sky with a starry night, keep everything else exactly the same"。問題が続く場合は、"Do not change the composition or layout" を追加してモデルを制約することを試してみてください。

Q5: Nano Banana Inpainting の API 呼び出しコストはいくらですか?

Nano Banana 2 の画像編集は約 $0.02/回、Nano Banana Pro は約 $0.04/回です。APIYI apiyi.com プラットフォームを通じて呼び出すと、よりお得な価格を享受でき、実際のコストは約 ¥0.14/回(Nano Banana 2)となり、バッチ画像編集シナリオに適しています。

まとめ

Nano Bananaのinpainting(部分修正)機能は、多くの開発者が想像するよりもはるかに強力です。3つの手法にはそれぞれ適したシナリオがあります:

  • マスク不要の自然言語編集 — 最も手軽で、ほとんどの場面に適しており、まず試すことをお勧めします
  • マスクベースの精密修正 — 最も正確で、プロフェッショナルなピクセル単位の制御が必要な場面に適しています
  • マルチターン対話による反復編集 — 最も柔軟で、複雑な段階的な修正に適しています

どの手法を選ぶにしても、核心は標準的なChat Completions APIを使って画像と編集指示を送信することです。APIYI(apiyi.com)プラットフォームを利用してテストをすぐに始めることをお勧めします。5分で最初のinpaintingサンプルを動かすことができます。


参考資料

  1. Google AI 公式ドキュメント – Nano Banana Image Generation

    • リンク: ai.google.dev/gemini-api/docs/image-generation
    • 説明: Geminiの画像生成・編集APIの完全なドキュメント
  2. Google Developers Blog – Gemini 2.5 Flash Image

    • リンク: developers.googleblog.com/introducing-gemini-2-5-flash-image/
    • 説明: Nano Bananaの技術アーキテクチャと機能の詳細解説
  3. DataCamp – Gemini 2.5 Flash Image Complete Guide

    • リンク: datacamp.com/tutorial/gemini-2-5-flash-image-guide
    • 説明: 完全なコードサンプルと実践ガイド

📝 著者: APIYI Team | 技術交流とAPI接続については apiyi.com をご覧ください

類似投稿