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

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

最終更新日:Mar 27, 2026

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

サポートされているリージョン:シンガポール、米国 (バージニア)、中国 (北京)、中国 (香港)、ドイツ (フランクフルト)。ご利用のリージョンに対応する API キーエンドポイントを使用してください。

オンラインで試す:Alibaba Cloud Model Studio コンソールに移動し、右上隅でリージョンを選択して、vision ページに移動し、Qwen OCR を選択します。

入力画像

認識結果

複数言語の認識

image

INTERNATIONAL

MOTHER LANGUAGE

DAY

!

你好!

Bonjour!

Merhaba!

Ciao!

Hello!

Ola!

Salam!

傾いた画像の認識

image

Product Introduction

Imported fiber filaments from South Korea.

6941990612023

Item No.: 2023

テキスト位置の特定

img_1

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

ローカライズの可視化

img_1_location

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

サポートされているモデル

インターナショナル

インターナショナルデプロイモードでは、エンドポイントとデータストレージはシンガポールリージョンに配置され、モデル推論のコンピューティングリソースはグローバルに (中国本土を除く) 動的にスケジュールされます。

モデル

バージョン

コンテキストウィンドウ

最大入力

最大出力

入力価格

出力価格

無料クォータ

(注)

(トークン)

(100 万トークンあたり)

qwen-vl-ocr

現在、qwen-vl-ocr-2025-11-20 と同等の機能

安定

38,192

30,000

画像あたり最大:30000

8,192

$0.07

$0.16

それぞれ 100 万トークン

Model Studio のアクティベート後 90 日間有効

qwen-vl-ocr-2025-11-20

また、qwen-vl-ocr-1120
Qwen3-VL ベース。ドキュメント解析とテキストのローカライズが大幅に改善

スナップショット

グローバル

グローバルデプロイモードでは、エンドポイントとデータストレージは米国 (バージニア) リージョンまたはドイツ (フランクフルト) リージョンに配置され、モデル推論のコンピューティングリソースはグローバルに動的にスケジュールされます。

モデル

バージョン

コンテキストウィンドウ

最大入力

最大出力

入力価格

出力価格

(トークン)

(100 万トークンあたり)

qwen-vl-ocr

現在、qwen-vl-ocr-2025-11-20 と同等の機能

安定

38,192

30,000

画像あたり最大:30000

8,192

$0.043

$0.072

qwen-vl-ocr-2025-11-20

また、 qwen-vl-ocr-1120
Qwen3-VL ベース。ドキュメント解析とテキストのローカライズが大幅に改善

スナップショット

中国本土

中国本土デプロイモードでは、エンドポイントとデータストレージは北京リージョンに配置され、モデル推論のコンピューティングリソースは中国本土に限定されます。

モデル

バージョン

コンテキストウィンドウ

最大入力

最大出力

入力価格

出力価格

無料クォータ

(注)

(トークン)

(100 万トークンあたり)

qwen-vl-ocr

現在、qwen-vl-ocr-2025-11-20 と同等の機能
バッチ呼び出しは半額

安定

38,192

30,000

画像あたり最大:30000

8,192

$0.043

$0.072

無料クォータなし

qwen-vl-ocr-latest

最新のスナップショットと同等の機能

最新

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 日あたりの合計リクエスト数、およびモデルの出力長が 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/ja/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/ja/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/ja/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    \"請求書番号\": \"24329116804000\",\n    \"列車番号\": \"G1948\",\n    \"出発駅\": \"南京南駅\",\n    \"到着駅\": \"鄭州東駅\",\n    \"出発日時\": \"2024-11-14 11:46\",\n    \"座席番号\": \"4号車 12A席\",\n    \"座席種別\": \"二等席\",\n    \"運賃\": \"¥337.50\",\n    \"身分証明書番号\": \"4107281991****5515\",\n    \"乗客氏名\": \"杜 暁光\"\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/ja/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/ja/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/ja/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    \"座席番号\": \"車両 04、座席 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 SDK:プロンプトを設計したり渡したりする必要はありません。モデルは固定の内部 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 つのモードから選択できます:

  • カスタムフィールド抽出ocr_options.task_config でカスタム JSON テンプレート (result_schema) を提供することで、抽出するフィールドを指定できます。このテンプレートはフィールド名 (key) を定義します。モデルは自動的に値 (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"
    }
  }
}
'

