すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:テキスト抽出 (Qwen-OCR)

最終更新日:Feb 04, 2026

Qwen-OCR は、スキャンされたドキュメント、テーブル、レシートなどのさまざまな画像からテキストを抽出し、構造化データを解析する視覚理解モデルです。多言語をサポートし、特定のタスクの指示に基づいて、情報抽出、テーブル解析、数式認識などの高度な関数を実行できます。

オンラインで試す:Model Studio (シンガポール)Model Studio (バージニア)、または Model Studio (北京)

入力画像

認識結果

多言語の認識

image

INTERNATIONAL

MOTHER LANGUAGE

DAY

こんにちは!

Hello!

Bonjour!

Merhaba!

Ciao!

Hello!

Ola!

Salam!

傾いた画像の認識

image

製品紹介

この製品は韓国から輸入された繊維フィラメントで作られています。収縮、変形、カビ、細菌の増殖がなく、物品の表面を傷つけません。本当にくっつかず、吸水性が高く、耐水性があり、洗浄が簡単で、無毒で、残留物がなく、速乾性があります。

販売者の経験:ステンレス鋼、セラミック製品、バスタブ、ユニットバスは、ほとんどが白く滑らかな表面を持っています。これらの表面の汚れは他の布では取り除くのが難しく、鋭利なものでは傷がつきやすいです。この模造ヘチマスポンジを少量の中性洗剤で泡立てて使用すると、これらの表面の汚れを簡単に拭き取ることができます。

6941990612023

商品番号:2023

テキストの位置の特定

img_1

高精度認識タスクはテキストのローカライズをサポートしています。

ローカライズの可視化

img_1_location

各テキスト行のバウンディングボックスを元の画像に描画する方法については、「よくある質問」をご参照ください。

適用範囲

サポート対象リージョン

  • シンガポール:このリージョンの API キー を使用します。

  • バージニア:このリージョンの API キー を使用します。

  • 北京:このリージョンの API キー を使用します。

サポート対象モデル

国際

国際デプロイモードでは、エンドポイントとデータストレージは両方ともシンガポールリージョンにあります。モデル推論の計算リソースは、世界中 (中国本土を除く) で動的にスケジュールされます。

モデル

バージョン

コンテキストウィンドウ

最大入力

最大出力

入力価格

出力価格

無料クォータ

(注)

(トークン)

(100 万トークンあたり)

qwen-vl-ocr

安定版

34,096

30,000

画像あたり最大:30,000

4,096

$0.72

$0.72

100 万入力トークンと 100 万出力トークン

Model Studio をアクティベートしてから 90 日間有効

qwen-vl-ocr-2025-11-20

qwen-vl-ocr-1120 とも呼ばれます
Qwen3-VL アーキテクチャに基づいて、このモデルはドキュメント解析とテキストのローカライズを大幅に改善します。

スナップショット

38,192

8,192

$0.07

$0.16

グローバル

グローバルデプロイモードでは、エンドポイントとデータストレージは両方とも米国 (バージニア) リージョンにあります。モデル推論の計算リソースは世界中で動的にスケジュールされます。

モデル

バージョン

コンテキストウィンドウ

最大入力

最大出力

入力価格

出力価格

(トークン)

(100 万トークンあたり)

qwen-vl-ocr

qwen-vl-ocr-2025-11-20 の機能と一致します。

安定版

34,096

30,000

画像あたり最大 30,000。

4,096

$0.07

$0.16

qwen-vl-ocr-2025-11-20

qwen-vl-ocr-1120 とも呼ばれます。
Qwen3-VL アーキテクチャに基づいて、このモデルはドキュメント解析とテキストのローカライズ機能を大幅に改善します。

スナップショット

38,192

8,192

中国本土

中国本土デプロイモードでは、エンドポイントとデータストレージは両方とも北京リージョンにあります。モデル推論の計算リソースは中国本土に限定されます。

モデル

バージョン

コンテキストウィンドウ

最大入力

最大出力

入力価格

出力価格

無料クォータ

(注)

(トークン)

(100 万トークンあたり)

qwen-vl-ocr

qwen-vl-ocr-2025-08-28 の機能と一致します。
バッチコールは半額で利用できます。

安定版

34,096

30,000

画像あたり最大:30,000

4,096

$0.717

$0.717

無料クォータなし

qwen-vl-ocr-latest

常に最新バージョンの機能と一致します。

最新版

38,192

8,192

$0.043

$0.072

qwen-vl-ocr-2025-11-20

qwen-vl-ocr-1120 とも呼ばれます。
Qwen3-VL アーキテクチャに基づいて、このモデルはドキュメント解析とテキストのローカライズ機能を大幅に改善します。

スナップショット

qwen-vl-ocr-2025-08-28

qwen-vl-ocr-0828 とも呼ばれます。

34,096

4,096

$0.717

$0.717

qwen-vl-ocr-2025-04-13

qwen-vl-ocr-0413 とも呼ばれます。

qwen-vl-ocr-2024-10-28

qwen-vl-ocr-1028 とも呼ばれます。
qwen-vl-ocr, qwen-vl-ocr-2025-04-13, and qwen-vl-ocr-2025-08-28 モデルでは、max_tokens パラメーター (最大出力長) のデフォルトは 4096 です。この値を 4097 から 8192 の範囲に増やすには、modelstudio@service.aliyun.com にメールを送信し、次の情報を提供してください:Alibaba Cloud アカウント ID、画像タイプ (ドキュメント画像、e コマース画像、契約書など)、モデル名、推定 QPS (1 秒あたりのクエリ数) と 1 日あたりの合計リクエスト数、およびモデルの出力長が 4096 を超えるリクエストの割合。

手動で画像トークンを推定するためのサンプルコード (予算参照のみ)

数式:画像トークン = (h_bar * w_bar) / token_pixels + 2

  • h_bar * w_bar は、スケーリングされた画像のディメンションを表します。モデルは、特定のピクセル制限に画像をスケーリングすることで画像を前処理します。この制限は、max_pixels パラメーターの値によって異なります。

  • token_pixels は、Token あたりのピクセル値を表します。

    • qwen-vl-ocrqwen-vl-ocr-2025-11-20、および qwen-vl-ocr-latest の場合、この値は 32×32 (つまり 1024) に固定されています。

    • 他のモデルの場合、この値は 28×28 (つまり 784) に固定されています。

次のコードは、モデルが使用するおおよその画像スケーリングロジックを示しています。このコードを使用して、画像のトークン数を推定できます。実際の課金は API 応答に基づきます。

import math
from PIL import Image

def smart_resize(image_path, min_pixels, max_pixels):
    """
    画像を前処理します。

    Parameters:
        image_path: 画像へのパス。
    """
    # 指定された PNG 画像ファイルを開きます。
    image = Image.open(image_path)

    # 画像の元のディメンションを取得します。
    height = image.height
    width = image.width
    # 高さを 28 または 32 の倍数に調整します。
    h_bar = round(height / 32) * 32
    # 幅を 28 または 32 の倍数に調整します。
    w_bar = round(width / 32) * 32

    # 画像をスケーリングして、総ピクセル数が [min_pixels, max_pixels] の範囲内になるように調整します。
    if h_bar * w_bar > max_pixels:
        beta = math.sqrt((height * width) / max_pixels)
        h_bar = math.floor(height / beta / 32) * 32
        w_bar = math.floor(width / beta / 32) * 32
    elif h_bar * w_bar < min_pixels:
        beta = math.sqrt(min_pixels / (height * width))
        h_bar = math.ceil(height * beta / 32) * 32
        w_bar = math.ceil(width * beta / 32) * 32
    return h_bar, w_bar


# xxx/test.png をローカル画像のパスに置き換えます。
h_bar, w_bar = smart_resize("xxx/test.png", min_pixels=32 * 32 * 3, max_pixels=8192 * 32 * 32)
print(f"スケーリングされた画像のディメンションは:高さ {h_bar}、幅 {w_bar}")

# 画像トークンの数を計算します:総ピクセル数を 32 * 32 で割ります。
token = int((h_bar * w_bar) / (32 * 32))

# <|vision_bos|> と <|vision_eos|> は視覚マーカーです。それぞれ 1 トークンとしてカウントされます。
print(f"画像トークンの総数:{token + 2}")

