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

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

最終更新日:Sep 08, 2026

Qwen-OCR は、スキャンされたドキュメント、表、領収書などの画像からテキストや構造化データを抽出する視覚理解モデルです。複数言語に対応し、情報抽出、表解析、数式認識、ドキュメント解析といった高度な OCR タスクをサポートします。

オンラインで試す: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

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

モデルの選択

Qwen-OCR は以下のモデルを提供しています。ビジネス要件に基づいて選択してください:

  • Qwen3.5-OCR: Qwen3.5 アーキテクチャをベースに構築され、ドキュメント解析、テキストのローカライズ、キー情報抽出の各機能が全面的にアップグレードされています。マルチターン対話と PDF ドキュメント解析をサポートしています。ビジネス証明書 (ID カードや運転免許証など) からの情報抽出が大幅に改善されました。詳細については、「サポートされている証明書とドキュメントのタイプ」をご参照ください。qwen3.5-ocr モデルが含まれています。
  • Qwen-VL-OCR: Qwen3-VL アーキテクチャに基づいて構築されています。ドキュメント解析、テキストのローカライズ (高精度な認識)、情報抽出、表解析、数式認識、一般的なテキスト認識、多言語認識などの組み込みタスクをサポートしています。また、イメージの回転補正もサポートしています。モデルには、qwen-vl-ocr (安定版)、qwen-vl-ocr-latest (最新版)、qwen-vl-ocr-2025-11-20、および qwen-vl-ocr-2025-08-28 が含まれます。
  • 初期バージョン (非推奨): これらのバージョンは、特徴とパフォーマンスの両方で新しいモデルに劣ります。qwen3.5-ocr への移行を推奨します。これには qwen-vl-ocr-2025-04-13 および qwen-vl-ocr-2024-10-28 モデルが含まれます。

qwen-vl-ocr, qwen-vl-ocr-2025-04-13, and qwen-vl-ocr-2025-08-28 モデルでは、max_tokens パラメーター (最大出力長) のデフォルト値は 4096 です。この値を 4097 から 8192 の範囲に増やすには、営業担当者にご連絡いただき、次の情報をご提供ください: お客様の Alibaba Cloud アカウント ID、画像タイプ (ドキュメント画像、eコマース画像、契約書など)、モデル名、推定 QPS (1 秒あたりのクエリ数) と 1 日あたりの合計リクエスト数、およびモデルの出力長が 4096 トークンを超えるリクエストの割合。

オンライン体験:Model Studio コンソールにアクセスし、右上のコーナーで対象のリージョンを選択し、Vision Models に移動して Qwen-OCR モデルをお試しください。

事前準備

  • API キーを作成し、環境変数として設定します。

  • OpenAI SDK または DashScope SDK を使用する場合は、最新の SDK バージョンをインストールしてください。最小バージョン:DashScope Python SDK 1.22.2、Java SDK 2.21.8。

    • DashScope SDK
      • 利点: 画像の回転補正、組み込み OCR タスクなどの高度な機能に、シンプルな API でフルアクセスできます。
      • 最適な用途: 完全な機能セットを必要とするプロジェクト。
    • OpenAI 互換 SDK
      • 利点: 既存の OpenAI SDK 統合のドロップインリプレースメントとして使用できます。
      • 制限: 画像の回転補正や組み込み OCR タスクなどの高度な機能は、パラメーターとして直接公開されていません。プロンプトを作成し、出力を解析することでシミュレートします。
      • 最適な用途: すでに OpenAI を使用しており、DashScope 独自の機能を必要としないプロジェクト。

はじめに

次の例では、乗車券画像 (URL) から構造化フィールドを抽出し、結果を JSON として返します。ローカルファイルについては、「ローカルファイルの受け渡し方法」をご参照ください。入力制約については、「画像の制限」をご参照ください。

OpenAI 互換 - チャット

from openai import OpenAI
import os

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