応答例

{
  "出力": {
    "候補": [{
      "終了理由": "stop",
      "メッセージ": {
        "ロール": "assistant",
        "コンテンツ": [{
          "テキスト": "```html\n<table>\n  <tr>\n    <td>Case nameTest No.3ConductorruputreGL+GR(max angle)</td>\n    <td>Last load grade: 0%</td>\n    <td>Current load grade: </td>\n  </tr>\n  <tr>\n    <td>Measurechannel</td>\n    <td>Load point</td>\n    <td>Load method</td>\n    <td>Actual Load(%)</td>\n    <td>Actual Load(kN)</td>\n  </tr>\n  <tr>\n    <td>V02</td>\n    <td>V1</td>\n    <td>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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>Live Load</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  </```"
        }]
      }
    }]
  },
  "使用量": {
    "合計トークン数": 5536,
    "出力トークン数": 1981,
    "入力トークン数": 3555,
    "画像トークン数": 3470
  },
  "リクエストID": "e7bd9732-959d-9a75-8a60-27f7ed2dba06"
}

ドキュメント解析

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

task の値

指定されたプロンプト

出力形式と例

document_parsing

安全なサンドボックスで、提供された画像内のテキスト、表、および数式を 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.aliccdn.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"
}

汎用テキスト認識

主に中国語および英語のシナリオ向けで、認識結果をプレーンテキスト形式で返します。

task の値

指定されたプロンプト

出力形式と例

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": "Audience\nIf you are a system administrator for a Linux environment, you will benefit greatly from learning to write shell scripts. This book does not detail the steps to install the Linux system. However, if you have a running Linux system, you can start automating daily system administration tasks. That is where shell scripting helps, and that is what this book is about. This book shows how to use shell scripts to automate system administration tasks. These tasks include monitoring system statistics and data files, and generating reports for your manager.\nIf you are a home Linux enthusiast, you can also benefit from this book. Today, it is easy to get lost in complex graphical environments. Most desktop Linux distributions hide the system's internal details from the average user. But sometimes you need to know what is happening under the hood. This book shows you how to open the Linux command line and what to do next. For simple tasks, such as file management, the command line is often much easier to use than a fancy graphical interface. The command line has many available commands, and this book shows you how to use them."
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 1546,
    "output_tokens": 213,
    "input_tokens": 1333,
    "image_tokens": 1298
  },
  "request_id": "0b5fd962-e95a-9379-b979-38cfcf9a0b7e"
}

多言語認識

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

task の値

指定されたプロンプト

出力形式と例

multi_lan

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

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

  • 例: "!, 你好!, 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 では、ローカルファイルをアップロードする方法として、Base64 エンコーディングと直接ファイルパスの 2 つを提供しています。ファイルサイズと SDK のタイプに基づいて、アップロード方法を選択できます。具体的な推奨事項については、「ファイルアップロード方法の選択方法」をご参照ください。どちらの方法も「画像の制限」に記載されているファイル要件を満たしている必要があります。

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

ファイルを Base64 エンコードされた文字列に変換し、それをモデルに渡します。この方法は、OpenAI SDK、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. モデルを呼び出します:Data URLimage または image_url パラメーターを使用してモデルに渡します。

ファイルパスを使用

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

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

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

システム

SDK

入力ファイルパス

Linux または macOS

Python SDK

file://{absolute_path_of_the_file}

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

Java SDK

Windows オペレーティングシステム

Python SDK

file://{absolute_path_of_the_file}

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

Java SDK

file:///{absolute_path_of_the_file}

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

ファイルパスを渡す

ファイルパスの渡し方は、DashScope Python SDK および 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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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 を超えてはいけません。

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

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

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

      画像形式

      一般的な拡張子

      メディアタイプ

      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 モデルを使用してください。

課金とレート制限

本番環境に適用

  • 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 リファレンス」をご参照ください。

エラーコード

モデルの呼び出しが失敗してエラーメッセージが返された場合は、「エラーメッセージ」を参照して解決してください。