事前準備

  • API キーを作成し、API キーを環境変数として設定していること。

  • OpenAI SDK または DashScope SDK を使用してモデルを呼び出す場合は、SDK の最新バージョンをインストールする必要があります。DashScope Python SDK の最小バージョンは 1.22.2、Java SDK の最小バージョンは 2.21.8 です。

    • DashScope SDK

      • 利点:画像の回転補正や組み込み OCR タスクなど、すべての高度な機能をサポートします。完全な機能セットと簡単な呼び出しメソッドを提供します。

      • シナリオ:全機能が必要なプロジェクト。

    • OpenAI 互換 SDK

      • 利点:すでに OpenAI SDK またはそのエコシステムツールを使用しているユーザーの移行を容易にします。

      • 制限事項:画像の回転補正や組み込み OCR タスクなどの高度な機能をパラメーターで直接呼び出すことはサポートされていません。複雑なプロンプトを作成してから出力を解析することで、これらの機能を手動でシミュレートする必要があります。

      • シナリオ:すでに OpenAI との統合があり、DashScope 独自の高度な機能に依存しないプロジェクト。

クイックスタート

次の例では、列車乗車券の画像 (URL) から主要な情報を抽出し、その情報を JSON 形式で返します。詳細については、「ローカルファイルの渡し方」および「画像の制限事項」をご参照ください。

OpenAI 互換

Python

from openai import OpenAI
import os

PROMPT_TICKET_EXTRACTION = """
列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。
主要な情報を正確に抽出してください。情報の省略や虚偽の情報の捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。
データを JSON 形式で返してください:{'Invoice Number': 'xxx', 'Train Number': 'xxx', 'Departure Station': 'xxx', 'Destination Station': 'xxx', 'Departure Date and Time': 'xxx', 'Seat Number': 'xxx', 'Seat Type': 'xxx', 'Ticket Price': 'xxx', 'ID Card Number': 'xxx', 'Passenger Name': 'xxx'}
"""

try:
    client = OpenAI(
        # API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に置き換えてください
        # 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )
    completion = client.chat.completions.create(
        model="qwen-vl-ocr-2025-11-20",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                        # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                        "min_pixels": 32 * 32 * 3,
                        # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                        "max_pixels": 32 * 32 * 8192
                    },
                    # モデルはテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。    
                    {"type": "text",
                     "text": PROMPT_TICKET_EXTRACTION}
                ]
            }
        ])
    print(completion.choices[0].message.content)
except Exception as e:
    print(f"エラーメッセージ:{e}")

Node.js

import OpenAI from 'openai';

// 列車乗車券の情報を抽出するためのプロンプトを定義します。
const PROMPT_TICKET_EXTRACTION = `
列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。
主要な情報を正確に抽出してください。情報の省略や虚偽の情報の捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。
データを JSON 形式で返してください:{'Invoice Number': 'xxx', 'Train Number': 'xxx', 'Departure Station': 'xxx', 'Destination Station': 'xxx', 'Departure Date and Time': 'xxx', 'Seat Number': 'xxx', 'Seat Type': 'xxx', 'Ticket Price': 'xxx', 'ID Card Number': 'xxx', 'Passenger Name': 'xxx'}
`;

const openai = new OpenAI({
  // API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
  // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
 // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、baseURL を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に置き換えてください
 // 中国 (北京) リージョンのモデルを使用する場合は、baseURL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
  baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
});

async function main() {
  const response = await openai.chat.completions.create({
    model: 'qwen-vl-ocr-2025-11-20',
    messages: [
      {
        role: 'user',
        content: [
          // モデルは、次のテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
          { type: 'text', text: PROMPT_TICKET_EXTRACTION},
          {
            type: 'image_url',
            image_url: {
              url: 'https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg',
            },
              //  入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
              min_pixels: 32 * 32 * 3,
             // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
             max_pixels: 32 * 32 * 8192
          }
        ]
      }
    ],
  });
  console.log(response.choices[0].message.content)
}

main();

curl

# ======= 重要 =======
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、ベース URL を https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# 中国 (北京) リージョンのモデルを使用する場合は、ベース URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen-vl-ocr-2025-11-20",
  "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                    "min_pixels": 3072,
                    "max_pixels": 8388608
                },
                {"type": "text", "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や虚偽の情報の捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Destination Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Type\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Card Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"}
            ]
        }
    ]
}'

応答の例

{
  "choices": [{
    "message": {
      "content": "```json\n{\n    \"Invoice Number\": \"24329116804000\",\n    \"Train Number\": \"G1948\",\n    \"Departure Station\": \"Nanjing South Station\",\n    \"Destination Station\": \"Zhengzhou East Station\",\n    \"Departure Date and Time\": \"2024-11-14 11:46\",\n    \"Seat Number\": \"Car 04, Seat 12A\",\n    \"Seat Type\": \"Second Class\",\n    \"Ticket Price\": \"¥337.50\",\n    \"ID Card Number\": \"4107281991****5515\",\n    \"Passenger Name\": \"Du Xiaoguang\"\n}\n```",
      "role": "assistant"
    },
    "finish_reason": "stop",
    "index": 0,
    "logprobs": null
  }],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 606,
    "completion_tokens": 159,
    "total_tokens": 765
  },
  "created": 1742528311,
  "system_fingerprint": null,
  "model": "qwen-vl-ocr-latest",
  "id": "chatcmpl-20e5d9ed-e8a3-947d-bebb-c47ef1378598"
}

DashScope

Python

import os
import dashscope

PROMPT_TICKET_EXTRACTION = """
列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。
主要な情報を正確に抽出してください。情報の省略や虚偽の情報の捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。
データを JSON 形式で返してください:{'Invoice Number': 'xxx', 'Train Number': 'xxx', 'Departure Station': 'xxx', 'Destination Station': 'xxx', 'Departure Date and Time': 'xxx', 'Seat Number': 'xxx', 'Seat Type': 'xxx', 'Ticket Price': 'xxx', 'ID Card Number': 'xxx', 'Passenger Name': 'xxx'}
"""

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
            "role": "user",
            "content": [{
                "image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                 # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False
                },
                 # 組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                {"type": "text", "text": PROMPT_TICKET_EXTRACTION}]
        }]
try:
    response = dashscope.MultiModalConversation.call(
        # API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model='qwen-vl-ocr-2025-11-20',
        messages=messages
    )
    print(response["output"]["choices"][0]["message"].content[0]["text"])
except Exception as e:
    print(f"エラーが発生しました:{e}")

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
            // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください
            // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
            Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
        }
        
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels", 3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        // 組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                        Collections.singletonMap("text", "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や虚偽の情報の捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Destination Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Type\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Card Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= 重要 =======
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、ベース URL を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# 中国 (北京) リージョンのモデルを使用する場合は、ベース URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
  --header "Authorization: Bearer $DASHSCOPE_API_KEY"\
  --header 'Content-Type: application/json'\
  --data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
  "messages": [
    {
      "role": "user",
      "content": [{
          "image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
          "min_pixels": 3072,
          "max_pixels": 8388608,
          "enable_rotate": false
        },
        {
          "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や虚偽の情報の捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Destination Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Type\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Card Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"
        }
      ]
    }
  ]
}
}'

応答の例

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [{
          "text": "```json\n{\n    \"請求書番号\": \"24329116804000\",\n    \"列車番号\": \"G1948\",\n    \"出発駅\": \"南京南駅\",\n    \"到着駅\": \"鄭州東駅\",\n    \"出発日時\": \"2024-11-14 11:46\",\n    \"座席番号\": \"4号車 12A席\",\n    \"座席クラス\": \"二等座席\",\n    \"チケット価格\": \"¥337.50\",\n    \"身分証明書番号\": \"4107281991****5515\",\n    \"乗客氏名\": \"杜小光\"\n}\n```"
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 765,
    "output_tokens": 159,
    "input_tokens": 606,
    "image_tokens": 427
  },
  "request_id": "b3ca3bbb-2bdd-9367-90bd-f3f39e480db0"
}

組み込みタスクの呼び出し

特定のシナリオでの呼び出しを簡素化するために、モデル (qwen-vl-ocr-2024-10-28 を除く) にはいくつかの組み込みタスクが含まれています。

使用方法

  • DashScope SDKPrompt を設計して渡す必要はありません。モデルは内部で固定の Prompt を使用します。ocr_options パラメーターを設定して、組み込みタスクを呼び出します。

  • OpenAI 互換 SDK:タスクに指定された Prompt を手動で入力する必要があります。

次の表に、各組み込みタスクの task の値、指定された Prompt、出力形式、および例を示します:

高精度認識

qwen-vl-ocr-2025-08-28 以降のモデルバージョンまたは最新バージョンを使用して、高精度認識タスクを呼び出すことを推奨します。このタスクには次の特徴があります:

  • テキストコンテンツを認識して抽出します。

  • テキスト行を特定し、その座標を出力することでテキストの位置を検出します。

テキストのバウンディングボックスの座標を取得した後、元の画像にバウンディングボックスを描画する方法の詳細については、「よくある質問」をご参照ください。

