Claude 3ファミリーのモデルには、Claudeが画像を理解・分析できる新しいビジョン機能が搭載されており、マルチモーダルなインタラクションの可能性が広がっています。Claudeでは、テキストと画像の両方を入力として提供することで、会話を豊かにし、強力な新しいユースケースを実現できるようになりました。

ビジョン対応モデル

Claudeのビジョン機能を利用するために、特別なバージョンのClaude 3モデルを使用する必要はありません。すべてのClaude 3モデルは、画像の理解と分析が可能です。

このガイドでは、ベストプラクティス、コード例、留意点など、Claudeで画像を扱う方法について説明します。

claude.aiで画像を使ったチャットを試してみましょう!


はじめに

現在、Claudeのビジョン機能は以下の3つの方法で利用できます。

  • claude.aiのチャットウィンドウで直接利用する方法。ファイルをアップロードするように画像をアップロードするか、画像をウィンドウに直接ドラッグ&ドロップするだけです。
  • Console Workbenchを使用する方法。画像を受け付けるモデル(Claude 3モデルのみ)を選択すると、すべてのUserメッセージブロックの右上に画像を追加するボタンが表示されます。
  • APIリクエストを使用する方法 - 以下の手順を参照してください。

このガイドでは、Anthropic Python SDKを使用し、以下のサンプル変数を使用します。httpxライブラリを使ってWikipediaからサンプル画像を取得しますが、お好みの画像ソースを使用することもできます。

Python
import anthropic
import base64
import httpx

client = anthropic.Anthropic()

image1_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image1_media_type = "image/jpeg"
image1_data = base64.b64encode(httpx.get(image1_url).content).decode("utf-8")

image2_url = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Iridescent.green.sweat.bee1.jpg"
image2_media_type = "image/jpeg"
image2_data = base64.b64encode(httpx.get(image2_url).content).decode("utf-8")

APIリクエストで画像を利用するには、base64でエンコードされた画像をimageコンテンツブロックでClaudeに提供します。以下は、PythonでMessages APIリクエストにbase64でエンコードされた画像を含める簡単な例です。

Python

message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image1_media_type,
                        "data": image1_data,
                    },
                },
                {
                    "type": "text",
                    "text": "この画像を説明してください。"
                }
            ],
        }
    ],
)
print(message)

サポートされている画像フォーマットは、JPEG、PNG、GIF、WebPです。その他のコード例やパラメータの詳細については、Messages APIの例を参照してください。


画像サイズ

最適なパフォーマンスを得るには、サイズやトークンの制限を超える可能性がある場合、アップロード前に画像のサイズを変更することをお勧めします。画像の長辺が1568ピクセルを超える場合、または画像が約1600トークンを超える場合、サイズ制限内に収まるまでアスペクト比を維持したままスケールダウンされます。入力画像が大きすぎてサイズ変更が必要な場合、モデルのパフォーマンスを向上させることなく、time-to-first-tokenのレイテンシが増加します。いずれかの辺が200ピクセル未満の非常に小さな画像では、パフォーマンスが低下する可能性があります。

time-to-first-tokenを改善したい場合は、画像のサイズを両方の寸法で1568ピクセル以内、1.15メガピクセル以下にすることをお勧めします。

以下は、APIが受け入れる最大画像サイズの表で、一般的なアスペクト比でリサイズされることはありません。これらの画像はすべて、約1600トークンと約$4.80/1000画像(Claude 3 Sonnetを使用していると仮定)に相当します。

アスペクト比画像サイズ
1:11092x1092 px
3:4951x1268 px
2:3896x1344 px
9:16819x1456 px
1:2784x1568 px

画像のベストプラクティス

Claudeに画像を提供する際は、最良の結果を得るために以下のガイドラインを念頭に置いてください。

  • 画像の明瞭さ: 画像が鮮明で、ぼやけすぎたりピクセル化していないことを確認してください。Claudeは不明瞭または低品質の画像を正確に解釈するのに苦労する可能性があります。
  • 画像の配置: ドキュメントクエリの配置と同様に、画像がテキストの前にある方がClaudeは最も効果的に機能します。テキストの後や、テキストに挿入された画像でも十分なパフォーマンスを発揮しますが、ユースケースで可能な場合は、画像→テキストの構造をお勧めします。詳細はビジョンプロンプトのヒントを参照してください。
  • テキスト: 画像に重要なテキストが含まれている場合は、読みやすく、小さすぎないことを確認してください。ただし、テキストを拡大するために重要な視覚的コンテキストをトリミングすることは避けてください。
  • 複数の画像: 1つのリクエストに複数の画像を含めることができます(claude.aiでは最大5枚、APIリクエストでは最大20枚)。Claudeは提供されたすべての画像を分析して応答を作成します。これは、画像を比較したり対比したりする場合に役立ちます。

