Qwen-OCR は、テキスト抽出用に設計された視覚理解モデルです。スキャンされたドキュメント、テーブル、レシートなど、さまざまな画像からテキストを抽出し、構造化データを解析します。多言語をサポートし、特定のタスク命令を使用して、情報抽出、テーブル解析、数式認識などの高度な関数を実行できます。
プレイグラウンド (シンガポール または 北京) で Qwen-OCR をオンラインでお試しいただけます。
例
入力画像 | 認識結果 |
多言語の認識
|
|
傾いた画像の認識
| Product Introduction Imported fiber filaments from South Korea. 6941990612023 Item No.: 2023 |
テキストの位置特定
高精度認識タスクはテキストの位置特定をサポートします。 | 位置特定の可視化
詳細については、「よくある質問」の各テキスト行のバウンディングボックスを元の画像に描画する方法をご参照ください。 |
モデルと料金
国際 (シンガポール)
モデル | バージョン | コンテキストウィンドウ | 最大入力 | 最大出力 | 入力コスト | 出力コスト | 無料クォータ |
(トークン) | (100 万トークン) | ||||||
qwen-vl-ocr | 安定版 | 34,096 | 30,000 画像あたり最大 30,000 | 4096 | $0.72 | $0.72 | それぞれ 100 万トークン アクティベーション後 90 日間有効 |
qwen-vl-ocr-2025-11-20 qwen-vl-ocr-1120 とも呼ばれます Qwen3-VL に基づいています。ドキュメント解析とテキストの位置特定が大幅に向上します。 | スナップショット | 38,192 | 8,192 | $0.07 | $0.16 | ||
中国本土 (北京)
モデル | バージョン | コンテキストウィンドウ | 最大入力 | 最大出力 | 入力コスト | 出力コスト | 無料クォータ |
(トークン) | (100 万トークン) | ||||||
qwen-vl-ocr 現在、qwen-vl-ocr-2025-08-28 と同じ機能です | 安定版 | 34,096 | 30,000 画像あたり最大 30,000 | 4,096 | $0.717 | $0.717 | 無料クォータなし |
qwen-vl-ocr-latest 常に最新のスナップショットと同じ機能 | 最新版 | 38,192 | 8,192 | $0.043 | $0.072 | ||
qwen-vl-ocr-2025-11-20 qwen-vl-ocr-1120 とも呼ばれます Qwen3-VL に基づいています。ドキュメント解析とテキストの位置特定が大幅に向上します。 | スナップショット | ||||||
qwen-vl-ocr-2025-08-28 qwen-vl-ocr-0828 とも呼ばれます | 34,096 | 4,096 | $0.717 | $0.717 | |||
qwen-vl-ocr-2025-04-13 qwen-vl-ocr-0413 とも呼ばれます | |||||||
qwen-vl-ocr-2024-10-28 qwen-vl-ocr-1028 とも呼ばれます | |||||||
qwen-vl-ocr, qwen-vl-ocr-2025-04-13, and qwen-vl-ocr-2025-08-28モデルでは、max_tokensパラメーター (最大出力長) のデフォルト値は 4096 です。この値を 4097 から 8192 の範囲に増やすには、modelstudio@service.aliyun.com にメールを送信し、Alibaba Cloud アカウント ID、画像タイプ (ドキュメント画像、E コマース画像、契約書など)、モデル名、推定 QPS と 1 日の合計リクエスト数、モデルの出力が 4096 トークンを超えるリクエストの割合などの情報を含めてください。
事前準備
OpenAI SDK または DashScope SDK を使用してモデルを呼び出す前に、SDK の最新バージョンをインストールしてください。必要な最小バージョンは、DashScope Python SDK の場合は 1.22.2、Java SDK の場合は 2.21.8 です。
DashScope SDK
利点:画像の自動回転や組み込み OCR タスクなど、すべての高度な機能をサポートします。包括的な機能と、モデルを呼び出すためのより簡単なメソッドを提供します。
シナリオ:完全な機能を必要とするプロジェクトに最適です。
OpenAI 互換 SDK
利点:すでに OpenAI SDK またはそのエコシステムツールを使用しているユーザーにとって便利で、迅速な移行が可能です。
制限:高度な機能 (画像の自動回転や組み込み OCR タスク) は、パラメーターを使用して直接呼び出すことはできません。複雑なプロンプトを構築してこれらの機能を手動でシミュレートし、出力結果を自分で解析する必要があります。
シナリオ:すでに OpenAI との統合があり、DashScope 専用の高度な機能に依存しないプロジェクトに最適です。
クイックスタート
次の例では、列車の切符画像 (URL) から主要な情報を抽出し、JSON 形式で返します。詳細については、「ローカルファイルの渡し方」および「画像の制限事項」をご参照ください。
OpenAI 互換
Python
from openai import OpenAI
import os
PROMPT_TICKET_EXTRACTION = """
列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。
主要な情報を正確に抽出してください。情報を省略したり、偽の情報を捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。
データを JSON 形式で返してください:{'Invoice Number': 'xxx', 'Train Number': 'xxx', 'Departure Station': 'xxx', 'Destination Station': 'xxx', 'Departure Date and Time': 'xxx', 'Seat Number': 'xxx', 'Seat Type': 'xxx', 'Ticket Price': 'xxx', 'ID Card Number': 'xxx', 'Passenger Name': 'xxx'}
"""
try:
client = OpenAI(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください。
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-vl-ocr-2025-11-20",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192
},
# モデルはテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
{"type": "text",
"text": PROMPT_TICKET_EXTRACTION}
]
}
])
print(completion.choices[0].message.content)
except Exception as e:
print(f"エラーメッセージ: {e}")Node.js
import OpenAI from 'openai';
// 列車の切符情報を抽出するためのプロンプトを定義します。
const PROMPT_TICKET_EXTRACTION = `
列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。
主要な情報を正確に抽出してください。情報を省略したり、偽の情報を捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。
データを JSON 形式で返してください:{'Invoice Number': 'xxx', 'Train Number': 'xxx', 'Departure Station': 'xxx', 'Destination Station': 'xxx', 'Departure Date and Time': 'xxx', 'Seat Number': 'xxx', 'Seat Type': 'xxx', 'Ticket Price': 'xxx', 'ID Card Number': 'xxx', 'Passenger Name': 'xxx'}
`;
const openai = new OpenAI({
// シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください。
baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
});
async function main() {
const response = await openai.chat.completions.create({
model: 'qwen-vl-ocr-2025-11-20',
messages: [
{
role: 'user',
content: [
// モデルは次のテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
{ type: 'text', text: PROMPT_TICKET_EXTRACTION},
{
type: 'image_url',
image_url: {
url: 'https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg',
},
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
min_pixels: 32 * 32 * 3,
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
max_pixels: 32 * 32 * 8192
}
]
}
],
});
console.log(response.choices[0].message.content)
}
main();curl
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-vl-ocr-2025-11-20",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
"min_pixels": 3072,
"max_pixels": 8388608
},
{"type": "text", "text": "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、偽の情報を捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Destination Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Type\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Card Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"}
]
}
]
}'応答の例
DashScope
Python
import os
import dashscope
PROMPT_TICKET_EXTRACTION = """
列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。
主要な情報を正確に抽出してください。情報を省略したり、偽の情報を捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。
データを JSON 形式で返してください:{'Invoice Number': 'xxx', 'Train Number': 'xxx', 'Departure Station': 'xxx', 'Destination Station': 'xxx', 'Departure Date and Time': 'xxx', 'Seat Number': 'xxx', 'Seat Type': 'xxx', 'Ticket Price': 'xxx', 'ID Card Number': 'xxx', 'Passenger Name': 'xxx'}
"""
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転を有効にします。
"enable_rotate": False
},
# 組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
{"type": "text", "text": PROMPT_TICKET_EXTRACTION}]
}]
try:
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages
)
print(response["output"]["choices"][0]["message"].content[0]["text"])
except Exception as e:
print(f"エラーが発生しました: {e}")Java
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg");
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転を有効にします。
map.put("enable_rotate", false);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
// 組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
Collections.singletonMap("text", "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、偽の情報を捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Destination Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Type\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Card Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}curl
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
--header "Authorization: Bearer $DASHSCOPE_API_KEY"\
--header 'Content-Type: application/json'\
--data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [{
"image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
},
{
"text": "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席種別、運賃、ID カード番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、偽の情報を捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Destination Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Type\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Card Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"
}
]
}
]
}
}'組み込みタスクの使用
qwen-vl-ocr-2024-10-28 を除くモデルには、特定のシナリオでの呼び出しを簡素化するために、いくつかの組み込みタスクが含まれています。
使用方法:
DashScope SDK:
Promptを設計して渡す必要はありません。モデルは内部で固定のPromptを使用します。ocr_optionsパラメーターを設定して、組み込みタスクを呼び出すことができます。OpenAI 互換 SDK:タスクに指定された
Promptを手動で入力する必要があります。
次の表に、各組み込みタスクの task の値、指定された Prompt、出力形式、および例を示します。
高精度認識
qwen-vl-ocr-2025-08-28 以降のモデルバージョンまたは最新バージョンを使用して、高精度認識タスクを呼び出すことを推奨します。このタスクには次の属性があります。
テキストコンテンツの認識 (テキスト抽出)
テキスト位置の検出 (テキスト行の位置を特定し、座標を出力)
座標を取得した後に元の画像にバウンディングボックスを描画する方法の詳細については、「よくある質問」をご参照ください。
task の値 | 指定されたプロンプト | 出力形式と例 |
| すべてのテキスト行を特定し、回転した矩形の座標 |
|
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転を有効にします。
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# 組み込みタスクを高精度認識に設定します。
ocr_options={"task": "advanced_recognition"}
)
# 多言語認識タスクは結果をプレーンテキストで返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])// dashscope SDK バージョン >= 2.21.8
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg");
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転を有効にします。
map.put("enable_rotate", false);
// 組み込み OCR タスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.ADVANCED_RECOGNITION)
.build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.ocrOptions(ocrOptions)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンのベース URL です。シンガポールリージョンのモデルを使用する場合は、base_url を https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "advanced_recognition"
}
}
}
'情報抽出
モデルは、レシート、証明書、フォームなどのドキュメントから構造化情報を抽出し、結果を JSON 形式で返します。2 つのモードから選択できます。
カスタムフィールド抽出:
ocr_options.task_configパラメーターでカスタム JSON テンプレート (result_schema) を指定できます。このテンプレートは、抽出する特定のフィールド名 (key) を定義します。モデルは対応する値 (value) を自動的に入力します。テンプレートは最大 3 レベルのネストをサポートします。全フィールド抽出:
result_schemaパラメーターが指定されていない場合、モデルは画像からすべてのフィールドを抽出します。
2 つのモードのプロンプトは異なります。
task の値 | 指定されたプロンプト | 出力形式と例 |
| カスタムフィールド抽出: |
|
全フィールド抽出: |
|
以下は、DashScope SDK と HTTP を使用してモデルを呼び出すためのコード例です。
# [pip install -U dashscope] を使用して sdk を更新します
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
{
"role":"user",
"content":[
{
"image":"http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": False
}
]
}
]
params = {
"ocr_options":{
"task": "key_information_extraction",
"task_config": {
"result_schema": {
"Ride Date": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
"Invoice Code": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
"Invoice Number": "請求書から番号を抽出します。通常は数字のみで構成されます。"
}
}
}
}
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/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 comalibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.google.gson.JsonObject;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg");
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転を有効にします。
map.put("enable_rotate", false);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
// メインの JSON オブジェクトを作成します。
JsonObject resultSchema = new JsonObject();
resultSchema.addProperty("Ride Date", "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05");
resultSchema.addProperty("Invoice Code", "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです");
resultSchema.addProperty("Invoice Number", "請求書から番号を抽出します。通常は数字のみで構成されます。");
// 組み込み OCR タスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.KEY_INFORMATION_EXTRACTION)
.taskConfig(OcrOptions.TaskConfig.builder()
.resultSchema(resultSchema)
.build())
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.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 キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "key_information_extraction",
"task_config": {
"result_schema": {
"Ride Date": "画像内の乗車日時に対応し、YYYY-MM-DD 形式、例:2025-03-05",
"Invoice Code": "画像から請求書コードを抽出します。通常は数字または文字の組み合わせです",
"Invoice Number": "請求書から番号を抽出します。通常は数字のみで構成されます。"
}
}
}
}
}
'OpenAI SDK または HTTP メソッドを使用する場合、カスタム JSON スキーマをプロンプト文字列の末尾に追加する必要があります。詳細については、次のコード例をご参照ください。
テーブル解析
モデルは画像内のテーブル要素を解析し、認識結果を HTML 形式のテキストとして返します。
task の値 | 指定されたプロンプト | 出力形式と例 |
|
|
|
以下は、DashScope SDK と HTTP を使用してモデルを呼び出すためのコード例です。
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転を有効にします。
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# 組み込みタスクをテーブル解析に設定します。
ocr_options= {"task": "table_parsing"}
)
# テーブル解析タスクは結果を HTML 形式で返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。 北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg");
// 入力イメージの最大ピクセルしきい値です。 イメージがこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力イメージの最小ピクセルしきい値です。 イメージがこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels",3072);
// 自動イメージ回転を有効にします。
map.put("enable_rotate", false);
// 組み込みの OCR タスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.TABLE_PARSING)
.build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。 詳細については、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 キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "table_parsing"
}
}
}
'ドキュメント解析
モデルは、スキャンされたドキュメントや画像として保存された PDF ドキュメントを解析できます。ファイル内のタイトル、要約、ラベルなどの要素を認識し、認識結果を LaTeX 形式のテキストとして返します。
タスク値 | 指定されたプロンプト | 出力形式と例 |
|
|
|
以下は、DashScope SDK と HTTP を使用してモデルを呼び出すためのコード例です。
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転を有効にします。
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# 組み込みタスクをドキュメント解析に設定します。
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 comalibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg");
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転を有効にします。
map.put("enable_rotate", false);
// 組み込み OCR タスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.DOCUMENT_PARSING)
.build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.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 キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
--header "Authorization: Bearer $DASHSCOPE_API_KEY"\
--header 'Content-Type: application/json'\
--data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [{
"image": "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "document_parsing"
}
}
}
'数式認識
モデルは画像内の数式を解析し、認識結果を LaTeX 形式のテキストとして返します。
task の値 | 指定されたプロンプト | 出力形式と例 |
|
|
|
以下は、DashScope SDK と HTTP を使用してモデルを呼び出すためのコード例です。
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転を有効にします。
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# 組み込みタスクを数式認識に設定します。
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 comalibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg");
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転を有効にします。
map.put("enable_rotate", false);
// 組み込み OCR タスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.FORMULA_RECOGNITION)
.build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.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 キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
"model": "qwen-vl-ocr",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "formula_recognition"
}
}
}
'一般テキスト認識
一般テキスト認識は、主に中国語と英語のシナリオで使用され、認識結果をプレーンテキスト形式で返します。
task の値 | 指定されたプロンプト | 出力形式と例 |
|
|
|
以下は、DashScope SDK と HTTP を使用して呼び出しを行うためのコード例です。
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転を有効にします。
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# 組み込みタスクを一般テキスト認識に設定します。
ocr_options= {"task": "text_recognition"}
)
# 一般テキスト認識タスクは結果をプレーンテキスト形式で返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg");
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転を有効にします。
map.put("enable_rotate", false);
// 組み込みタスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.TEXT_RECOGNITION)
.build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.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 キーは異なります。詳細については、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
--header "Authorization: Bearer $DASHSCOPE_API_KEY"\
--header 'Content-Type: application/json'\
--data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [{
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "text_recognition"
}
}
}'多言語認識
多言語認識は、中国語と英語以外の言語を含むシナリオで使用されます。サポートされている言語は、アラビア語、フランス語、ドイツ語、イタリア語、日本語、韓国語、ポルトガル語、ロシア語、スペイン語、ベトナム語です。認識結果はプレーンテキスト形式で返されます。
task の値 | 指定されたプロンプト | 出力形式と例 |
|
|
|
以下は、DashScope SDK と HTTP を使用して呼び出しを行うためのコード例です。
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{
"role": "user",
"content": [{
"image": "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png",
# 入力画像の最小ピクセルしきい値。画像がこのしきい値より小さい場合、総ピクセル数が `min_pixels` を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこのしきい値より大きい場合、総ピクセル数が `max_pixels` を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
# 画像の自動回転機能を有効にします。
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# 組み込みタスクを多言語認識に設定します。
ocr_options={"task": "multi_lan"}
)
# 多言語認識タスクは結果をプレーンテキストで返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png");
// 入力画像の最大ピクセルしきい値。画像がこのしきい値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこのしきい値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
// 画像の自動回転機能を有効にします。
map.put("enable_rotate", false);
// 組み込み OCR タスクを設定します。
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.MULTI_LAN)
.build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-api-key をご参照ください
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.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/ja/model-studio/get-api-key をご参照ください
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "multi_lan"
}
}
}
'ローカルファイルの渡し方 (Base64 エンコーディングまたはファイルパス)
モデルは、ローカルファイルをアップロードするための 2 つのメソッドをサポートしています。
ファイルパスを使用した直接アップロード (より安定した転送、推奨)
Base64 エンコーディングを使用したアップロード
ファイルパスを使用したアップロード
ローカルファイルパスをモデルに直接渡すことができます。このメソッドは、DashScope Python および Java SDK でのみサポートされています。DashScope HTTP または OpenAI 互換のメソッドではサポートされていません。
プログラミング言語とオペレーティングシステムに基づいてファイルパスを指定する方法の詳細については、次の表をご参照ください。
Base64 エンコーディングを使用したアップロード
ファイルを Base64 エンコードされた文字列に変換してから、モデルに渡すことができます。このメソッドは、OpenAI、DashScope SDK、および HTTP メソッドに適用できます。
制限事項
より高い安定性のために、ファイルパスを使用したアップロードを推奨します。1 MB 未満のファイルには Base64 エンコーディングも使用できます。
ファイルパスを直接渡す場合、個々の画像は 10 MB 未満である必要があります。
Base64 エンコーディングを使用してファイルを渡す場合、Base64 エンコーディングはデータサイズを増加させるため、エンコードされた画像は 10 MB 未満である必要があります。
ファイルの圧縮方法の詳細については、「画像を必要なサイズに圧縮するにはどうすればよいですか?
ファイルパスの渡し方
このメソッドは、DashScope Python および Java SDK を使用してモデルを呼び出す場合にのみサポートされます。DashScope HTTP または OpenAI 互換のメソッドではサポートされていません。
Python
import os
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# xxx/test.jpg をローカル画像の絶対パスに置き換えます
local_path = "xxx/test.jpg"
image_path = f"file://{local_path}"
messages = [
{
"role": "user",
"content": [
{
"image": image_path,
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
},
# モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
{
"text": "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席クラス、運賃、ID 番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを次の JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"
},
],
}
]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen-vl-ocr-2025-11-20",
messages=messages,
)
print(response["output"]["choices"][0]["message"].content[0]["text"])
Java
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall(String localPath)
throws ApiException, NoApiKeyException, UploadFileException {
String filePath = "file://"+localPath;
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", filePath);
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
// モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
Collections.singletonMap("text", "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席クラス、運賃、ID 番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを次の JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
// xxx/test.jpg をローカル画像の絶対パスに置き換えます
simpleMultiModalConversationCall("xxx/test.jpg");
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}Base64 エンコーディングの渡し方
OpenAI 互換
Python
from openai import OpenAI
import os
import base64
# ローカルファイルを読み取り、Base64 形式でエンコードします
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# xxx/test.png をローカル画像の絶対パスに置き換えます
base64_image = encode_image("xxx/test.png")
client = OpenAI(
# シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-vl-ocr-2025-11-20",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
# Base64 文字列を渡す場合、画像形式 (image/{format}) はサポートされている画像のリストの Content-Type と一致する必要があることに注意してください。「f」は文字列フォーマットメソッドです。
# PNG 画像: f"data:image/png;base64,{base64_image}"
# JPEG 画像: f"data:image/jpeg;base64,{base64_image}"
# WEBP 画像: f"data:image/webp;base64,{base64_image}"
"image_url": {"url": f"data:image/png;base64,{base64_image}"},
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192
},
# モデルは次のテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
{"type": "text", "text": "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席クラス、運賃、ID 番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを次の JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"},
],
}
],
)
print(completion.choices[0].message.content)Node.js
import OpenAI from "openai";
import {
readFileSync
} from 'fs';
const client = new OpenAI({
// シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
// ローカルファイルを読み取り、Base64 形式でエンコードします
const encodeImage = (imagePath) => {
const imageFile = readFileSync(imagePath);
return imageFile.toString('base64');
};
// xxx/test.jpg をローカル画像の絶対パスに置き換えます
const base64Image = encodeImage("xxx/test.jpg")
async function main() {
const completion = await client.chat.completions.create({
model: "qwen-vl-ocr",
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\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"
}
]
}]
});
console.log(completion.choices[0].message.content);
}
main();curl
ファイルを Base64 エンコードされた文字列に変換する方法については、サンプルコードをご参照ください。
デモンストレーションのため、コード内の Base64 エンコードされた文字列
"data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."は切り捨てられています。実際の使用では、完全なエンコードされた文字列を渡す必要があります。
# ======= 重要 =======
# シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen-vl-ocr-latest",
"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\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"}
]
}]
}'DashScope
Python
import os
import base64
import dashscope
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# Base64 エンコーディング形式
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# xxx/test.jpg をローカル画像の絶対パスに置き換えます
base64_image = encode_image("xxx/test.jpg")
messages = [
{
"role": "user",
"content": [
{
# Base64 文字列を渡す場合、画像形式 (image/{format}) はサポートされている画像のリストの Content-Type と一致する必要があることに注意してください。「f」は文字列フォーマットメソッドです。
# PNG 画像: f"data:image/png;base64,{base64_image}"
# JPEG 画像: f"data:image/jpeg;base64,{base64_image}"
# WEBP 画像: f"data:image/webp;base64,{base64_image}"
"image": f"data:image/jpeg;base64,{base64_image}",
# 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
"min_pixels": 32 * 32 * 3,
# 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
"max_pixels": 32 * 32 * 8192,
},
# モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
{
"text": "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席クラス、運賃、ID 番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを次の JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"
},
],
}
]
response = dashscope.MultiModalConversation.call(
# シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen-vl-ocr-2025-11-20",
messages=messages,
)
print(response["output"]["choices"][0]["message"].content[0]["text"])Java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
// Base64 エンコーディング形式
private static String encodeImageToBase64(String imagePath) throws IOException {
Path path = Paths.get(imagePath);
byte[] imageBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(imageBytes);
}
public static void simpleMultiModalConversationCall(String localPath)
throws ApiException, NoApiKeyException, UploadFileException, IOException {
String base64Image = encodeImageToBase64(localPath); // Base64 エンコーディング
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "data:image/jpeg;base64," + base64Image);
// 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
map.put("max_pixels", 8388608);
// 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
map.put("min_pixels", 3072);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
// モデルに組み込みタスクが設定されていない場合、テキストフィールドでプロンプトを渡すことができます。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
Collections.singletonMap("text", "列車の切符画像から、請求書番号、列車番号、出発駅、到着駅、出発日時、座席番号、座席クラス、運賃、ID 番号、乗客名を抽出してください。主要な情報を正確に抽出してください。情報を省略したり、捏造したりしないでください。ぼやけていたり、光で見えにくくなっている一文字はクエスチョンマーク (?) に置き換えてください。データを次の JSON 形式で返してください:{\'Invoice Number\': \'xxx\', \'Train Number\': \'xxx\', \'Departure Station\': \'xxx\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-vl-ocr-2025-11-20")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
// xxx/test.jpg をローカル画像の絶対パスに置き換えます
simpleMultiModalConversationCall("xxx/test.jpg");
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}curl
ファイルを Base64 エンコードされた文字列に変換する方法については、サンプルコードをご参照ください。
デモンストレーションのため、コード内の Base64 エンコードされた文字列
"data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."は切り捨てられています。実際の使用では、完全なエンコードされた文字列を渡す必要があります。
# ======= 重要 =======
# シンガポールリージョンと北京リージョンでは API キーが異なります。API キーを取得するには、https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key をご参照ください
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen-vl-ocr-latest",
"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\', \'Arrival Station\': \'xxx\', \'Departure Date and Time\': \'xxx\', \'Seat Number\': \'xxx\', \'Seat Class\': \'xxx\', \'Ticket Price\': \'xxx\', \'ID Number\': \'xxx\', \'Passenger Name\': \'xxx\'}"}
]
}
]
}
}'その他の使用方法
制限事項
画像の制限事項
ファイルサイズ:単一の画像ファイルのサイズは 10 MB を超えることはできません。Base64 エンコードされたファイルの場合、エンコードされた文字列のサイズは 10 MB を超えることはできません。詳細については、「ローカルファイルの渡し方」をご参照ください。
ディメンションとアスペクト比:画像の幅と高さは両方とも 10 ピクセルより大きい必要があります。アスペクト比は 200:1 または 1:200 を超えてはなりません。
総ピクセル数:モデルは画像を自動的にスケーリングするため、総ピクセル数に厳密な制限はありません。ただし、画像は 1,568 万ピクセルを超えないようにしてください。
画像フォーマット
一般的な拡張子
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
モデルの制限事項
システムメッセージ:このモデルは、固定の内部
System Messageを使用するため、カスタムSystem Messageをサポートしていません。すべての命令はUser Messageを使用して渡す必要があります。マルチターン対話なし:モデルはマルチターン対話をサポートしておらず、最新の質問にのみ回答します。
ハルシネーションのリスク:画像内のテキストが小さすぎるか、解像度が低い場合、モデルはハルシネーションを起こす可能性があります。また、テキスト抽出に関係のない質問への回答の正確性は保証されません。
テキストファイルを処理できません:
課金とレート制限
課金:Qwen-OCR はマルチモーダルモデルです。総コストは次のように計算されます:(入力トークン数 × 入力単価) + (出力トークン数 × 出力単価)。画像トークンの計算方法については、「画像トークン変換メソッド」をご参照ください。Alibaba Cloud 管理コンソールの 費用とコスト ページで請求書を表示したり、アカウントにチャージしたりできます。
レート制限:Qwen-OCR のレート制限については、「レート制限」をご参照ください。
無料クォータ (シンガポールリージョンのみ):Qwen-OCR は 100 万トークンの無料クォータを提供します。このクォータは、Alibaba Cloud Model Studio をアクティベートした日、またはモデルの使用リクエストが承認された日から 90 日間有効です。
本番運用時の注意点
PDF などの複数ページのドキュメントの処理:
分割:
Pythonのpdf2imageなどの画像編集ライブラリを使用して、PDF ファイルの各ページを高品質の画像に変換します。リクエストの送信:認識には 複数画像の入力 メソッドを使用します。
画像の前処理:
入力画像が鮮明で、均一に照らされ、過度に圧縮されていないことを確認してください:
情報損失を防ぐため、画像のストレージと転送には PNG などのロスレス形式を使用してください。
画像の鮮明度を向上させるため、平均または中央値フィルタリングなどのノイズリダクションアルゴリズムを使用して、ノイズを含む画像を平滑化してください。
不均一な照明を補正するには、適応型ヒストグラム均等化などのアルゴリズムを使用して、輝度とコントラストを調整してください。
傾いた画像の場合:DashScope SDK の
enable_rotate: trueパラメーターを使用すると、認識性能が大幅に向上します。非常に小さいまたは非常に大きい画像の場合:画像編集の前に
min_pixelsおよびmax_pixelsパラメーターを使用してスケーリング動作を制御します。min_pixels:小さい画像を拡大して詳細の検出を助けます。デフォルト値を維持することを推奨します。max_pixels:非常に大きな画像が過剰なリソースを消費するのを防ぎます。デフォルト値はほとんどのシナリオに適しています。小さいテキストが鮮明に検出されない場合は、max_pixelsの値を増やすことができます。これによりトークン消費量が増加することに注意してください。
結果の検証:モデルの認識結果にはエラーが含まれる場合があります。重大なビジネス運用では、手動レビュープロセスを実装するか、検証ルールを追加してモデルの出力の正確性を検証できます。たとえば、ID カード番号や銀行カード番号の形式検証を使用します。
バッチ呼び出し:大規模で非リアルタイムのシナリオでは、バッチ API を使用してバッチジョブを非同期で処理し、コストを削減します。
よくある質問
モデルがテキストの位置特定結果を出力した後、元の画像に検出ボックスを描画するにはどうすればよいですか?
API リファレンス
Qwen-OCR の入出力パラメーターについては、「Qwen-OCR API リファレンス」をご参照ください。
エラーコード
呼び出しが失敗した場合は、「エラーメッセージ」でトラブルシューティングを行ってください。