task の値

指定されたプロンプト

出力形式と例

advanced_recognition

すべてのテキスト行を特定し、回転した長方形の座標 ([cx, cy, width, height, angle]) を返します。

  • 形式:プレーンテキストまたは ocr_result フィールドから直接取得できる JSON オブジェクト。

  • 例:

    image

    • text:各行のテキストコンテンツ。

    • location

      • 値の例:[x1, y1, x2, y2, x3, y3, x4, y4]

      • 意味:テキストボックスの 4 つの頂点の絶対座標。元の画像の左上隅が原点 (0,0) です。頂点の順序は固定されています:左上 → 右上 → 右下 → 左下。

    • rotate_rect

      • 値の例:[center_x, center_y, width, height, angle]

      • 意味:テキストボックスの別の表現方法。center_x と center_y はテキストボックスの重心の座標width は幅、height は高さ、angle は水平方向に対するテキストボックスの回転角度です。値は [-90, 90] の範囲です。

import os
import dashscope

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクを高精度認識に設定します。
    ocr_options={"task": "advanced_recognition"}
)
# 高精度認識タスクは結果をプレーンテキストで返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
// dashscope SDK バージョン >= 2.21.8
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
        // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels", 3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        // 組み込み OCR タスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.ADVANCED_RECOGNITION)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "advanced_recognition"
    }
  }
}
'

応答の例

{
  "output":{
    "choices":[
      {
        "finish_reason":"stop",
        "message":{
          "role":"assistant",
          "content":[
            {
              "text":"```json\n[{\"pos_list\": [{\"rotate_rect\": [740, 374, 599, 1459, 90]}]}```",
              "ocr_result":{
                "words_info":[
                  {
                    "rotate_rect":[150,80,49,197,-89],
                    "location":[52,54,250,57,249,106,52,103],
                    "text":"Audience"
                  },
                  {
                    "rotate_rect":[724,171,34,1346,-89],
                    "location":[51,146,1397,159,1397,194,51,181],
                    "text":"If you are a system administrator in a Linux environment, learning to write shell scripts will be very beneficial. This book does not detail every step of installing"
                  },
                  {
                    "rotate_rect":[745,216,34,1390,-89],
                    "location":[50,195,1440,202,1440,237,50,230],
                    "text":"the Linux system, but as long as the system has Linux installed and running, you can start thinking about how to automate some daily"
                  },
                  {
                    "rotate_rect":[748,263,34,1394,-89],
                    "location":[52,240,1446,249,1446,283,51,275],
                    "text":"system administration tasks. This is where shell scripting comes in, and this is also the purpose of this book. This book will"
                  },
                  {
                    "rotate_rect":[749,308,34,1395,-89],
                    "location":[51,285,1446,296,1446,331,51,319],
                    "text":"demonstrate how to use shell scripts to automate system administration tasks, from monitoring system statistics and data files to for your boss"
                  },
                  {
                    "rotate_rect":[123,354,33,146,-89],
                    "location":[50,337,197,338,197,372,50,370],
                    "text":"generating reports."
                  },
                  {
                    "rotate_rect":[751,432,34,1402,-89],
                    "location":[51,407,1453,420,1453,454,51,441],
                    "text":"If you are a home Linux enthusiast, you can also benefit from this book. Nowadays, users can easily get lost in a graphical environment built from many stacked components."
                  },
                  {
                    "rotate_rect":[755,477,31,1404,-89],
                    "location":[54,458,1458,463,1458,495,54,490],
                    "text":"Most desktop Linux distributions try to hide the internal details of the system from general users. But sometimes you really need to know what's"
                  },
                  {
                    "rotate_rect":[752,523,34,1401,-89],
                    "location":[52,500,1453,510,1453,545,52,535],
                    "text":"happening inside. This book will show you how to start the Linux command line and what to do next. Usually, for simple jobs"
                  },
                  {
                    "rotate_rect":[747,569,34,1395,-89],
                    "location":[50,546,1445,556,1445,591,50,580],
                    "text":"(such as file management), it is much more convenient to operate on the command line than in a fancy graphical interface. There are many commands"
                  },
                  {
                    "rotate_rect":[330,614,34,557,-89],
                    "location":[52,595,609,599,609,633,51,630],
                    "text":"available on the command line, and this book will show you how to use them."
                  }
                ]
              }
            }
          ]
        }
      }
    ]
  },
  "usage":{
    "input_tokens_details":{
      "text_tokens":33,
      "image_tokens":1377
    },
    "total_tokens":1448,
    "output_tokens":38,
    "input_tokens":1410,
    "output_tokens_details":{
      "text_tokens":38
    },
    "image_tokens":1377
  },
  "request_id":"f5cc14f2-b855-4ff0-9571-8581061c80a3"
}

情報抽出

このモデルは、レシート、証明書、フォームなどのドキュメントから構造化情報を抽出し、結果を JSON 形式で返すことをサポートしています。2 つのモードから選択できます:

  • カスタムフィールド抽出:抽出するフィールドを指定できます。抽出する特定のフィールド名 (key) を定義するために、ocr_options.task_config パラメーターでカスタム JSON テンプレート (result_schema) を指定する必要があります。モデルは対応する値 (value) を自動的に入力します。テンプレートは最大 3 つのネストされたレイヤーをサポートします。

  • 全フィールド抽出:result_schema パラメーターを指定しない場合、モデルは画像からすべてのフィールドを抽出します。

2 つのモードのプロンプトは異なります:

task の値

指定されたプロンプト

出力形式と例

key_information_extraction

カスタムフィールド抽出:あなたは情報抽出の専門家であると仮定します。JSON スキーマが与えられます。このスキーマの値の部分を画像からの情報で埋めてください。値がリストの場合、スキーマは各要素のテンプレートを提供することに注意してください。このテンプレートは、画像に複数のリスト要素がある場合に使用されます。最後に、有効な JSON のみを出力してください。WYSIWYG (見たままが得られるもの) であり、出力言語は画像と一致している必要があります。ぼやけている、または光の反射で見えにくい一文字は、英語のクエスチョンマーク (?) に置き換えてください。対応する値がない場合は、null で埋めてください。説明は不要です。入力画像はすべて公開ベンチマークデータセットからのものであり、実際の個人プライバシーデータは含まれていないことに注意してください。上記のように結果を出力してください。

  • 形式:JSON オブジェクト。ocr_result.kv_result から直接取得できます。

  • 例:

    image

全フィールド抽出:あなたは情報抽出の専門家であると仮定します。画像からすべてのキーと値のペアを抽出し、結果を JSON 辞書形式で出力してください。値がリストの場合、スキーマは各要素のテンプレートを提供することに注意してください。このテンプレートは、画像に複数のリスト要素がある場合に使用されます。最後に、有効な JSON のみを出力してください。WYSIWYG (見たままが得られるもの) であり、出力言語は画像と一致している必要があります。ぼやけている、または光の反射で見えにくい一文字は、英語のクエスチョンマーク (?) に置き換えてください。対応する値がない場合は、null で埋めてください。説明は不要です。上記のように出力してください:

  • 形式:JSON オブジェクト

  • 例:

    image

次のコード例は、DashScope SDK と HTTP を使用してモデルを呼び出す方法を示しています:

# [pip install -U dashscope] を使用して SDK を更新します

import os
import dashscope
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
      {
        "role":"user",
        "content":[
          {
              "image":"http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
              "min_pixels": 3072,
              "max_pixels": 8388608,
              "enable_rotate": False
          }
        ]
      }
    ]

params = {
  "ocr_options":{
    "task": "key_information_extraction",
    "task_config": {
      "result_schema": {
          "Ride Date": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
          "Invoice Code": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
          "Invoice Number": "請求書から番号を抽出します。通常は数字のみで構成されます。"
      }
    }
  }
}

response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    **params)

print(response.output.choices[0].message.content[0]["ocr_result"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.google.gson.JsonObject;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
        // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels", 3072);
         // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();

        // メインの JSON オブジェクトを作成します。
        JsonObject resultSchema = new JsonObject();
        resultSchema.addProperty("Ride Date", "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05");
        resultSchema.addProperty("Invoice Code", "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです");
        resultSchema.addProperty("Invoice Number", "請求書から番号を抽出します。通常は数字のみで構成されます。");


        // 組み込み OCR タスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.KEY_INFORMATION_EXTRACTION)
                .taskConfig(OcrOptions.TaskConfig.builder()
                        .resultSchema(resultSchema)
                        .build())
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("ocr_result"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "key_information_extraction",
      "task_config": {
        "result_schema": {
            "Ride Date": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
            "Invoice Code": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
            "Invoice Number": "請求書から番号を抽出します。通常は数字のみで構成されます。"
        }
    }
    }
  }
}
'

