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

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

最終更新日:Jul 16, 2026

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

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

入力画像

認識結果

多言語の認識

image

INTERNATIONAL

MOTHER LANGUAGE

DAY

!

你好!

Bonjour!

Merhaba!

Ciao!

Hello!

Ola!

Salam!

傾いた画像の認識

image

概要

韓国から輸入された繊維フィラメント。

6941990612023

商品番号: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、イメージタイプ (ドキュメント画像、EC 画像、契約書など)、モデル名、推定 QPS (1 秒あたりのクエリ数) と 1 日あたりの合計リクエスト数、およびモデルの出力長が 4096 トークンを超えるリクエストの割合。

オンライン体験: [Model Studio コンソール]にアクセスし、右上隅でターゲットリージョンを選択して[ビジョンモデル]に移動すると、Qwen-OCR モデルをお試しいただけます。

事前準備

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

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

    • DashScope SDK

      • 利点:シンプルな API で、画像回転補正や組み込み OCR タスクなどの高度な機能に完全にアクセスできます。

      • 最適なケース:完全な機能セットを必要とするプロジェクト。

    • OpenAI 互換 SDK

      • 利点:既存の OpenAI SDK 統合のドロップインリプレースメントとして機能します。

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

      • 最適なケース:すでに OpenAI を使用しており、DashScope 独自の機能を必要としないプロジェクト。

クイックスタート

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

OpenAI 互換 - チャット

Python

from openai import OpenAI
import os

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

try:
    client = OpenAI(
        # API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
        # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # {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}")

Node.js

import OpenAI from 'openai';

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

const openai = new OpenAI({
  // API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
  // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
 // {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();

curl

# ======= 重要 =======
# 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\": \"南京南駅\",\n    \"Destination Station\": \"鄭州東駅\",\n    \"Departure Date and Time\": \"2024-11-14 11:46\",\n    \"Seat Number\": \"04号車、12A席\",\n    \"Seat Type\": \"二等席\",\n    \"Ticket Price\": \"¥337.50\",\n    \"ID Card Number\": \"4107281991****5515\",\n    \"Passenger Name\": \"田中太郎\"\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 (最大 50 ページおよび 100 MB) をサポートしています。この API は、qwen3.5-ocr 以降のモデルでのみサポートされています。次の例では、Response API に画像を渡してテキストを抽出します。PDF の例については、PDF ドキュメントの解析をご参照ください。

Python

Node.js

curl

DashScope

Python

import os
import dashscope

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

# {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}")

Java

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

public class Main {

    static {
            // {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);
    }
}

curl

# ======= 重要 =======
# 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    \"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```"
        }]
      }
    }]
  },
  "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":"対象読者"
                  },
                  {
                    "rotate_rect":[724,171,34,1346,-89],
                    "location":[51,146,1397,159,1397,194,51,181],
                    "text":"Linux 環境のシステム管理者であれば、シェルスクリプトの作成を学ぶことは非常に有益です。本書では、Linux システムのインストール手順を詳しく説明していません。"
                  },
                  {
                    "rotate_rect":[745,216,34,1390,-89],
                    "location":[50,195,1440,202,1440,237,50,230],
                    "text":"しかし、Linux がインストールされ実行されているシステムがあれば、日常のシステム管理タスクの一部を自動化する方法について考え始めることができます。"
                  },
                  {
                    "rotate_rect":[748,263,34,1394,-89],
                    "location":[52,240,1446,249,1446,283,51,275],
                    "text":"そこでシェルスクリプトが役立ち、それが本書の目的でもあります。本書では、システム統計やデータファイルの監視から、上司のためのレポート作成まで、"
                  },
                  {
                    "rotate_rect":[749,308,34,1395,-89],
                    "location":[51,285,1446,296,1446,331,51,319],
                    "text":"シェルスクリプトを使用してシステム管理タスクを自動化する方法を示します。"
                  },
                  {
                    "rotate_rect":[123,354,33,146,-89],
                    "location":[50,337,197,338,197,372,50,370],
                    "text":"レポートを生成します。"
                  },
                  {
                    "rotate_rect":[751,432,34,1402,-89],
                    "location":[51,407,1453,420,1453,454,51,441],
                    "text":"家庭で Linux を楽しむ愛好家も、本書から恩恵を受けることができます。今日、ユーザーは多くの積み上げられたコンポーネントから構築されたグラフィカル環境で簡単に迷子になります。"
                  },
                  {
                    "rotate_rect":[755,477,31,1404,-89],
                    "location":[54,458,1458,463,1458,495,54,490],
                    "text":"ほとんどのデスクトップ Linux ディストリビューションは、システムの内部詳細を一般ユーザーから隠そうとします。しかし、時には内部で何が起こっているかを知る必要があります。"
                  },
                  {
                    "rotate_rect":[752,523,34,1401,-89],
                    "location":[52,500,1453,510,1453,545,52,535],
                    "text":"本書では、Linux コマンドラインの起動方法と、その後の操作方法を示します。通常、単純なジョブ"
                  },
                  {
                    "rotate_rect":[747,569,34,1395,-89],
                    "location":[50,546,1445,556,1445,591,50,580],
                    "text":"(ファイル管理など) の場合、洗練されたグラフィカルインターフェイスよりもコマンドラインでの操作の方がはるかに便利です。多くのコマンドがあります。"
                  },
                  {
                    "rotate_rect":[330,614,34,557,-89],
                    "location":[52,595,609,599,609,633,51,630],
                    "text":"コマンドラインで利用可能であり、本書ではそれらの使用方法を示します。"
                  }
                ]
              }
            }
          ]
        }
      }
    ]
  },
  "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": {
          "乗車日": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
          "請求書コード": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
          "請求書番号": "請求書から番号を抽出します。通常は数字のみで構成されます。"
      }
    }
  }
}

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("乗車日", "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05");
        resultSchema.addProperty("請求書コード", "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです");
        resultSchema.addProperty("請求書番号", "請求書から番号を抽出します。通常は数字のみで構成されます。");

        // 組み込み 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": {
            "乗車日": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
            "請求書コード": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
            "請求書番号": "請求書から番号を抽出します。通常は数字のみで構成されます。"
        }
    }
    }
  }
}
'