詳細とガイドラインについては、制限事項を参照してください。


プロンプトのヒント

Claudeとのテキストベースのやり取りでうまくいくプロンプト手法の多くは、画像ベースのプロンプトにも適用できます。画像処理手法とユースケースのウォークスルーについては、マルチモーダルクックブックを参照してください。プロンプト手法と戦略も併せて掲載しています。

以下は、画像を含むプロンプト構造のベストプラクティスの例です。一般的に、画像に関する質問やそれを使用するタスクの指示よりも前にプロンプトに画像を配置するのが最善です。また、複数の画像がある場合は、Image 1:Image 2:のように各画像を紹介するのが良いでしょう。画像間や画像とプロンプトの間に改行は必要ありません。

1. 例: 1つの画像

プロンプト構造は以下の通りです。

RoleContent
User[Image] この画像を説明してください。

対応するAPIコールは以下の通りです。

Python
message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image1_media_type,
                        "data": image1_data,
                    },
                },
                {
                    "type": "text",
                    "text": "この画像を説明してください。"
                }
            ],
        }
    ],
)

2. 例: 複数の画像

プロンプト構造は以下の通りです。

RoleContent
UserImage 1: [Image 1] Image 2: [Image 2] これらの画像はどのように違いますか?

対応するAPIコールは以下の通りです。

Python
message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Image 1:"
                },
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image1_media_type,
                        "data": image1_data,
                    },
                },
                {
                    "type": "text",
                    "text": "Image 2:"
                },
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image2_media_type,
                        "data": image2_data,
                    },
                },
                {
                    "type": "text",
                    "text": "これらの画像はどのように違いますか?"
                }
            ],
        }
    ],
)

3. 例: システムプロンプトを使用した複数の画像

プロンプト構造は以下の通りです。

Content
Systemスペイン語のみで回答してください。
UserImage 1: [Image 1] Image 2: [Image 2] これらの画像はどのように違いますか?

対応するAPIコールは以下の通りです。

Python
message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    system="スペイン語のみで回答してください。",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Image 1:"
                },
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image1_media_type,
                        "data": image1_data,
                    },
                },
                {
                    "type": "text",
                    "text": "Image 2:"
                },
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image2_media_type,
                        "data": image2_data,
                    },
                },
                {
                    "type": "text",
                    "text": "これらの画像はどのように違いますか?"
                }
            ],
        }
    ],
)

4. 例: 2つの会話ターンにまたがる4つの画像

Claudeのビジョン機能は、画像とテキストの両方を組み合わせたマルチモーダルな会話で真価を発揮します。新しい画像やフォローアップの質問をいつでも追加しながら、Claudeと長時間のやり取りを続けることができます。これにより、反復的な画像分析、比較、視覚情報と他の知識の組み合わせなど、強力なワークフローが可能になります。

プロンプト構造の例は以下の通りです。

RoleContent
UserImage 1: [Image 1] Image 2: [Image 2] これらの画像はどのように違いますか?
Assistant[Claudeの回答]
UserImage 1: [Image 3] Image 2: [Image 4] これらの画像は最初の2つと似ていますか?
Assistant[Claudeの回答]

APIを使用する場合は、標準的な複数ターンの会話構造の一部として、userロールのMessagesの配列に新しい画像を挿入するだけです。


画像のコスト

Claudeへのリクエストに含める画像1枚につき、トークン使用量にカウントされます。おおよそのコストを計算するには、画像のトークン数の概算値に、使用しているモデルの1トークンあたりの価格を掛けます。モデルの価格の詳細は、価格ページをご覧ください。

画像のサイズを変更する必要がない場合、以下の簡単なアルゴリズムでトークン数の概算を見積もることができます。

tokens = (width px * height px)/750

以下は、APIのサイズ制限内のさまざまな画像サイズについて、Claude 3 Sonnetを1トークンあたり$3で使用した場合の、トークン化とコストの概算例です。

画像サイズトークン数画像1枚あたりのコスト1000画像あたりのコスト
200x200 px(0.04メガピクセル)約54約$0.00016約$0.16
1000x1000 px(1メガピクセル)約1334約$0.004約$4.00
1092x1092 px(1.19メガピクセル)約1590約$0.0048約$4.80

制限事項