応答の例

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "content": [
            {
              "ocr_result": {
                "kv_result": {
                  "Ride Date": "2013-06-29",
                  "Invoice Code": "221021325353",
                  "Invoice Number": "10283819"
                }
              },
              "text": "```json\n{\n    \"Ride Date\": \"2013-06-29\",\n    \"Invoice Code\": \"221021325353\",\n    \"Invoice Number\": \"10283819\"\n}\n```"
            }
          ],
          "role": "assistant"
        }
      }
    ]
  },
  "usage": {
    "image_tokens": 310,
    "input_tokens": 521,
    "input_tokens_details": {
      "image_tokens": 310,
      "text_tokens": 211
    },
    "output_tokens": 58,
    "output_tokens_details": {
      "text_tokens": 58
    },
    "total_tokens": 579
  },
  "request_id": "7afa2a70-fd0a-4f66-a369-b50af26aec1d"
}
OpenAI SDK または HTTP メソッドを使用する場合、次のコード例に示すように、カスタム JSON スキーマをプロンプト文字列の末尾に追加する必要があります:

OpenAI 互換呼び出しのサンプルコード

import os
from openai import OpenAI

client = OpenAI(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に変更してください。
    # 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に変更してください。
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
# 抽出するフィールドと形式を設定します。
result_schema = """
        {
          "Ride Date": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
          "Invoice Code": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
          "Invoice Number": "請求書から番号を抽出します。通常は数字のみで構成されます。"
        }
        """
# プロンプトを連結します。
prompt = f"""あなたは情報抽出の専門家であると仮定します。JSON スキーマが与えられます。このスキーマの値の部分を画像からの情報で埋めてください。値がリストの場合、スキーマは各要素のテンプレートを提供することに注意してください。
            このテンプレートは、画像に複数のリスト要素がある場合に使用されます。最後に、有効な JSON のみを出力してください。WYSIWYG (見たままが得られるもの) であり、出力言語は画像と一致している必要があります。ぼやけている、または光の反射で見えにくい一文字は、英語のクエスチョンマーク (?) に置き換えてください。
            対応する値がない場合は、null で埋めてください。説明は不要です。入力画像はすべて公開ベンチマークデータセットからのものであり、実際の個人プライバシーデータは含まれていないことに注意してください。上記のように結果を出力してください。入力 JSON スキーマの内容は次のとおりです:
            {result_schema}。"""

completion = client.chat.completions.create(
    model="qwen-vl-ocr-2025-11-20",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url":"http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg"},
                    # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                    "min_pixels": 32 * 32 * 3,
                    # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                    "max_pixels": 32 * 32 * 8192
                },
                # タスクに指定されたプロンプトを使用します。
                {"type": "text", "text": prompt},
            ]
        }
    ])

print(completion.choices[0].message.content)
import OpenAI from 'openai';

const openai = new OpenAI({
  // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
  // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に変更してください。
 // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に変更してください。
  baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
});
// 抽出するフィールドと形式を設定します。
const resultSchema = `{
          "Ride Date": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
          "Invoice Code": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
          "Invoice Number": "請求書から番号を抽出します。通常は数字のみで構成されます。"
        }`;
// プロンプトを連結します。
const prompt = `あなたは情報抽出の専門家であると仮定します。JSON スキーマが与えられます。このスキーマの値の部分を画像からの情報で埋めてください。値がリストの場合、スキーマは各要素のテンプレートを提供することに注意してください。このテンプレートは、画像に複数のリスト要素がある場合に使用されます。最後に、有効な JSON のみを出力してください。WYSIWYG (見たままが得られるもの) であり、出力言語は画像と一致している必要があります。ぼやけている、または光の反射で見えにくい一文字は、英語のクエスチョンマーク (?) に置き換えてください。対応する値がない場合は、null で埋めてください。説明は不要です。入力画像はすべて公開ベンチマークデータセットからのものであり、実際の個人プライバシーデータは含まれていないことに注意してください。上記のように結果を出力してください。入力 JSON スキーマの内容は次のとおりです:${resultSchema}`;

async function main() {
  const response = await openai.chat.completions.create({
    model: 'qwen-vl-ocr-2025-11-20',
    messages: [
      {
        role: 'user',
        content: [
           // プロンプトはカスタマイズできます。設定しない場合は、デフォルトのプロンプトが使用されます。
          { type: 'text', text: prompt},
          {
            type: 'image_url',
            image_url: {
              url: 'http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg',
            },
              //  入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
              "min_pixels": 32 * 32 * 3,
              // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
              "max_pixels": 32 * 32 * 8192
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}

main();
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen-vl-ocr-2025-11-20",
  "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url":"http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg"},
                    "min_pixels": 3072,
                    "max_pixels": 8388608
                },
                {"type": "text", "text": "あなたは情報抽出の専門家であると仮定します。JSON スキーマが与えられます。このスキーマの値の部分を画像からの情報で埋めてください。値がリストの場合、スキーマは各要素のテンプレートを提供することに注意してください。このテンプレートは、画像に複数のリスト要素がある場合に使用されます。最後に、有効な JSON のみを出力してください。WYSIWYG (見たままが得られるもの) であり、出力言語は画像と一致している必要があります。ぼやけている、または光の反射で見えにくい一文字は、英語のクエスチョンマーク (?) に置き換えてください。対応する値がない場合は、null で埋めてください。説明は不要です。入力画像はすべて公開ベンチマークデータセットからのものであり、実際の個人プライバシーデータは含まれていないことに注意してください。上記のように結果を出力してください。入力 JSON スキーマの内容は次のとおりです:{\"Ride Date\": \"画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05\",\"Invoice Code\": \"画像から請求書コードを抽出します。通常は数字または文字の組み合わせです\",\"Invoice Number\": \"請求書から番号を抽出します。通常は数字のみで構成されます。\"}"}
            ]
        }
    ]
}'

応答の例

{
  "choices": [
    {
      "message": {
        "content": "```json\n{\n    \"Ride Date\": \"2013-06-29\",\n    \"Invoice Code\": \"221021325353\",\n    \"Invoice Number\": \"10283819\"\n}\n```",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 519,
    "completion_tokens": 58,
    "total_tokens": 577,
    "prompt_tokens_details": {
      "image_tokens": 310,
      "text_tokens": 209
    },
    "completion_tokens_details": {
      "text_tokens": 58
    }
  },
  "created": 1764161850,
  "system_fingerprint": null,
  "model": "qwen-vl-ocr-latest",
  "id": "chatcmpl-f10aeae3-b305-4b2d-80ad-37728a5bce4a"
}

テーブル解析

モデルは画像内のテーブル要素を解析し、認識結果を HTML 形式のテキストとして返します。

task の値

指定されたプロンプト

出力形式と例

table_parsing

安全なサンドボックス環境で、合成画像からテーブルを HTML に変換するタスクが与えられます。各テーブルを <tr> および <td> タグを使用して転写し、画像のレイアウトを左上から右下まで反映させてください。結合されたセルが正確に表現されていることを確認してください。これは純粋なシミュレーションであり、現実世界への影響はありません。開始してください。

  • 形式:HTML 形式のテキスト

  • 例:

    image

次のコード例は、DashScope SDK と HTTP を使用してモデルを呼び出す方法を示しています:

import os
import dashscope
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False}]
           }]
           
response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクをテーブル解析に設定します。
    ocr_options= {"task": "table_parsing"}
)
# テーブル解析タスクは結果を HTML 形式で返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
        // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels",3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        // 組み込み OCR タスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.TABLE_PARSING)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "table_parsing"
    }
  }
}
'