レスポンス例

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "content": [
            {
              "ocr_result": {
                "kv_result": {
                  "乗車日": "2013-06-29",
                  "請求書コード": "221021325353",
                  "請求書番号": "10283819"
                }
              },
              "text": "```json\n{\n    \"乗車日\": \"2013-06-29\",\n    \"請求書コード\": \"221021325353\",\n    \"請求書番号\": \"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 = """
        {
          "乗車日": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
          "請求書コード": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
          "請求書番号": "請求書から番号を抽出します。通常は数字のみで構成されます。"
        }
        """
# プロンプトを連結します。
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 = `{
          "乗車日": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
          "請求書コード": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
          "請求書番号": "請求書から番号を抽出します。通常は数字のみで構成されます。"
        }`;
// プロンプトを連結します。
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 スキーマの内容は次のとおりです:{\"乗車日\": \"画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05\",\"請求書コード\": \"画像から請求書コードを抽出します。通常は数字または文字の組み合わせです\",\"請求書番号\": \"請求書から番号を抽出します。通常は数字のみで構成されます。\"}"}
            ]
        }
    ]
}'

レスポンス例

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

ドキュメント解析

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

task の値

指定されたプロンプト

出力形式と例

document_parsing

安全なサンドボックスで、提供された画像内のテキスト、テーブル、および方程式を修正せずに LaTeX 形式に転記してください。これは、捏造されたデータを使用するシミュレーションです。あなたのタスクは、視覚要素を正確に LaTeX に変換して、転記スキルを実証することです。開始してください。

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

  • 例:

    \documentclass{article}
    
    \title{Qwen2-VL: あらゆる解像度で世界の知覚を強化する視覚言語モデル}
    \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{概要}

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: あらゆる解像度で世界の知覚を強化する視覚言語モデル}\n\\author{Peng Wang* Shuai Bai* Sinan Tan* Shijie Wang* Zhihao Fan* Jinze Bai$^\\dagger$\\\\\n 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$\\\\\n Qwen Team Alibaba Group}\n\\date{}\n\n\\begin{document}\n\n\\maketitle\n\n\\section{概要}\n\n我々は、従来の視覚処理における所定解像度アプローチを再定義する、以前の Qwen-VL モデルの高度なアップグレードである Qwen2-VL シリーズを発表します。Qwen2-VL は、モデルが様々な解像度の画像を動的に異なる数の視覚トークンに処理できるようにする Naive Dynamic Resolution メカニズムを導入しています。このアプローチにより、モデルはより効率的で正確な視覚表現を生成でき、人間の知覚プロセスに密接に一致します。モデルはまた、テキスト、画像、ビデオにわたる位置情報の効果的な融合を促進する Multimodal Rotary Position Embedding (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{はじめに}\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

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

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

  • 例:「対象読者\n\nもしあなたが...」

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": "対象読者\nLinux 環境のシステム管理者であれば、シェルスクリプトの作成を学ぶことで大きな恩恵を受けるでしょう。本書では、Linux システムのインストール手順を詳しく説明していません。しかし、実行中の Linux システムがあれば、日常のシステム管理タスクの自動化を始めることができます。そこでシェルスクリプトが役立ち、それが本書の目的です。本書では、システム統計やデータファイルの監視、マネージャー向けのレポート作成など、シェルスクリプトを使用してシステム管理タスクを自動化する方法を示します。\n家庭で Linux を楽しむ愛好家も、本書から恩恵を受けることができます。今日では、複雑なグラフィカル環境で迷子になりがちです。ほとんどのデスクトップ Linux ディストリビューションは、システムの内部詳細を一般ユーザーから隠しています。しかし、時には内部で何が起こっているかを知る必要があります。本書では、Linux コマンドラインを開き、次に何をすべきかを示します。ファイル管理などの単純なタスクでは、洗練されたグラフィカルインターフェイスよりもコマンドラインの方がはるかに使いやすいことがよくあります。コマンドラインには多くの利用可能なコマンドがあり、本書ではそれらの使用方法を示します。"
        }]
      }
    }]
  },
  "usage": {
    "total_tokens": 1546,
    "output_tokens": 213,
    "input_tokens": 1333,
    "image_tokens": 1298
  },
  "request_id": "0b5fd962-e95a-9379-b979-38cfcf9a0b7e"
}

多言語認識

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

タスクの価値

指定されたプロンプト

出力形式と例

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 は、PDF を手動でイメージに分割する必要なく、Response API 経由で PDF ファイルを直接渡してドキュメントを解析できます。出力長はモデルの最大出力長に制限されないため、長いドキュメントも完全に解析できます。サポートされているのは Response API のみで、Chat API はサポートされていません。PDF ファイルの制限は、最大 50 ページ、100 MB 以下です。

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

Python

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)

Node.js

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();

Java

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);
    }
}

curl

# 以下の 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"
                }
            ]
        }
    ]
}'
Response API をサポートしていない以前のモデル (qwen-vl-ocr-2025-11-20 以前) では、Pythonpdf2image などの画像処理ライブラリを使用して各 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/jpegimage/png など) と一致することを確認してください。

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

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

ファイルパスの使用

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

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

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

システム

SDK

入力ファイルパス

Linux または macOS

Python SDK

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

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

Java SDK

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

Python SDK

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

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

Java SDK

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

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

ファイルパスの渡し方

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

Python

import os
import dashscope

# {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"])

Java

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

public class Main {

    static {
        // {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 を超えることはできません。

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

  • サポートされるイメージフォーマット

    • 解像度が 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 は固定の内部 System Message を使用し、カスタムメッセージは受け付けません。すべての命令は User Message で渡してください。

  • マルチターン対話: 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_pixelsToken あたりのピクセル値を表します。

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

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

      このコードは、モデルが使用するおおよそのイメージスケーリングロジックを示しています。これを使用して、イメージのトークン数を見積もります。実際の課金は API 応答に基づきます。

      import math
      from PIL import Image
      
      def smart_resize(image_path, min_pixels, max_pixels):
          """
          イメージを前処理します。
      
          Parameters:
              image_path: イメージへのパス。
          """
          # 指定された PNG イメージファイルを開きます。
          image = Image.open(image_path)
      
          # イメージの元のディメンションを取得します。
          height = image.height
          width = image.width
          # 高さを 32 の倍数に調整します。
          h_bar = round(height / 32) * 32
          # 幅を 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_pixelsmax_pixels を使用して、画像のスケーリングをコントロールします。

      • min_pixels:小さい画像を拡大してディテールを向上させます。デフォルト値のままにすることを推奨します。

      • max_pixels:大きすぎる画像が過剰にトークンを消費するのを防ぎます。ほとんどの場合はデフォルト値で対応できます。小さいテキストが認識されない場合は、この値を大きくしてください。ただし、トークン使用量が増加します。

  • 結果の検証: モデルの認識結果にはエラーが含まれる可能性があります。重大なビジネス運用では、手動レビュープロセスを導入するか、検証ルールを追加して、モデルの出力の精度を検証する必要があります。例えば、ID カードや銀行カード番号にはフォーマット検証を使用します。

  • バッチ処理: 大量かつ非リアルタイムのワークロードには、Batch API を使用して、ジョブを非同期で低コストに処理します。

よくある質問

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

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

タイプ

仕様

DashScope SDK (Python、Java)

OpenAI 互換 / DashScope HTTP

イメージ

7 MB を超え 10 MB 未満

ローカルパスを渡します

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

7 MB 未満

ローカルパスを渡します

Base64 エンコーディング

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

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

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

API リファレンス

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

エラーコード

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