Claudeの画像理解能力は最先端ですが、いくつかの制限事項があることに注意してください。

  • 人物の識別: Claudeは利用規約により、画像内の人物を特定(つまり、名前を付ける)するために使用することはできず、拒否します。
  • 精度: Claudeは、低品質、回転、または200ピクセル未満の非常に小さな画像を解釈する際に、幻覚を見たり間違いを犯したりする可能性があります。
  • 空間推論: Claudeの空間推論能力は限られています。アナログ時計の文字盤を読んだり、チェスの駒の正確な位置を説明したりするなど、正確な位置や配置を必要とするタスクでは苦労するかもしれません。
  • 数え上げ: Claudeは画像内のオブジェクトのおおよその数を数えることができますが、特に小さなオブジェクトが多数ある場合は、常に正確とは限りません。
  • AI生成画像: Claudeは画像がAIによって生成されたものかどうかを知らず、尋ねられても間違った答えをする可能性があります。偽物や合成画像の検出には頼らないでください。
  • 不適切なコンテンツ: Claudeは、利用規約に違反する不適切または露骨な画像を処理しません。
  • ヘルスケアアプリケーション: Claudeは一般的な医療画像を分析できますが、CTやMRIなどの複雑な診断スキャンを解釈するようには設計されていません。Claudeの出力は、専門家による医療アドバイスや診断の代替として考えるべきではありません。

特に重要なユースケースでは、Claudeの画像解釈を慎重に確認し、検証してください。人間の監督なしに、完璧な精度や機密性の高い画像分析を必要とするタスクにClaudeを使用しないでください。


よくある質問

Claudeはどのような画像ファイル形式をサポートしていますか?

Claudeは現在、JPEG、PNG、GIF、WebPの画像フォーマット、具体的にはimage/jpegimage/pngimage/gifimage/webpをサポートしています。

Claudeは画像URLを読み取ることができますか?

Claudeは、claude.aiを含むどのインターフェースでも画像URLを読み取ることができません。現在のところ、APIではtextブロックとimageブロックのどちらにもURLを追加することはできません。textブロックに画像URL(またはあらゆる種類のURL)を追加すると、Claudeは現在そのURLから情報を取得できないため、幻覚を見る可能性があります。

アップロードできる画像ファイルサイズに制限はありますか?

はい、画像1枚あたりの最大許容ファイルサイズは5MBです(claude.aiでは画像1枚あたり10MB)。5MBを超える画像はAPIを使用する際に拒否され、エラーが返されます。

1つのリクエストにいくつの画像を含めることができますか?

Messages APIを介して1つのリクエストに最大20枚の画像を含めることができます。claude.aiでは1ターンあたり最大5枚の画像を含めることができます。その制限を超える画像数は、APIを使用する際に拒否され、エラーが返されます。

Claudeは画像のメタデータを読み取りますか?

いいえ、Claudeは渡された画像からメタデータを解析したり受け取ったりしません。

アップロードした画像を削除できますか?

いいえ。さらに、画像のアップロードは一時的なもので、APIリクエストの期間を超えて保存されることはありません。アップロードされた画像は、処理が完了すると自動的に削除されます。

画像アップロードのデータプライバシーとセキュリティの詳細はどこで確認できますか?

アップロードされた画像やその他のデータの取り扱いについては、プライバシーポリシーページを参照してください。アップロードされた画像を当社のモデルのトレーニングに使用することはありません。

Claudeの画像解釈が間違っているように見える場合はどうすればよいですか?

Claudeから明らかに間違っていると思われる画像解釈を得た場合は、まず画像が鮮明で高品質で正しい向きになっていることを再確認してください。それでも問題が解決しない場合は、プロンプトエンジニアリングの手法を用いて結果の改善を試みてください。問題が解決できない場合は、claude.aiの親指アップ/ダウンのインターフェースから懸念のある出力を直接フラグ付けするか、サポートチームにご連絡ください。皆様からのご意見は、私たちの改善に役立ちます。

Claudeは画像の生成、制作、編集、操作、作成ができますか?

いいえ、Claudeは画像理解モデルのみです。画像を解釈・分析することはできますが、画像の生成、制作、編集、操作、作成はできません。


ビジョンをさらに深く

Claudeを使って画像を扱う準備はできましたか?ここではいくつかの役立つリソースを紹介します。

その他ご不明な点がございましたら、サポートチームまでお気軽にお問い合わせください。また、開発者コミュニティに参加して、他のクリエイターとつながり、Anthropicの専門家からヘルプを得ることもできます。

Claudeの強力な新しいビジョン機能で、皆様がどのようなものを作り出すのか楽しみにしています!