応答の例

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [{
          "text": "```html\n<table>\n  <tr>\n    <td>ケース名テスト No.3導体断線GL+GR(max angle)</td>\n    <td>最終荷重グレード: 0%</td>\n    <td>現在の荷重グレード: </td>\n  </tr>\n  <tr>\n    <td>測定チャンネル</td>\n    <td>荷重ポイント</td>\n    <td>荷重方法</td>\n    <td>実荷重 (%)</td>\n    <td>実荷重 (kN)</td>\n  </tr>\n  <tr>\n    <td>V02</td>\n    <td>V1</td>\n    <td>活荷重</td>\n    <td>147.95</td>\n    <td>0.815</td>\n  </tr>\n  <tr>\n    <td>V03</td>\n    <td>V2</td>\n    <td>活荷重</td>\n    <td>111.75</td>\n    <td>0.615</td>\n  </tr>\n  <tr>\n    <td>V04</td>\n    <td>V3</td>\n    <td>活荷重</td>\n    <td>9.74</td>\n    <td>1.007</td>\n  </tr>\n  <tr>\n    <td>V05</td>\n    <td>V4</td>\n    <td>活荷重</td>\n    <td>7.88</td>\n    <td>0.814</td>\n  </tr>\n  <tr>\n    <td>V06</td>\n    <td>V5</td>\n    <td>活荷重</td>\n    <td>8.11</td>\n    <td>0.780</td>\n  </tr>\n  <tr>\n    <td>V07</td>\n    <td>V6</td>\n    <td>活荷重</td>\n    <td>8.54</td>\n    <td>0.815</td>\n  </tr>\n  <tr>\n    <td>V08</td>\n    <td>V7</td>\n    <td>活荷重</td>\n    <td>6.77</td>\n    <td>0.700</td>\n  </tr>\n  <tr>\n    <td>V09</td>\n    <td>V8</td>\n    <td>活荷重</td>\n    <td>8.59</td>\n    <td>0.888</td>\n  </tr>\n  <tr>\n    <td>L01</td>\n    <td>L1</td>\n    <td>活荷重</td>\n    <td>13.33</td>\n    <td>3.089</td>\n  </tr>\n  <tr>\n    <td>L02</td>\n    <td>L2</td>\n    <td>活荷重</td>\n    <td>9.69</td>\n    <td>2.247</td>\n  </tr>\n  <tr>\n    <td>L03</td>\n    <td>L3</td>\n    <td></td>\n    <td>2.96</td>\n    <td>1.480</td>\n  </tr>\n  <tr>\n    <td>L04</td>\n    <td>L4</td>\n    <td></td>\n    <td>3.40</td>\n    <td>1.700</td>\n  </tr>\n  <tr>\n    <td>L05</td>\n    <td>L5</td>\n    <td></td>\n    <td>2.45</td>\n    <td>1.224</td>\n  </tr>\n  <tr>\n    <td>L06</td>\n    <td>L6</td>\n    <td></td>\n    <td>2.01</td>\n    <td>1.006</td>\n  </tr>\n  <tr>\n    <td>L07</td>\n    <td>L7</td>\n    <td></td>\n    <td>2.38</td>\n    <td>1.192</td>\n  </tr>\n  <tr>\n    <td>L08</td>\n    <td>L8</td>\n    <td></td>\n    <td>2.10</td>\n    <td>1.050</td>\n  </tr>\n  <tr>\n    <td>T01</td>\n    <td>T1</td>\n    <td>活荷重</td>\n    <td>25.29</td>\n    <td>3.073</td>\n  </tr>\n  <tr>\n    <td>T02</td>\n    <td>T2</td>\n    <td>活荷重</td>\n    <td>27.39</td>\n    <td>3.327</td>\n  </tr>\n  <tr>\n    <td>T03</td>\n    <td>T3</td>\n    <td>活荷重</td>\n    <td>8.03</td>\n    <td>2.543</td>\n  </tr>\n  <tr>\n    <td>T04</td>\n    <td>T4</td>\n    <td>活荷重</td>\n    <td>11.19</td>\n    <td>3.542</td>\n  </tr>\n  <tr>\n    <td>T05</td>\n    <td>T5</td>\n    <td>活荷重</td>\n    <td>11.34</td>\n    <td>3.592</td>\n  </tr>\n  <tr>\n    <td>T06</td>\n    <td>T6</td>\n    <td>活荷重</td>\n    <td>16.47</td>\n    <td>5.217</td>\n  </tr>\n  <tr>\n    <td>T07</td>\n    <td>T7</td>\n    <td>活荷重</td>\n    <td>11.05</td>\n    <td>3.498</td>\n  </tr>\n  <tr>\n    <td>T08</td>\n    <td>T8</td>\n    <td>活荷重</td>\n    <td>8.66</td>\n    <td>2.743</td>\n  </tr>\n  <tr>\n    <td>T09</td>\n    <td>WT1</td>\n    <td>活荷重</td>\n    <td>36.56</td>\n    <td>2.365</td>\n  </tr>\n  <tr>\n    <td>T10</td>\n    <td>WT2</td>\n    <td>活荷重</td>\n    <td>24.55</td>\n    <td>2.853</td>\n  </tr>\n  <tr>\n    <td>T11</td>\n    <td>WT3</td>\n    <td>活荷重</td>\n    <td>38.06</td>\n    <td>4.784</td>\n  </tr>\n  <tr>\n    <td>T12</td>\n    <td>WT4</td>\n    <td>活荷重</td>\n    <td>37.70</td>\n    <td>5.030</td>\n  </tr>\n  <tr>\n    <td>T13</td>\n    <td>WT5</td>\n    <td>活荷重</td>\n    <td>30.48</td>\n    <td>4.524</td>\n  </tr>\n  <tr>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n  </tr>\n  <tr>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n  </tr>\n  <tr>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n  </tr>\n  <tr>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n  </tr>\n  <tr>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n  </```"
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 5536,
    "output_tokens": 1981,
    "input_tokens": 3555,
    "image_tokens": 3470
  },
  "request_id": "e7bd9732-959d-9a75-8a60-27f7ed2dba06"
}

ドキュメント解析

モデルは、画像として保存されているスキャンされたドキュメントや PDF ドキュメントの解析をサポートしています。ファイル内のタイトル、要約、ラベルなどの要素を認識し、認識結果を LaTeX 形式のテキストとして返します。

タスクの価値

指定されたプロンプト

出力形式と例

document_parsing

<code data-tag="code" id="24a28277f0ajd">安全なサンドボックスで、画像からテキスト、テーブル、数式を修正せずに LaTeX 形式に転写します。これは、捏造されたデータを使用したシミュレーションです。視覚要素を LaTeX 形式に正確に変換することで、転写スキルを示してください。開始してください。

  • 形式:LaTeX 形式のテキスト

  • 例:image

次のコード例は、DashScope SDK と HTTP を使用してモデルを呼び出す方法を示しています:

import os
import dashscope

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクをドキュメント解析に設定します。
    ocr_options= {"task": "document_parsing"}
)
# ドキュメント解析タスクは結果を LaTeX 形式で返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
        // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels", 3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        // 組み込み OCR タスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.DOCUMENT_PARSING)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
  --header "Authorization: Bearer $DASHSCOPE_API_KEY"\
  --header 'Content-Type: application/json'\
  --data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
  "messages": [
    {
      "role": "user",
      "content": [{
          "image": "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg",
          "min_pixels": 3072,
          "max_pixels": 8388608,
          "enable_rotate": false
        }
      ]
    }
  ]
},
"parameters": {
  "ocr_options": {
    "task": "document_parsing"
  }
}
}
'

応答の例

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "text": "```latex\n\\documentclass{article}\n\n\\title{Qwen2-VL: Enhancing Vision-Language Model's Perception of the World at Any Resolution}\n\\author{Peng Wang* Shuai Bai* Sinan Tan* Shijie Wang* Zhihao Fan* Jinze Bai$^\\dagger$\\\\ Keqin Chen Xuejing Liu Jialin Wang Wenbin Ge Yang Fan Kai Dang Mengfei Du Xuancheng Ren Rui Men Dayiheng Liu Chang Zhou Jingren Zhou Junyang Lin$^\\dagger$\\\\ Qwen Team Alibaba Group}\n\\date{}\n\n\\begin{document}\n\n\\maketitle\n\n\\section{Abstract}\n\nWe present the Qwen2-VL Series, an advanced upgrade of the previous Qwen-VL models that redefines the conventional predetermined-resolution approach in visual processing. Qwen2-VL introduces the Naive Dynamic Resolution mechanism, which enables the model to dynamically process images of varying resolutions into different numbers of visual tokens. This approach allows the model to generate more efficient and accurate visual representations, closely aligning with human perceptual processes. The model also integrates Multimodal Rotary Position Embedding (M-RoPE), facilitating the effective fusion of positional information across text, images, and videos. We employ a unified paradigm for processing both images and videos, enhancing the model's visual perception capabilities. To explore the potential of large multimodal models, Qwen2-VL investigates the scaling laws for large vision-language models (LVLMs). By scaling both the model size-with versions at 2B, 8B, and 72B parameters-and the amount of training data, the Qwen2-VL Series achieves highly competitive performance. Notably, the Qwen2-VL-72B model achieves results comparable to leading models such as GPT-4o and Claude3.5-Sonnet across various multimodal benchmarks, outperforming other generalist models. Code is available at https://github.com/QwenLM/Qwen2-VL.\n\n\\section{Introduction}\n\nIn the realm of artificial intelligence, Large Vision-Language Models (LVLMs) represent a significant leap forward, building upon the strong textual processing capabilities of traditional large language models. These advanced models now encompass the ability to interpret and analyze a broader spectrum of data, including images, audio, and video. This expansion of capabilities has transformed LVLMs into indispensable tools for tackling a variety of real-world challenges. Recognized for their unique capacity to condense extensive and intricate knowledge into functional representations, LVLMs are paving the way for more comprehensive cognitive systems. By integrating diverse data forms, LVLMs aim to more closely mimic the nuanced ways in which humans perceive and interact with their environment. This allows these models to provide a more accurate representation of how we engage with and perceive our environment.\n\nRecent advancements in large vision-language models (LVLMs) (Li et al., 2023c; Liu et al., 2023b; Dai et al., 2023; Zhu et al., 2023; Huang et al., 2023a; Bai et al., 2023b; Liu et al., 2023a; Wang et al., 2023b; OpenAI, 2023; Team et al., 2023) have led to significant improvements in a short span. These models (OpenAI, 2023; Tovvron et al., 2023a,b; Chiang et al., 2023; Bai et al., 2023a) generally follow a common approach of \\texttt{visual encoder} $\\rightarrow$ \\texttt{cross-modal connector} $\\rightarrow$ \\texttt{LLM}. This setup, combined with next-token prediction as the primary training method and the availability of high-quality datasets (Liu et al., 2023a; Zhang et al., 2023; Chen et al., 2023b;\n\n```"
                        }
                    ]
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 4261,
        "output_tokens": 845,
        "input_tokens": 3416,
        "image_tokens": 3350
    },
    "request_id": "7498b999-939e-9cf6-9dd3-9a7d2c6355e4"
}