try:
    client = OpenAI(
        # API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        base_url="https://{WorkspaceId}.ap-southeast-1.maas.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"Error message: {e}")
import OpenAI from 'openai';

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

const openai = new OpenAI({
  // API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
  // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
 // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
  baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.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();
# ======= 重要 =======
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

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

応答例

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

OpenAI 互換 - 応答

Response API は、イメージ (最大 20 MB) と PDF (最大 100 MB) に対応しています。PDF のページ数の上限は ocr_options の task によって決まります。document_parsing を指定した場合は最大 50 ページ、task を指定しない場合または他のタスクを指定した場合は最大 10 ページです。この API に対応しているのは、qwen3.5-ocr 以降のモデルのみです。次の例では、Response API にイメージを渡してテキスト抽出を行います。PDF の例については、「PDF ドキュメントの解析」をご参照ください。

Python

Node.js

curl

DashScope

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'}
"""

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [{
            "role": "user",
            "content": [{
                "image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
                "min_pixels": 32 * 32 * 3,
                 # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False
                },
                 # 組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                {"type": "text", "text": PROMPT_TICKET_EXTRACTION}]
        }]
try:
    response = dashscope.MultiModalConversation.call(
        # API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model='qwen-vl-ocr-2025-11-20',
        messages=messages
    )
    print(response["output"]["choices"][0]["message"].content[0]["text"])
except Exception as e:
    print(f"An error occurred: {e}")
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 {
            // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
            Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        }

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

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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    \"出発駅\": \"Nanjing South Station\",\n    \"到着駅\": \"Zhengzhou East Station\",\n    \"出発日時\": \"2024-11-14 11:46\",\n    \"座席番号\": \"Car 04, Seat 12A\",\n    \"座席種別\": \"Second Class\",\n    \"チケット価格\": \"¥337.50\",\n    \"ID カード番号\": \"4107281991****5515\",\n    \"乗客名\": \"Du Xiaoguang\"\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 を除くモデルには、一般的な OCR シナリオ向けの組み込みタスクが付属しています。

組み込みタスクの呼び出し方法:
  • DashScope SDK: 組み込みタスクを呼び出すには、ocr_options パラメーターを設定します。qwen3.5-ocr 以降、組み込みタスクはカスタムプロンプトと連携して動作し (上書きされなくなりました)、組み込みタスク結果は ocr_result フィールドで返されます。以前のモデルでは、固定の内部 Prompt を使用します。
  • OpenAI 互換 SDK: メッセージでタスク固有の Prompt を手動で渡します。

各タスクには、task 値、固定の Prompt、出力フォーマット、および出力例があります:

高精度認識

高精度認識には、qwen-vl-ocr-2025-08-28 以降のモデルバージョン、または最新バージョン (推奨) を使用します。特長:

  • テキストコンテンツを認識して抽出します。
  • テキスト行を特定し、その座標を出力することでテキストの位置を検出します。

返された座標を使用して元の画像にバウンディングボックスを描画するには、「よくある質問」をご参照ください。

task の値指定されたプロンプト出力形式と例

advanced_recognition

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

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

{
  "output": {
    "choices": [
      {
        "message": {
          "content": [
            {
              "ocr_result": {
                "words_info": [
                  {
                    "location": [331, 139, 465, 139, 465, 166, 331, 166],
                    "rotate_rect": [398,153,134,27,90],
                    "text": "Magsafe"
                  },
                  {
                    "location": [411, 86, 411, 220, 384, 220, 384, 86],
                    "rotate_rect": [680,250,40,167,90],
                    "text": "金盾系列"
                  },
  • 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

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
        // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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 形式で返します。このモデルは、50 種類以上の一般的な証明書やドキュメントタイプからの構造化データ抽出をサポートしています。完全なリストについては、「サポートされている証明書とドキュメントのタイプ」をご参照ください。2 つのモードが利用可能です:

  • カスタムフィールドの抽出: ocr_options.task_config に、フィールド名 (key) を定義する JSON テンプレート (result_schema) を指定します。 モデルが値 (value) を入力します。 テンプレートは、最大 3 つのネストされたレイヤーをサポートします。
  • 全フィールド抽出: result_schema を省略すると、モデルがイメージから検出したすべてのフィールドを抽出します。

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

task の値指定されたプロンプト出力形式と例

key_information_extraction

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

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

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "content": [
            {
              "ocr_result": {
                "kv_result": {
                  "乗車日": "2013-06-29",
                  "出発時刻": "流水",
                  "燃料費": "2.0"
                }
              }

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

  • 形式:JSON オブジェクト
  • 例:

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "content": [
            {
              "ocr_result": {
                "kv_result": {
                  "出発駅": "大汽(南)J?",
                  "発票コード": "221021325353",
                  "発票番号": "10283819",
                  "発票聯次": "発票聯",
                  "氏名": "",
                  "合計金額": "8.00",
                  "日付": "2013-06-29",
                  "時間": "流水",
                  "タイトル": "遼寧省道路汽車客票",
                  "身分証番号": "",
                  "到着駅": "開発区"
                }
              }
            },

DashScope SDK または HTTP を使用してモデルを呼び出します:

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

import os
import dashscope
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
        // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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"),
    # {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    # 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 に変更してください。
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.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,
  // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
 // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 に変更してください。
  baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions に変更してください。
# === 実行前にこのコメントを削除してください ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.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 形式のテキスト

  • 例:

    
    <table>
        <tr>
            <td>元素</td>
            <td>判定</td>
            <td>結果</td>
            <td>単位</td>
            <td>30</td>
        </tr>
        <tr>
            <td>Pb</td>
            <td>OK</td>
            <td>ND</td>
            <td>ppm</td>
            <td>15.4</td>
        </tr>
    

DashScope SDK または HTTP を使用してモデルを呼び出します:

import os
import dashscope
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
        // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

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

応答例

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [{
          "text": "```html\n<table>\n  <tr>\n    <td>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  </```"
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 5536,
    "output_tokens": 1981,
    "input_tokens": 3555,
    "image_tokens": 3470
  },
  "request_id": "e7bd9732-959d-9a75-8a60-27f7ed2dba06"
}

ドキュメント解析

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

task の値指定されたプロンプト出力形式と例

document_parsing

安全なサンドボックスで、提供された画像内のテキスト、表、数式を変更せずに LaTeX 形式に転記してください。これは、加工されたデータを使用したシミュレーションです。あなたのタスクは、転記スキルを示すために、視覚要素を正確に LaTeX に変換することです。開始してください。

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

\documentclass{article}

\title{Qwen2-VL: Enhancing Vision-Language Model's Perception of the World at Any Resolution}
\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}
\date{}

\begin{document}

\maketitle

\section{Abstract}

DashScope SDK または HTTP を使用してモデルを呼び出します:

import os
import dashscope

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
        // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg");
        // 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
        map.put("max_pixels", 8388608);
        // 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
        map.put("min_pixels", 3072);
        // 画像の自動回転を有効にするかどうかを指定します。
        map.put("enable_rotate", false);

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

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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\n本稿では、視覚処理における従来の所定の解像度アプローチを再定義する、以前の Qwen-VL モデルの高度なスペックアップである Qwen2-VL シリーズを紹介します。Qwen2-VL は、モデルがさまざまな解像度のイメージを動的に処理して異なる数の視覚トークンに変換できるようにする Naive Dynamic Resolution メカニズムを導入しています。このアプローチにより、モデルは人間の知覚プロセスに密接に沿った、より効率的で正確な視覚的表現を生成できます。このモデルはまた、マルチモーダル回転位置埋め込み (M-RoPE) も統合しており、テキスト、イメージ、ビデオにわたる位置情報の効果的な融合を促進します。イメージとビデオの両方を処理するために統一されたパラダイムを採用し、モデルの視覚認識能力を強化しています。大規模マルチモーダルモデルの可能性を探るため、Qwen2-VL は大規模視覚言語モデル (LVLM) のスケーリング則を調査しています。モデルサイズ (2B、8B、72B パラメーターのバージョン) とトレーニングデータ量の両方をスケーリングすることにより、Qwen2-VL シリーズは非常に競争力のあるパフォーマンスを達成します。特筆すべきは、Qwen2-VL-72B モデルが、さまざまなマルチモーダルベンチマークにおいて GPT-4o や Claude3.5-Sonnet などの主要なモデルに匹敵する結果を達成し、他の汎用モデルを上回っていることです。コードは https://github.com/QwenLM/Qwen2-VL で入手できます。\n\n\\section{Introduction}\n\n人工知知能の領域において、大規模視覚言語モデル (LVLM) は、従来の大規模言語モデルの強力なテキスト処理能力を基盤として構築された、大きな飛躍を表しています。現在、これらの高度なモデルは、イメージ、音声、ビデオを含む、より広範なスペクトルのデータを解釈・分析する能力を備えています。この能力の拡大により、LVLM はさまざまな現実世界のチャレンジに取り組むための不可欠なツールへと変貌しました。広範で複雑な知識を機能的な表現に要約するそのユニークな能力が認められ、LVLM はより包括的な認知システムへの道を切り開いています。多様なデータフォームを統合することにより、LVLM は人間が環境を認識し、対話する微妙な方法をより密接に模倣することを目指しています。これにより、これらのモデルは、私たちが環境とどのように関わり、認識するかについて、より正確な表現を提供できます。\n\n大規模視覚言語モデル (LVLM) (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) における最近の進歩は、短期間で大幅な改善につながりました。これらのモデル (OpenAI, 2023; Tovvron et al., 2023a,b; Chiang et al., 2023; Bai et al., 2023a) は、一般的に \\texttt{visual encoder} $\\rightarrow$ \\texttt{cross-modal connector} $\\rightarrow$ \\texttt{LLM} という共通のアプローチに従います。このセットアップは、主要なトレーニングメソッドとしての次のトークン予測と、高品質なデータセット (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 形式のテキスト
  • 例:

$$\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 } .$$

DashScope SDK または HTTP を使用してモデルを呼び出します:

import os
import dashscope

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
        // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
      // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
      // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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

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

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

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

DashScope SDK または HTTP を使用してモデルを呼び出します:

import os
import dashscope

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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 {
      // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
      // 中国 (北京) リージョンのモデルを使用する場合、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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 をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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"
}

PDF ドキュメント解析

qwen3.5-ocr は、レスポンス API に対応しており、手動で PDF をイメージに分割することなく、PDF ファイルを直接渡してドキュメントを解析できます。出力長はモデルの最大出力長に制限されないため、長いドキュメントでも完全に解析できます。レスポンス API のみがサポートされており、チャット API はサポートされていません。PDF ファイルの制限: 100 MB 以下。ページ数の上限は ocr_options の task によって決まります。document_parsing を指定した場合は最大 50 ページ、task を指定しない場合または他のタスクを指定した場合は最大 10 ページです。

以下の例では、Response API を使用して PDF ファイルを渡し、ドキュメント解析を行います。

import os
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行をご利用の API キーに置き換えてください:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下の URL は中国 (北京) リージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)

response = client.responses.create(
    model="qwen3.5-ocr",
    input=[{
        "role": "user",
        "content": [{
            "type": "input_file",
            "file_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260616/qmycjl/1506.02640v5.pdf"
        }]
    }],
    extra_body={
        "ocr_options": {"task": "document_parsing"}
    }
)

# 組み込みタスクの結果を取得します
print(response.output[0].content[0].ocr_result)
import OpenAI from 'openai';

const client = new OpenAI({
    // 環境変数を設定していない場合は、次の行をご利用の API キーに置き換えてください:apiKey: "sk-xxx"
    apiKey: process.env.DASHSCOPE_API_KEY,
    // 以下の URL は中国 (北京) リージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    baseURL: "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
});

async function main() {
    const response = await client.responses.create({
        model: "qwen3.5-ocr",
        input: [{
            role: "user",
            content: [{
                type: "input_file",
                file_url: "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260616/qmycjl/1506.02640v5.pdf"
            }]
        }],
        ocr_options: { task: "document_parsing" }
    });

    // 組み込みタスクの結果を取得します
    console.log(response.output[0].content[0].ocr_result);
}

main();
import java.util.Collections;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.JsonValue;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseInputFile;
import com.openai.models.responses.ResponseInputItem;

public class Main {
    public static void main(String[] args) {
        OpenAIClient client = OpenAIOkHttpClient.builder()
                // 環境変数を設定していない場合は、次の行をご利用の API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 以下の URL は中国 (北京) リージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
                .baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
                .build();

        ResponseInputFile inputFile = ResponseInputFile.builder()
                .fileUrl("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260616/qmycjl/1506.02640v5.pdf")
                .build();

        ResponseInputItem messageInputItem = ResponseInputItem.ofMessage(
                ResponseInputItem.Message.builder()
                        .role(ResponseInputItem.Message.Role.USER)
                        .addContent(inputFile)
                        .build()
        );

        ResponseCreateParams createParams = ResponseCreateParams.builder()
                .model("qwen3.5-ocr")
                .inputOfResponse(Collections.singletonList(messageInputItem))
                .putAdditionalBodyProperty(
                        "ocr_options",
                        JsonValue.from(Collections.singletonMap("task", "document_parsing"))
                )
                .build();

        Response response = client.responses().create(createParams);
        // 組み込みタスクの結果を取得します
        Object ocrResult = response.output().get(0).message().get().content().get(0)
                .outputText().get()._additionalProperties().get("ocr_result");
        System.out.println(ocrResult);
    }
}
# 以下の URL は中国 (北京) リージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl -X POST 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/responses' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.5-ocr",
    "ocr_options": {
        "task": "document_parsing"
    },
    "input": [
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "file_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260616/qmycjl/1506.02640v5.pdf"
                }
            ]
        }
    ]
}'

レスポンス API をサポートしていない以前のモデル (qwen-vl-ocr-2025-11-20 以前) の場合、Python の pdf2image のような画像処理ライブラリを使用して各 PDF ページをイメージに変換し、次に 複数イメージ入力 メソッドを使用してページごとに認識を行います。

OpenAI Responses API のその他の使用法 (完了したモデル応答の取得と管理など) については、「OpenAI 互換 - 応答」をご参照ください。

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

Base64 エンコーディングまたは直接のファイルパスを使用してローカルファイルをアップロードします。ファイルサイズと SDK タイプに基づいてメソッドを選択してください — 「ファイルアップロード方法の選択方法」をご参照ください。どちらのメソッドも「画像の制限」のファイル要件を満たす必要があります。

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

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

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

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

    画像を Base64 エンコードされた文字列に変換するコード例

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

    1. MIME_type を実際のメディアタイプで置き換えます。 タイプが イメージの制限 表にある MIME Type の値 (image/jpeg や image/png など) と一致することを確認してください。
    2. base64_imageは、前のステップで生成された Base64 エンコードされた文字列です。
  3. モデルの呼び出し: Data URL を image または image_url パラメーターを使用して渡し、モデルを呼び出します。

ファイルパスの使用

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

次の表は、プログラミング言語とオペレーティングシステムごとのファイルパス形式を示しています。

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

システム

SDK

入力ファイルパス

例

Linux または macOS

Python SDK

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

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

Java SDK

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

Python SDK

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

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

Java SDK

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

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

ファイルパスの受け渡し

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

import os
import dashscope

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

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

response = dashscope.MultiModalConversation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen-vl-ocr-2025-11-20",
    messages=messages,
)
print(response["output"]["choices"][0]["message"].content[0]["text"])
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 {
        // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

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

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

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

OpenAI 互換

Python

from openai import OpenAI
import os
import base64

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

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

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

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

Node.js

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

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

main();

curl

  • ファイルを Base64 エンコードされた文字列に変換する方法については、「コード例」をご参照ください。
  • デモ用に、コードでは Base64 エンコードされた文字列 "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際には、完全なエンコードされた文字列を渡す必要があります。
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.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

# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

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

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

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

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

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

Java

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

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

public class Main {

    static {
          // {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
          Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
      }

      // Base64 エンコーディング形式。
    private static String encodeImageToBase64(String imagePath) throws IOException {
        Path path = Paths.get(imagePath);
        byte[] imageBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(imageBytes);
    }
    public static void simpleMultiModalConversationCall(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException, IOException {

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

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

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

curl

  • ファイルを Base64 エンコードされた文字列に変換する方法については、「コード例」をご参照ください。
  • デモンストレーション用に、コードの Base64 エンコードされた文字列 "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は省略されています。実際には、完全なエンコードされた文字列を渡す必要があります。
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
# === 実行前にこのコメントを削除してください ===

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

その他の使用法

制限事項

画像の制限

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

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

  • サポートされている画像形式
    • 解像度が 4K (3840x2160) 未満の画像は、以下のフォーマットに対応しています。

      画像形式

      一般的な拡張子

      MIME タイプ

      BMP

      .bmp

      image/bmp

      JPEG

      .jpe, .jpeg, .jpg

      image/jpeg

      PNG

      .png

      image/png

      TIFF

      .tif, .tiff

      image/tiff

      WEBP

      .webp

      image/webp

      HEIC

      .heic

      image/heic

    • 解像度が 4K(3840x2160) から 8K(7680x4320) までのイメージでは、JPEG、JPG、および PNG フォーマットのみがサポートされています。

  • 画像サイズ:
    • パブリック URL またはローカルパスを使用してイメージを提供する場合、qwen3.5-ocr は最大 20 MB、他のバージョンは最大 10 MB のイメージに対応しています。
    • データを Base64 エンコーディングで提供する場合、エンコードされた文字列は 10 MB を超えることはできません。

    ご参照:画像や動画を必要なサイズに圧縮するにはどうすればよいですか?。

モデルの制限

  • システムメッセージ: Qwen-OCR は、固定の内部 システムメッセージ を使用するため、カスタムのメッセージは受け付けません。すべての命令は ユーザーメッセージ で渡してください。

  • マルチターン対話: qwen3.5-ocr 以降では、マルチターン対話がサポートされており、イメージ URL なしでフォローアップのテキストメッセージを送信できます。qwen-vl-ocr-2025-11-20 以前のバージョンでは、最新のメッセージのみを処理し、コンテキストを保持しません。

  • ハルシネーションのリスク:画像内のテキストが小さすぎるか、解像度が低い場合、モデルがハルシネーションを起こす可能性があります。また、テキスト抽出に関係のない質問への回答の精度は保証されません。

  • テキストファイルの処理エラー:
    • 画像データを含むファイルについては、「本番環境に適用」の推奨事項に従って、処理前に画像シーケンスに変換してください。
    • プレーンテキストまたは構造化データを含むファイルについては、長いテキストを解析できるモデルである Qwen-Long を使用してください。

サポートされている証明書とドキュメントのタイプ

情報抽出タスクは、以下の証明書、領収書、許可証からの構造化データ抽出をサポートしています。

  • パスポートと渡航書類:中国のパスポート、マカオのパスポート、香港・マカオ住民向け本土渡航許可証、台湾住民向け本土渡航許可証、香港・マカオ住民向け帰郷許可証。
  • 車両関連書類と販売請求書:運転免許証、車両銘板、車両適合証明書、車両登録証明書、自動車販売請求書、中古車販売請求書。
  • 請求書と税務領収書:付加価値税普通請求書 (ロール)、定額特別請求書、一般機械印字請求書、納税証明書、中央非税収入領収書。
  • 交通機関の領収書:12306 高速鉄道チケット、乗車券、乗船券、高速道路料金領収書、高速道路機械印字請求書。
  • 金融カードと領収書:クレジットカード、電子銀行引受手形、支払領収書、社会保障カード。
  • 営業許可証と許可証:営業許可証、食品営業許可証、食品生産許可証、医薬品営業許可証、医療機器営業許可証。
  • 不動産証明書:不動産所有権証明書。
  • 国際 ID カード:香港 ID、マカオ ID、インドネシア ID、タイ ID、ベトナム ID、マレーシア ID、フィリピン ID、インド ID、トルコ ID、パキスタン ID、メキシコ ID、イギリス ID、アメリカ ID。
  • 国際パスポートと運転免許証:インドのパスポート、シンガポールのパスポート、タイのパスポート、アメリカのパスポート、オーストラリアのパスポート、UAE のパスポート、フィリピンの運転免許証、日本の運転免許証、アメリカの運転免許証。

課金とレート制限

  • 課金:Qwen-OCR はマルチモーダルモデルです。合計コストは次のように計算されます:(入力トークン数 × 入力単価) + (出力トークン数 × 出力単価)。費用とコストコンソールで請求書を表示したり、アカウントにチャージしたりできます。

    • 画像トークンの計算:次のコードを使用して、画像トークンの使用量を見積もります。実際の課金は API 応答に基づきます。

      画像トークンを見積もるためのコード例

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

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

      • token_pixels は、Token あたりの画素値を表します。

        • qwen3.5-ocr、qwen-vl-ocr、qwen-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):
          """
          画像を前処理します。
      
          パラメーター:
              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}")
      
  • レート制限:Qwen-OCR のレート制限については、「レート制限」をご参照ください。

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

本番環境に適用

  • 画像の前処理:
    • 入力画像が鮮明で、均一に照明され、過度に圧縮されていないことを確認してください:
      • 情報損失を避けるため、画像をロスレス形式 (例:PNG) で保存および送信します。
      • 画像の解像度を向上させるには、平均または中央値フィルタリングなどのノイズ除去アルゴリズムを使用して、ノイズの多い画像を滑らかにします。
      • 不均一な照明を補正するには、適応的ヒストグラム均等化などのアルゴリズムを使用して、輝度とコントラストを調整します。
    • 傾いたイメージ: DashScope SDK で enable_rotate: true を設定し、認識前に回転を補正します。

    • 非常に小さいまたは大きいイメージ: min_pixelsとmax_pixelsを使用して、イメージのスケーリングをコントロールします。

      • min_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 ファイルのコードを使用して、元の画像に検出フレームとそのラベルを描画します。

カスタムプロンプトを渡した後、応答が空になるか、フロントエンドスタイルのタグが含まれるのはなぜですか?

qwen3.5-ocr を使用する際、カスタムプロンプトに <html><body>...</body></html> のような完全な HTML 構造が含まれていると、モデルがその構造をフォローし、OCR 結果をプレーンテキストではなく HTML フォーマットで返すことがあります。その場合、応答は空に見えるか、フロントエンドスタイルのタグが含まれているように表示されます。単一の <br> のようなシンプルなタグでは、この動作はトリガーされません。

この問題を解決するには、次のいずれかの方法を使用してください:

  • プロンプトに完全な HTML タグ構造が含まれているかどうかを確認してください。含まれている場合は、プレーンテキストの命令に置き換えて、もう一度お試しください。たとえば、<html><body>イメージからすべてのテキストを抽出する</body></html> を イメージからすべてのテキストを抽出する に変更します。
  • お使いのプロンプトが出力形式に影響を与えるかどうかが不明な場合は、text フィールドを省略して、モデルのデフォルトのプロンプトを使用してください。
  • 代わりに qwen3.7-plus モデルをご使用ください。このモデルは、HTML 構造を含む同じプロンプトを渡した場合でも、プレーンテキストの結果を返します。

API リファレンス

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

エラーコード

モデルの呼び出しが失敗し、エラーメッセージが返された場合は、「エラーコード」で解決策をご確認ください。