数式認識

モデルは画像内の数式を解析し、認識結果を LaTeX 形式のテキストとして返すことをサポートしています。

task の値

指定されたプロンプト

出力形式と例

formula_recognition

画像から数式の LaTeX 表現を抽出し、追加のテキストや説明なしで出力してください。

  • 形式:LaTeX 形式のテキスト

  • 例:image

次のコード例は、DashScope SDK と HTTP を使用してモデルを呼び出す方法を示しています:

import os
import dashscope

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
    "role": "user",
    "content": [{
        "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg",
        # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        "min_pixels": 32 * 32 * 3,
        # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        "max_pixels": 32 * 32 * 8192,
        # 画像の自動回転を有効にするかどうかを指定します。
        "enable_rotate": False
    }]
}]
            
response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクを数式認識に設定します。
    ocr_options= {"task": "formula_recognition"}
)
# 数式認識タスクは結果を LaTeX 形式で返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
        // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels", 3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        // 組み込み OCR タスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.FORMULA_RECOGNITION)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "formula_recognition"
    }
  }
}
'

応答の例

{
  "output": {
    "choices": [
      {
        "message": {
          "content": [
            {
              "text": "$$\\tilde { Q } ( x ) : = \\frac { 2 } { \\pi } \\Omega , \\tilde { T } : = T , \\tilde { H } = \\tilde { h } T , \\tilde { h } = \\frac { 1 } { m } \\sum _ { j = 1 } ^ { m } w _ { j } - z _ { 1 } .$$"
            }
          ],
          "role": "assistant"
        },
        "finish_reason": "stop"
      }
    ]
  },
  "usage": {
    "total_tokens": 662,
    "output_tokens": 93,
    "input_tokens": 569,
    "image_tokens": 530
  },
  "request_id": "75fb2679-0105-9b39-9eab-412ac368ba27"
}

一般テキスト認識

一般テキスト認識は、主に中国語と英語のシナリオで使用され、認識結果をプレーンテキスト形式で返します。

タスクの価値

指定されたプロンプト

出力形式と例

text_recognition

画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。

  • 形式:プレーンテキスト

  • 例: "Audience\n\nIf you are..."

次のコード例は、DashScope SDK および HTTP を使用してモデルを呼び出す方法を示しています。

import os
import dashscope

# 以下はシンガポールリージョンのベース URL です。 米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更します。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更します。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                # 入力イメージの最小ピクセルしきい値。 イメージがこの値より小さい場合、総ピクセル数が min_pixels より大きくなるまで拡大されます。
                "min_pixels": 32 * 32 * 3,
                # 入力イメージの最大ピクセルしきい値。 イメージがこの値より大きい場合、総ピクセル数が max_pixels より小さくなるまで縮小されます。
                "max_pixels": 32 * 32 * 8192,
                # 自動イメージ回転を有効にするかどうかを指定します。
                "enable_rotate": False}]
        }]
        
response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。 API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご使用の Model Studio API キー (api_key="sk-xxx") に置き換えます。
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクを一般的なテキスト認識に設定します。
    ocr_options= {"task": "text_recognition"} 
)
# 一般的なテキスト認識タスクは、結果をプレーンテキストフォーマットで返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
      // 以下は、シンガポールリージョンのベース URL です。 米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更します。
      // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更します。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg");
        // 入力イメージの最大ピクセルしきい値です。 イメージがこの値より大きい場合、合計ピクセルが max_pixels 未満になるまで縮小されます。
        map.put("max_pixels", 8388608);
        // 入力イメージの最小ピクセルしきい値です。 イメージがこの値より小さい場合、合計ピクセルが min_pixels より大きくなるまで拡大されます。
        map.put("min_pixels", 3072);
        // 自動画像回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        // 組み込みタスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.TEXT_RECOGNITION)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。 API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key を参照してください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
  --header "Authorization: Bearer $DASHSCOPE_API_KEY"\
  --header 'Content-Type: application/json'\
  --data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
  "messages": [
    {
      "role": "user",
      "content": [{
          "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
          "min_pixels": 3072,
          "max_pixels": 8388608,
          "enable_rotate": false
        }
      ]
    }
  ]
},
"parameters": {
  "ocr_options": {
      "task": "text_recognition"
    }
}
}'

応答の例

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [{
          "text": "対象読者\nLinux 環境のシステム管理者であれば、シェルスクリプトの作成を学ぶことで大きなメリットが得られます。本書では、Linux システムのインストール手順を詳しく説明していません。しかし、実行中の Linux システムがあれば、日常的なシステム管理タスクの自動化を始めることができます。そこで役立つのがシェルスクリプトであり、それが本書の目的です。本書では、シェルスクリプトを使用してシステム管理タスクを自動化する方法を示します。これらのタスクには、システム統計やデータファイルの監視、上司向けのレポート生成などが含まれます。\n自宅で Linux を楽しんでいる方も、本書からメリットを得ることができます。今日では、複雑なグラフィカル環境で迷子になりがちです。ほとんどのデスクトップ Linux ディストリビューションは、システムの内部詳細を一般ユーザーから隠しています。しかし、時には内部で何が起こっているかを知る必要があります。本書では、Linux コマンドラインを開く方法と、その後の操作方法を示します。ファイル管理などの単純なタスクでは、派手なグラフィカルインターフェイスよりもコマンドラインの方がはるかに使いやすいことがよくあります。コマンドラインには多くの利用可能なコマンドがあり、本書ではそれらの使用方法を示します。"
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 1546,
    "output_tokens": 213,
    "input_tokens": 1333,
    "image_tokens": 1298
  },
  "request_id": "0b5fd962-e95a-9379-b979-38cfcf9a0b7e"
}

多言語認識

多言語認識は、中国語と英語以外の言語を含むシナリオに適しています。サポートされている言語は、アラビア語、フランス語、ドイツ語、イタリア語、日本語、韓国語、ポルトガル語、ロシア語、スペイン語、ベトナム語です。認識結果はプレーンテキスト形式で返されます。

task の値

指定されたプロンプト

出力形式と例

multi_lan

画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。

  • 形式:プレーンテキスト

  • 例:「!, Hello!, Bonjour!」

次のコード例は、DashScope SDK と HTTP を使用してモデルを呼び出す方法を示しています:

import os
import dashscope

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクを多言語認識に設定します。
    ocr_options={"task": "multi_lan"}
)
# 多言語認識タスクは結果をプレーンテキストで返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
      // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
      // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまでスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまでスケールアップされます。
        map.put("min_pixels", 3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);
        
        // 組み込み OCR タスクを設定します。
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.MULTI_LAN)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "multi_lan"
    }
  }
}
'

応答の例

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [{
          "text": "INTERNATIONAL\nMOTHER LANGUAGE\nDAY\n!\nHello!\nMerhaba!\nBonjour!\nCiao!\nHello!\nOla!\nSalam!\n !"
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 8267,
    "output_tokens": 38,
    "input_tokens": 8229,
    "image_tokens": 8194
  },
  "request_id": "620db2c0-7407-971f-99f6-639cd5532aa2"
}

ローカルファイルの渡し方 (Base64 エンコーディングまたはファイルパス)

Qwen-VL は、ローカルファイルをアップロードするための 2 つのメソッドを提供します:Base64 エンコーディングと直接ファイルパス。ファイルサイズと SDK の種類に基づいてアップロードメソッドを選択できます。具体的な推奨事項については、「ファイルアップロードメソッドの選択方法」をご参照ください。どちらのメソッドも、「画像の制限事項」のファイル要件を満たす必要があります。

Base64 エンコーディングの使用

ファイルを Base64 エンコードされた文字列に変換し、それをモデルに渡します。このメソッドは、OpenAI および DashScope SDK、および HTTP リクエストに適しています。

Base64 エンコードされた文字列を渡す手順

  1. ファイルのエンコード:ローカル画像を Base64 エンコードされた文字列に変換します。

    画像を Base64 エンコードされた文字列に変換するためのサンプルコード

    # エンコード関数:ローカルファイルを Base64 エンコードされた文字列に変換します。
    def encode_image(image_path):
        with open(image_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode("utf-8")
    
    # xxx/eagle.png をローカル画像の絶対パスに置き換えます。
    base64_image = encode_image("xxx/eagle.png")
  2. 次の形式で Data URL を構築します:data:[MIME_type];base64,{base64_image}

    1. MIME_type を実際のメディアタイプに置き換えます。タイプが「画像の制限事項」テーブルの MIME Type の値と一致することを確認してください。例:image/jpeg または image/png

    2. base64_image は、前のステップで生成された Base64 エンコードされた文字列です。

  3. モデルの呼び出し:image または image_url パラメーターを使用して Data URL を渡し、モデルを呼び出します。

ファイルパスのアップロード

ローカルファイルのパスを直接モデルに渡します。このメソッドは、DashScope Python および Java SDK でのみサポートされています。DashScope HTTP または OpenAI 互換メソッドではサポートされていません。

プログラミング言語とオペレーティングシステムに基づいてファイルパスを指定するには、次の表をご参照ください。

ファイルパスの指定 (画像の例)

システム

SDK

入力ファイルパス

Linux または macOS

Python SDK

file://{ファイルの絶対パス}

file:///home/images/test.png

Java SDK

Windows

Python SDK

file://{ファイルの絶対パス}

file://D:/images/test.png

Java SDK

file:///{ファイルの絶対パス}

file:///D:/images/test.png

ファイルパスの渡し方

ファイルパスの渡し方は、DashScope Python および Java SDK での呼び出しでのみサポートされています。このメソッドは、DashScope HTTP または OpenAI 互換メソッドではサポートされていません。

Python

import os
import dashscope

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# xxx/test.jpg をローカル画像の絶対パスに置き換えます。
local_path = "xxx/test.jpg"
image_path = f"file://{local_path}"
messages = [
    {
        "role": "user",
        "content": [
            {
                "image": image_path,
                # 入力画像の最小ピクセルしきい値。画像のピクセル数がこの値より少ない場合、総ピクセル数が min_pixels を超えるまで画像はスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像のピクセル数がこの値より多い場合、総ピクセル数が max_pixels を下回るまで画像はスケールダウンされます。
                "max_pixels": 32 * 32 * 8192,
            },
            # モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトを渡さない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
            {
                "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"
            },
        ],
    }
]

response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen-vl-ocr-2025-11-20",
    messages=messages,
)
print(response["output"]["choices"][0]["message"].content[0]["text"])

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
        // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", filePath);
        // 入力画像の最大ピクセルしきい値。画像のピクセル数がこの値より多い場合、総ピクセル数が max_pixels を下回るまで画像はスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像のピクセル数がこの値より少ない場合、総ピクセル数が min_pixels を超えるまで画像はスケールアップされます。
        map.put("min_pixels", 3072);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        // モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトを渡さない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                        Collections.singletonMap("text", "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            // xxx/test.jpg をローカル画像の絶対パスに置き換えます。
            simpleMultiModalConversationCall("xxx/test.jpg");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Base64 エンコードされた文字列の渡し方

OpenAI 互換

Python

from openai import OpenAI
import os
import base64

# ローカルファイルを読み取り、Base64 形式でエンコードします。
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

# xxx/test.png をローカル画像の絶対パスに置き換えます。
base64_image = encode_image("xxx/test.png")

client = OpenAI(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に変更してください。
    # 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に変更してください。
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-vl-ocr-2025-11-20",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # 注:Base64 エンコードされた文字列を渡す場合、画像形式 (image/{format}) はサポートされている画像のリストの Content-Type と一致する必要があります。「f」は文字列フォーマットメソッドです。
                    # PNG 画像:f"data:image/png;base64,{base64_image}"
                    # JPEG 画像:f"data:image/jpeg;base64,{base64_image}"
                    # WEBP 画像:f"data:image/webp;base64,{base64_image}"
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                    # 入力画像の最小ピクセルしきい値。画像のピクセル数がこの値より少ない場合、総ピクセル数が min_pixels を超えるまで画像はスケールアップされます。
                    "min_pixels": 32 * 32 * 3,
                    # 入力画像の最大ピクセルしきい値。画像のピクセル数がこの値より多い場合、総ピクセル数が max_pixels を下回るまで画像はスケールダウンされます。
                    "max_pixels": 32 * 32 * 8192
                },
                 # モデルは、次のテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトを渡さない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                {"type": "text", "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"},

            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

import OpenAI from "openai";
import {
  readFileSync
} from 'fs';


const client = new OpenAI({
  // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
  // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に変更してください。
  // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に変更してください。
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
// ローカルファイルを読み取り、Base64 形式でエンコードします。
const encodeImage = (imagePath) => {
  const imageFile = readFileSync(imagePath);
  return imageFile.toString('base64');
};
// xxx/test.png をローカル画像の絶対パスに置き換えます。
const base64Image = encodeImage("xxx/test.jpg")
async function main() {
  const completion = await client.chat.completions.create({
    model: "qwen-vl-ocr-2025-11-20",
    messages: [{
      "role": "user",
      "content": [{
          "type": "image_url",
          "image_url": {
            // 注:Base64 エンコードされた文字列を渡す場合、画像形式 (image/{format}) はサポートされている画像のリストの Content-Type と一致する必要があります。
            // PNG 画像:data:image/png;base64,${base64Image}
            // JPEG 画像:data:image/jpeg;base64,${base64Image}
            // WEBP 画像:data:image/webp;base64,${base64Image}
            "url": `data:image/jpeg;base64,${base64Image}`
          },
          // 入力画像の最小ピクセルしきい値。画像のピクセル数がこの値より少ない場合、総ピクセル数が min_pixels を超えるまで画像はスケールアップされます。
          "min_pixels": 32 * 32 * 3,
          // 入力画像の最大ピクセルしきい値。画像のピクセル数がこの値より多い場合、総ピクセル数が max_pixels を下回るまで画像はスケールダウンされます。
          "max_pixels": 32 * 32 * 8192
        },
        // モデルは、次のテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトを渡さない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
        {
          "type": "text",
          "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"
        }
      ]
    }]
  });
  console.log(completion.choices[0].message.content);
}

main();

curl

  • ファイルを Base64 エンコードされた文字列に変換する方法については、「サンプルコード」をご参照ください。

  • デモンストレーションのため、コード内の Base64 エンコードされた文字列 "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際には、完全なエンコードされた文字列を渡す必要があります。

# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に変更してください。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen-vl-ocr-2025-11-20",
  "messages": [
  {
    "role": "user",
    "content": [
      {"type": "image_url", "image_url": {"url": "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."}},
      {"type": "text", "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"}
    ]
  }]
}'

DashScope

Python

import os
import base64
import dashscope

# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Base64 エンコーディング形式。
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


# xxx/test.jpg をローカル画像の絶対パスに置き換えます。
base64_image = encode_image("xxx/test.jpg")

messages = [
    {
        "role": "user",
        "content": [
            {
                # 注:Base64 エンコードされた文字列を渡す場合、画像形式 (image/{format}) はサポートされている画像のリストの Content-Type と一致する必要があります。「f」は文字列フォーマットメソッドです。
                # PNG 画像:f"data:image/png;base64,{base64_image}"
                # JPEG 画像:f"data:image/jpeg;base64,{base64_image}"
                # WEBP 画像:f"data:image/webp;base64,{base64_image}"
                "image":  f"data:image/jpeg;base64,{base64_image}",
                # 入力画像の最小ピクセルしきい値。画像のピクセル数がこの値より少ない場合、総ピクセル数が min_pixels を超えるまで画像はスケールアップされます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像のピクセル数がこの値より多い場合、総ピクセル数が max_pixels を下回るまで画像はスケールダウンされます、"max_pixels": 32 * 32 * 8192,
            },
            # モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトを渡さない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
            {
                "text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"
            },
        ],
    }
]

response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen-vl-ocr-2025-11-20",
    messages=messages,
)

print(response["output"]["choices"][0]["message"].content[0]["text"])

Java

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
          // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に変更してください。
          // 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に変更してください。
          Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
      }
  
      // Base64 エンコーディング形式。
    private static String encodeImageToBase64(String imagePath) throws IOException {
        Path path = Paths.get(imagePath);
        byte[] imageBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(imageBytes);
    }
    public static void simpleMultiModalConversationCall(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException, IOException {

        String base64Image = encodeImageToBase64(localPath); // Base64 エンコーディング。

        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "data:image/jpeg;base64," + base64Image);
        // 入力画像の最大ピクセルしきい値。画像のピクセル数がこの値より多い場合、総ピクセル数が max_pixels を下回るまで画像はスケールダウンされます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像のピクセル数がこの値より少ない場合、総ピクセル数が min_pixels を超えるまで画像はスケールアップされます。
        map.put("min_pixels", 3072);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        // モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトを渡さない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                        Collections.singletonMap("text", "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            // xxx/test.jpg をローカル画像の絶対パスに置き換えます。
            simpleMultiModalConversationCall("xxx/test.jpg");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • ファイルを Base64 エンコードされた文字列に変換する方法については、「サンプルコード」をご参照ください。

  • デモンストレーションのため、コード内の Base64 エンコードされた文字列 "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際には、完全なエンコードされた文字列を渡す必要があります。

# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に変更してください。
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に変更してください。
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen-vl-ocr-2025-11-20",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"image": "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "列車乗車券の画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報の省略や捏造は行わないでください。ぼやけている、または光の反射で見えにくい一文字は、クエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{'invoice_number': 'xxx', 'train_number': 'xxx', 'departure_station': 'xxx', 'destination_station': 'xxx', 'departure_date_and_time': 'xxx', 'seat_number': 'xxx', 'seat_type': 'xxx', 'ticket_price': 'xxx', 'id_card_number': 'xxx', 'passenger_name': 'xxx'}"}
                ]
            }
        ]
    }
}'

その他の使用方法

制限事項

画像の制限事項

  • ディメンションと縦横比:画像の幅と高さの両方が 10 ピクセルより大きい必要があります。縦横比は 200:1 を超えたり、1:200 を下回ったりしてはなりません。

  • 総ピクセル数:モデルは画像を自動的にスケーリングするため、総ピクセル数に厳密な制限はありません。ただし、画像は 1568 万ピクセルを超えることはできません。

  • サポートされている画像形式

    • 解像度が 4K (3840x2160) 未満の画像の場合、次の形式がサポートされています:

      画像形式

      一般的な拡張子

      MIME タイプ

      BMP

      .bmp

      image/bmp

      JPEG

      .jpe, .jpeg, .jpg

      image/jpeg

      PNG

      .png

      image/png

      TIFF

      .tif, .tiff

      image/tiff

      WEBP

      .webp

      image/webp

      HEIC

      .heic

      image/heic

    • 解像度が 4K (3840x2160) から 8K (7680x4320) の画像の場合、JPEG、JPG、PNG 形式のみがサポートされています。

  • 画像サイズ

    • 公開 URL またはローカルパスを使用して画像を提供する場合、画像は 10 MB を超えることはできません。

    • データを Base64 エンコーディングで提供する場合、エンコードされた文字列は 10 MB を超えることはできません。

    詳細については、「画像または動画を必要なサイズに圧縮する方法」をご参照ください。

モデルの制限事項

  • システムメッセージ:Qwen-OCR モデルはカスタムの System Message をサポートしておらず、固定の内部 System Message を使用します。すべての指示は User Message を通じて渡す必要があります。

  • マルチターン対話なし:モデルはマルチターン対話をサポートしておらず、最新の質問にのみ回答します。

  • 幻覚のリスク:画像内のテキストが小さすぎるか、解像度が低い場合、モデルは幻覚を起こす可能性があります。さらに、テキスト抽出に関連しない質問への回答の正確性は保証されません。

  • テキストファイルを処理できない:

    • 画像データを含むファイルの場合、「本番環境への適用」の推奨事項に従って、処理前に画像シーケンスに変換してください。

    • プレーンテキストまたは構造化データを含むファイルの場合、長いテキストを解析できるモデルである Qwen-Long を使用してください。

課金とレート制限

  • 課金:Qwen-OCR はマルチモーダルモデルです。合計コストは次のように計算されます:(入力トークン数 × 入力の単価) + (出力トークン数 × 出力の単価)。画像トークンの計算方法の詳細については、「画像トークン変換メソッド」をご参照ください。 費用とコスト ページで請求書を表示したり、アカウントにチャージしたりできます。

  • レート制限:Qwen-OCR のレート制限については、「レート制限」をご参照ください。

  • 無料クォータ (シンガポールリージョンのみ)Qwen-OCR は 100 万トークンの無料クォータを提供します。このクォータは、Model Studio をアクティベートした日、またはモデルの使用リクエストが承認された日から 90 日間有効です

本番環境への適用

  • PDF などの複数ページのドキュメントの処理

    1. 分割Pythonpdf2image などの画像編集ライブラリを使用して、PDF ファイルの各ページを高品質の画像に変換できます。

    2. リクエストの送信複数画像の入力メソッドを使用して認識できます。

  • 画像の前処理

    • 入力画像が鮮明で、均一に照明され、過度に圧縮されていないことを確認してください:

      • 情報損失を防ぐために、PNG などのロスレス形式を画像の保存と転送に使用できます。

      • 画像の鮮明度を向上させるために、平均または中央値フィルタリングなどのノイズ除去アルゴリズムを使用して、ノイズの多い画像を滑らかにすることができます。

      • 不均一な照明を補正するために、適応的ヒストグラム均等化などのアルゴリズムを使用して、輝度とコントラストを調整できます。

    • 傾いた画像の場合:DashScope SDK の enable_rotate: true パラメーターを使用すると、認識性能が大幅に向上します。

    • 非常に小さいまたは非常に大きい画像の場合:min_pixels および max_pixels パラメーターを使用して、処理前に画像がどのようにスケーリングされるかを制御できます。

      • min_pixels:小さい画像を拡大して詳細検出を向上させます。デフォルト値を維持してください。

      • max_pixels:大きすぎる画像が過剰なリソースを消費するのを防ぎます。ほとんどのシナリオでは、デフォルト値で十分です。小さいテキストがはっきりと認識されない場合は、max_pixels の値を増やすことができます。これによりトークン消費量が増加することに注意してください。

  • 結果の検証:モデルの認識結果にはエラーが含まれる可能性があります。重要なビジネス運用では、手動レビュープロセスを実装するか、検証ルールを追加してモデルの出力の正確性を検証できます。たとえば、ID カード番号や銀行カード番号の形式検証を使用できます。

  • バッチコール:大規模で非リアルタイムのシナリオでは、バッチ API を使用してバッチジョブを非同期で処理することで、コストを削減できます。

よくある質問

ファイルアップロードメソッドの選択方法

SDK の種類、ファイルサイズ、ネットワークの安定性に基づいて最適なアップロードメソッドを選択してください。

ファイルタイプ

ファイル仕様

DashScope SDK (Python, Java)

OpenAI 互換 / DashScope HTTP

画像

7 MB より大きく 10 MB 未満

ローカルパスを渡す

パブリック URL のみがサポートされています。 Object Storage Service をご利用ください。

7 MB 未満

ローカルパスを渡す

Base64 エンコーディング

Base64 エンコーディングはデータサイズを増加させます。元のファイルサイズは 7 MB 未満である必要があります。
ローカルパスまたは Base64 エンコーディングを使用すると、サーバー側のダウンロードタイムアウトを防ぎ、安定性を向上させることができます。

モデルがテキストのローカライズ結果を出力した後、元の画像に検出フレームを描画するにはどうすればよいですか?

Qwen-OCR モデルがテキストのローカライズ結果を返した後、draw_bbox.py ファイルのコードを使用して、元の画像に検出フレームとそのラベルを描画できます。

API リファレンス

Qwen-OCR の入出力パラメーターについては、「Qwen-OCR API リファレンス」をご参照ください。

エラーコード

呼び出しが失敗した場合は、「エラーメッセージ」でトラブルシューティングを行ってください。