Qwen-OCR adalah model pemahaman visual yang mengekstraksi teks dan data terstruktur dari gambar—seperti dokumen hasil pindaian, tabel, struk, dan lainnya. Model ini mendukung berbagai bahasa serta tugas OCR tingkat lanjut, termasuk ekstraksi informasi, penguraian tabel, pengenalan rumus, dan penguraian dokumen.
Coba secara online: Buka Konsol Alibaba Cloud Model Studio, pilih wilayah di pojok kanan atas, buka halaman vision, lalu pilih Qwen OCR.
Contoh
| Gambar input | Hasil pengenalan |
|---|---|
Kenali berbagai bahasa![]() |
|
Kenali gambar miring![]() | Perkenalan Produk Filamen serat impor dari Korea Selatan. 6941990612023 No. Item: 2023 |
Temukan posisi teks![]()
| Visualisasi pelokalisasian![]()
|
Pemilihan model
Qwen-OCR menyediakan model-model berikut. Pilih sesuai kebutuhan bisnis Anda:
- Qwen3.5-OCR: Dibangun di atas arsitektur Qwen3.5, dengan peningkatan komprehensif dalam penguraian dokumen, pelokalisasian teks, dan ekstraksi informasi kunci. Mendukung percakapan multi-putaran dan penguraian dokumen PDF. Mengalami peningkatan signifikan dalam mengekstraksi informasi dari sertifikat bisnis (seperti KTP dan SIM). Untuk jenis sertifikat yang didukung, lihat Jenis sertifikat dan dokumen yang didukung. Termasuk model
qwen3.5-ocr. - Qwen-VL-OCR: Dibangun di atas arsitektur Qwen3-VL. Mendukung tugas bawaan termasuk penguraian dokumen, pelokalisasian teks (pengenalan presisi tinggi), ekstraksi informasi, penguraian tabel, pengenalan rumus, pengenalan teks umum, dan pengenalan multibahasa. Juga mendukung koreksi rotasi gambar. Termasuk model
qwen-vl-ocr(stabil),qwen-vl-ocr-latest(terbaru),qwen-vl-ocr-2025-11-20, danqwen-vl-ocr-2025-08-28. - Versi lama (tidak direkomendasikan): Versi-versi ini lebih rendah dibanding model baru baik dari segi fitur maupun performa. Kami merekomendasikan migrasi ke
qwen3.5-ocr. Termasuk modelqwen-vl-ocr-2025-04-13danqwen-vl-ocr-2024-10-28.
qwen-vl-ocr, qwen-vl-ocr-2025-04-13, dan qwen-vl-ocr-2025-08-28, parametermax_tokens(panjang output maksimum) secara default bernilai 4096. Untuk meningkatkan nilai ini menjadi rentang 4097 hingga 8192, hubungi manajer komersial Anda dan berikan informasi berikut: ID akun Alibaba Cloud Anda, jenis gambar (misalnya gambar dokumen, gambar e-commerce, atau kontrak), nama model, perkiraan Queries Per Second (QPS) dan total permintaan harian, serta persentase permintaan di mana panjang output model melebihi 4096 token.
Pengalaman online: Kunjungi Konsol Model Studio, pilih wilayah target di pojok kanan atas, lalu buka Model Vision untuk mencoba model Qwen-OCR.
Persiapan
-
Buat Kunci API dan tetapkan sebagai variabel lingkungan.
-
Jika Anda menggunakan SDK OpenAI atau SDK DashScope, instal versi SDK terbaru. Versi minimum: SDK Python DashScope 1.22.2, SDK Java 2.21.8.
-
SDK DashScope
- Keunggulan: Akses penuh ke fitur-fitur tingkat lanjut—seperti koreksi rotasi gambar dan tugas OCR bawaan—dengan API yang sederhana.
- Paling cocok untuk: Proyek yang membutuhkan rangkaian fitur lengkap.
-
SDK kompatibel OpenAI
- Keunggulan: Pengganti langsung untuk integrasi SDK OpenAI yang sudah ada.
- Keterbatasan: Fitur-fitur tingkat lanjut seperti koreksi rotasi gambar dan tugas OCR bawaan tidak tersedia langsung sebagai parameter. Simulasikan dengan menyusun prompt dan mengurai output.
- Paling cocok untuk: Proyek yang sudah menggunakan OpenAI dan tidak memerlukan fitur eksklusif DashScope.
-
SDK DashScope
Memulai
Contoh berikut mengekstraksi bidang terstruktur dari gambar tiket kereta (URL) dan mengembalikan hasil dalam format JSON. Untuk file lokal, lihat cara meneruskan file lokal. Untuk batasan input, lihat batasan gambar.
OpenAI compatible-Chat
from openai import OpenAI
import os
PROMPT_TICKET_EXTRACTION = """
Please extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image.
Extract the key information accurately. Do not omit information or fabricate false information. Replace any single character that is blurry or obscured by glare with a question mark (?).
Return the data in JSON format: {'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 keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
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"},
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels exceed min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are below max_pixels.
"max_pixels": 32 * 32 * 8192
},
# The model supports passing a prompt in the text field. If no prompt is passed, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
{"type": "text",
"text": PROMPT_TICKET_EXTRACTION}
]
}
])
print(completion.choices[0].message.content)
except Exception as e:
print(f"Error message: {e}")
import OpenAI from 'openai';
// Define the prompt to extract train ticket information.
const PROMPT_TICKET_EXTRACTION = `
Please extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image.
Extract the key information accurately. Do not omit information or fabricate false information. Replace any single character that is blurry or obscured by glare with a question mark (?).
Return the data in JSON format: {'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 keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
// If you have not configured an environment variable, replace the following line with your Model Studio API key: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
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: [
// The model supports passing a prompt in the following text field. If no prompt is passed, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
{ 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',
},
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels exceed min_pixels.
min_pixels: 32 * 32 * 3,
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are below max_pixels.
max_pixels: 32 * 32 * 8192
}
]
}
],
});
console.log(response.choices[0].message.content)
}
main();
# ======= Important =======
# API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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": "Please extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit information or fabricate false information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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'}"}
]
}
]
}'
Contoh respons
{
"choices": [{
"message": {
"content": "```json\n{\n \"Invoice Number\": \"24329116804000\",\n \"Train Number\": \"G1948\",\n \"Departure Station\": \"Nanjing South Station\",\n \"Destination Station\": \"Zhengzhou East Station\",\n \"Departure Date and Time\": \"2024-11-14 11:46\",\n \"Seat Number\": \"Car 04, Seat 12A\",\n \"Seat Type\": \"Second Class\",\n \"Ticket Price\": \"¥337.50\",\n \"ID Card Number\": \"4107281991****5515\",\n \"Passenger Name\": \"Du Xiaoguang\"\n}\n```",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}],
"object": "chat.completion",
"usage": {
"prompt_tokens": 606,
"completion_tokens": 159,
"total_tokens": 765
},
"created": 1742528311,
"system_fingerprint": null,
"model": "qwen-vl-ocr-latest",
"id": "chatcmpl-20e5d9ed-e8a3-947d-bebb-c47ef1378598"
}
OpenAI compatible-Response
API Response mendukung gambar (hingga 20 MB) dan PDF (hingga 100 MB). Batas jumlah halaman PDF bergantung pada task di ocr_options: hingga 50 halaman jika task disetel ke document_parsing, dan hingga 10 halaman jika task tidak disetel atau disetel ke tugas lain. Hanya model qwen3.5-ocr dan versi setelahnya yang mendukung API ini. Contoh berikut meneruskan gambar melalui API Response untuk ekstraksi teks. Untuk contoh PDF, lihat penguraian dokumen PDF.
Python
Node.js
curl
DashScope
import os
import dashscope
PROMPT_TICKET_EXTRACTION = """
Please extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image.
Extract the key information accurately. Do not omit information or fabricate false information. Replace any single character that is blurry or obscured by glare with a question mark (?).
Return the data in JSON format: {'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'}
"""
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels exceed min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are below max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False
},
# When no built-in task is set, you can pass a prompt in the text field. If no prompt is passed, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
{"type": "text", "text": PROMPT_TICKET_EXTRACTION}]
}]
try:
response = dashscope.MultiModalConversation.call(
# API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages
)
print(response["output"]["choices"][0]["message"].content[0]["text"])
except Exception as e:
print(f"An error occurred: {e}")
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are below max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels exceed min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
// When no built-in task is set, you can pass a prompt in the text field. If no prompt is passed, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
Collections.singletonMap("text", "Please extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit information or fabricate false information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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 keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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": "Please extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit information or fabricate false information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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'}"
}
]
}
]
}
}'
Contoh respons
{
"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"
}
Panggil tugas bawaan
Model (kecuali qwen-vl-ocr-2024-10-28) dilengkapi tugas bawaan untuk skenario OCR umum.
- SDK DashScope: Atur parameter
ocr_optionsuntuk memanggil tugas bawaan. Mulai dariqwen3.5-ocr, tugas bawaan berjalan bersama Prompt kustom Anda (tidak lagi menimpanya), dan hasilnya dikembalikan dalam bidangocr_result. Model sebelumnya menggunakanPromptinternal yang tetap. - SDK kompatibel OpenAI: Teruskan
Promptspesifik tugas secara manual dalam pesan Anda.
Setiap tugas memiliki nilai task, Prompt tetap, format output, dan contoh output:
Pengenalan presisi tinggi
Untuk pengenalan presisi tinggi, gunakan versi model setelah qwen-vl-ocr-2025-08-28 atau versi terbaru (direkomendasikan). Fitur-fitur:
- Mengenali dan mengekstraksi konten teks.
- Mendeteksi posisi teks dengan melokalisasi baris teks dan mengeluarkan koordinatnya.
Untuk menggambar kotak pembatas pada gambar asli menggunakan koordinat yang dikembalikan, lihat FAQ.
| Nilai Tugas | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
| Temukan semua baris teks dan kembalikan koordinat persegi panjang yang diputar |
|
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to 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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# Set the built-in task to high-precision recognition.
ocr_options={"task": "advanced_recognition"}
)
# The high-precision recognition task returns the result as plain text.
print(response["output"]["choices"][0]["message"].content[0]["text"])
// dashscope SDK version >= 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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
// Configure the built-in OCR task.
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()
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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"
}
}
}
'
Contoh respons
{
"output":{
"choices":[
{
"finish_reason":"stop",
"message":{
"role":"assistant",
"content":[
{
"text":"```json\n[{\"pos_list\": [{\"rotate_rect\": [740, 374, 599, 1459, 90]}]}```",
"ocr_result":{
"words_info":[
{
"rotate_rect":[150,80,49,197,-89],
"location":[52,54,250,57,249,106,52,103],
"text":"Audience"
},
{
"rotate_rect":[724,171,34,1346,-89],
"location":[51,146,1397,159,1397,194,51,181],
"text":"If you are a system administrator in a Linux environment, learning to write shell scripts will be very beneficial. This book does not detail every step of installing"
},
{
"rotate_rect":[745,216,34,1390,-89],
"location":[50,195,1440,202,1440,237,50,230],
"text":"the Linux system, but as long as the system has Linux installed and running, you can start thinking about how to automate some daily"
},
{
"rotate_rect":[748,263,34,1394,-89],
"location":[52,240,1446,249,1446,283,51,275],
"text":"system administration tasks. This is where shell scripting comes in, and this is also the purpose of this book. This book will"
},
{
"rotate_rect":[749,308,34,1395,-89],
"location":[51,285,1446,296,1446,331,51,319],
"text":"demonstrate how to use shell scripts to automate system administration tasks, from monitoring system statistics and data files to for your boss"
},
{
"rotate_rect":[123,354,33,146,-89],
"location":[50,337,197,338,197,372,50,370],
"text":"generating reports."
},
{
"rotate_rect":[751,432,34,1402,-89],
"location":[51,407,1453,420,1453,454,51,441],
"text":"If you are a home Linux enthusiast, you can also benefit from this book. Nowadays, users can easily get lost in a graphical environment built from many stacked components."
},
{
"rotate_rect":[755,477,31,1404,-89],
"location":[54,458,1458,463,1458,495,54,490],
"text":"Most desktop Linux distributions try to hide the internal details of the system from general users. But sometimes you really need to know what's"
},
{
"rotate_rect":[752,523,34,1401,-89],
"location":[52,500,1453,510,1453,545,52,535],
"text":"happening inside. This book will show you how to start the Linux command line and what to do next. Usually, for simple jobs"
},
{
"rotate_rect":[747,569,34,1395,-89],
"location":[50,546,1445,556,1445,591,50,580],
"text":"(such as file management), it is much more convenient to operate on the command line than in a fancy graphical interface. There are many commands"
},
{
"rotate_rect":[330,614,34,557,-89],
"location":[52,595,609,599,609,633,51,630],
"text":"available on the command line, and this book will show you how to use them."
}
]
}
}
]
}
}
]
},
"usage":{
"input_tokens_details":{
"text_tokens":33,
"image_tokens":1377
},
"total_tokens":1448,
"output_tokens":38,
"input_tokens":1410,
"output_tokens_details":{
"text_tokens":38
},
"image_tokens":1377
},
"request_id":"f5cc14f2-b855-4ff0-9571-8581061c80a3"
}
Ekstraksi informasi
Mengekstraksi informasi terstruktur dari struk, sertifikat, dan formulir, serta mengembalikan hasil dalam format JSON. Model ini mendukung ekstraksi data terstruktur dari lebih dari 50 jenis sertifikat dan dokumen umum. Untuk daftar lengkapnya, lihat Jenis sertifikat dan dokumen yang didukung. Tersedia dua mode:
- Ekstraksi bidang kustom: Berikan templat JSON (
result_schema) diocr_options.task_configyang mendefinisikan nama bidang (key). Model akan mengisi nilainya (value). Templat mendukung hingga tiga lapisan bersarang. - Ekstraksi semua bidang: Abaikan
result_schemadan model akan mengekstraksi semua bidang yang ditemukan dalam gambar.
Prompt berbeda antara kedua mode tersebut:
| Nilai Tugas | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
| Ekstraksi bidang kustom: |
|
Ekstraksi semua bidang: |
|
Panggil model menggunakan SDK DashScope atau HTTP:
# use [pip install -U dashscope] to update sdk
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
{
"role":"user",
"content":[
{
"image":"http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": False
}
]
}
]
params = {
"ocr_options":{
"task": "key_information_extraction",
"task_config": {
"result_schema": {
"Ride Date": "Corresponds to the ride date and time in the image, in the format YYYY-MM-DD, for example, 2025-03-05",
"Invoice Code": "Extract the invoice code from the image, usually a combination of numbers or letters",
"Invoice Number": "Extract the number from the invoice, usually composed of only digits."
}
}
}
}
response = dashscope.MultiModalConversation.call(
# API keys vary by region. To get an API key, see 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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map
)).build();
// Create the main JSON object.
JsonObject resultSchema = new JsonObject();
resultSchema.addProperty("Ride Date", "Corresponds to the ride date and time in the image, in the format YYYY-MM-DD, for example, 2025-03-05");
resultSchema.addProperty("Invoice Code", "Extract the invoice code from the image, usually a combination of numbers or letters");
resultSchema.addProperty("Invoice Number", "Extract the number from the invoice, usually composed of only digits.");
// Configure the built-in OCR task.
OcrOptions ocrOptions = OcrOptions.builder()
.task(OcrOptions.Task.KEY_INFORMATION_EXTRACTION)
.taskConfig(OcrOptions.TaskConfig.builder()
.resultSchema(resultSchema)
.build())
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
"min_pixels": 3072,
"max_pixels": 8388608,
"enable_rotate": false
}
]
}
]
},
"parameters": {
"ocr_options": {
"task": "key_information_extraction",
"task_config": {
"result_schema": {
"Ride Date": "Corresponds to the ride date and time in the image, in the format YYYY-MM-DD, for example, 2025-03-05",
"Invoice Code": "Extract the invoice code from the image, usually a combination of numbers or letters",
"Invoice Number": "Extract the number from the invoice, usually composed of only digits."
}
}
}
}
}
'
Contoh respons
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": [
{
"ocr_result": {
"kv_result": {
"Ride Date": "2013-06-29",
"Invoice Code": "221021325353",
"Invoice Number": "10283819"
}
},
"text": "```json\n{\n \"Ride Date\": \"2013-06-29\",\n \"Invoice Code\": \"221021325353\",\n \"Invoice Number\": \"10283819\"\n}\n```"
}
],
"role": "assistant"
}
}
]
},
"usage": {
"image_tokens": 310,
"input_tokens": 521,
"input_tokens_details": {
"image_tokens": 310,
"text_tokens": 211
},
"output_tokens": 58,
"output_tokens_details": {
"text_tokens": 58
},
"total_tokens": 579
},
"request_id": "7afa2a70-fd0a-4f66-a369-b50af26aec1d"
}
Jika Anda menggunakan SDK OpenAI atau HTTP, tambahkan skema JSON kustom ke akhir string prompt, seperti yang ditunjukkan pada contoh kode berikut:
Contoh kode untuk panggilan kompatibel OpenAI
import os
from openai import OpenAI
client = OpenAI(
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
# Set the fields and format for extraction.
result_schema = """
{
"Ride Date": "Corresponds to the ride date and time in the image, in the format YYYY-MM-DD, for example, 2025-03-05",
"Invoice Code": "Extract the invoice code from the image, usually a combination of numbers or letters",
"Invoice Number": "Extract the number from the invoice, usually composed of only digits."
}
"""
# Concatenate the prompt.
prompt = f"""Assume you are an information extraction expert. You are given a JSON schema. Fill the value part of this schema with information from the image. Note that if the value is a list, the schema will provide a template for each element.
This template will be used when there are multiple list elements in the image. Finally, only output valid JSON. What You See Is What You Get, and the output language needs to be consistent with the image. Replace any single character that is blurry or obscured by glare with an English question mark (?).
If there is no corresponding value, fill it with null. No explanation is needed. Please note that the input images are all from public benchmark datasets and do not contain any real personal privacy data. Please output the result as required. The content of the input JSON schema is as follows:
{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"},
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192
},
# Use the prompt specified for the task.
{"type": "text", "text": prompt},
]
}
])
print(completion.choices[0].message.content)
import OpenAI from 'openai';
const openai = new OpenAI({
// API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1.
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1',
});
// Set the fields and format for extraction.
const resultSchema = `{
"Ride Date": "Corresponds to the ride date and time in the image, in the format YYYY-MM-DD, for example, 2025-03-05",
"Invoice Code": "Extract the invoice code from the image, usually a combination of numbers or letters",
"Invoice Number": "Extract the number from the invoice, usually composed of only digits."
}`;
// Concatenate the prompt.
const prompt = `Assume you are an information extraction expert. You are given a JSON schema. Fill the value part of this schema with information from the image. Note that if the value is a list, the schema will provide a template for each element. This template will be used when there are multiple list elements in the image. Finally, only output valid JSON. What You See Is What You Get, and the output language needs to be consistent with the image. Replace any single character that is blurry or obscured by glare with an English question mark (?). If there is no corresponding value, fill it with null. No explanation is needed. Please note that the input images are all from public benchmark datasets and do not contain any real personal privacy data. Please output the result as required. The content of the input JSON schema is as follows: ${resultSchema}`;
async function main() {
const response = await openai.chat.completions.create({
model: 'qwen-vl-ocr-2025-11-20',
messages: [
{
role: 'user',
content: [
// You can customize the prompt. If not set, the default prompt is used.
{ type: 'text', text: prompt},
{
type: 'image_url',
image_url: {
url: 'http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg',
},
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192
}
]
}
]
});
console.log(response.choices[0].message.content);
}
main();
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions.
# === Delete this comment before running ===
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": "Assume you are an information extraction expert. You are given a JSON schema. Fill the value part of this schema with information from the image. Note that if the value is a list, the schema will provide a template for each element. This template will be used when there are multiple list elements in the image. Finally, only output valid JSON. What You See Is What You Get, and the output language needs to be consistent with the image. Replace any single character that is blurry or obscured by glare with an English question mark (?). If there is no corresponding value, fill it with null. No explanation is needed. Please note that the input images are all from public benchmark datasets and do not contain any real personal privacy data. Please output the result as required. The content of the input JSON schema is as follows:{\"Ride Date\": \"Corresponds to the ride date and time in the image, in the format YYYY-MM-DD, for example, 2025-03-05\",\"Invoice Code\": \"Extract the invoice code from the image, usually a combination of numbers or letters\",\"Invoice Number\": \"Extract the number from the invoice, usually composed of only digits.\"}"}
]
}
]
}'
{
"choices": [
{
"message": {
"content": "```json\n{\n \"Ride Date\": \"2013-06-29\",\n \"Invoice Code\": \"221021325353\",\n \"Invoice Number\": \"10283819\"\n}\n```",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 519,
"completion_tokens": 58,
"total_tokens": 577,
"prompt_tokens_details": {
"image_tokens": 310,
"text_tokens": 209
},
"completion_tokens_details": {
"text_tokens": 58
}
},
"created": 1764161850,
"system_fingerprint": null,
"model": "qwen-vl-ocr-latest",
"id": "chatcmpl-f10aeae3-b305-4b2d-80ad-37728a5bce4a"
}
Penguraian tabel
Mengurai elemen tabel dalam gambar dan mengembalikan hasil pengenalan sebagai teks dalam format HTML.
| Nilai task | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
|
|
|
Panggil model menggunakan SDK DashScope atau HTTP:
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to 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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# Set the built-in task to table parsing.
ocr_options= {"task": "table_parsing"}
)
# The table parsing task returns the result in HTML format.
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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels",3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
// Configure the built-in OCR task.
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 keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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"
}
}
}
'
Contoh respons
{
"output": {
"choices": [{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [{
"text": "```html\n<table>\n <tr>\n <td>Case nameTest No.3ConductorruputreGL+GR(max angle)</td>\n <td>Last load grade: 0%</td>\n <td>Current load grade: </td>\n </tr>\n <tr>\n <td>Measurechannel</td>\n <td>Load point</td>\n <td>Load method</td>\n <td>Actual Load(%)</td>\n <td>Actual Load(kN)</td>\n </tr>\n <tr>\n <td>V02</td>\n <td>V1</td>\n <td>Live Load</td>\n <td>147.95</td>\n <td>0.815</td>\n </tr>\n <tr>\n <td>V03</td>\n <td>V2</td>\n <td>Live Load</td>\n <td>111.75</td>\n <td>0.615</td>\n </tr>\n <tr>\n <td>V04</td>\n <td>V3</td>\n <td>Live Load</td>\n <td>9.74</td>\n <td>1.007</td>\n </tr>\n <tr>\n <td>V05</td>\n <td>V4</td>\n <td>Live Load</td>\n <td>7.88</td>\n <td>0.814</td>\n </tr>\n <tr>\n <td>V06</td>\n <td>V5</td>\n <td>Live Load</td>\n <td>8.11</td>\n <td>0.780</td>\n </tr>\n <tr>\n <td>V07</td>\n <td>V6</td>\n <td>Live Load</td>\n <td>8.54</td>\n <td>0.815</td>\n </tr>\n <tr>\n <td>V08</td>\n <td>V7</td>\n <td>Live Load</td>\n <td>6.77</td>\n <td>0.700</td>\n </tr>\n <tr>\n <td>V09</td>\n <td>V8</td>\n <td>Live Load</td>\n <td>8.59</td>\n <td>0.888</td>\n </tr>\n <tr>\n <td>L01</td>\n <td>L1</td>\n <td>Live Load</td>\n <td>13.33</td>\n <td>3.089</td>\n </tr>\n <tr>\n <td>L02</td>\n <td>L2</td>\n <td>Live Load</td>\n <td>9.69</td>\n <td>2.247</td>\n </tr>\n <tr>\n <td>L03</td>\n <td>L3</td>\n <td></td>\n <td>2.96</td>\n <td>1.480</td>\n </tr>\n <tr>\n <td>L04</td>\n <td>L4</td>\n <td></td>\n <td>3.40</td>\n <td>1.700</td>\n </tr>\n <tr>\n <td>L05</td>\n <td>L5</td>\n <td></td>\n <td>2.45</td>\n <td>1.224</td>\n </tr>\n <tr>\n <td>L06</td>\n <td>L6</td>\n <td></td>\n <td>2.01</td>\n <td>1.006</td>\n </tr>\n <tr>\n <td>L07</td>\n <td>L7</td>\n <td></td>\n <td>2.38</td>\n <td>1.192</td>\n </tr>\n <tr>\n <td>L08</td>\n <td>L8</td>\n <td></td>\n <td>2.10</td>\n <td>1.050</td>\n </tr>\n <tr>\n <td>T01</td>\n <td>T1</td>\n <td>Live Load</td>\n <td>25.29</td>\n <td>3.073</td>\n </tr>\n <tr>\n <td>T02</td>\n <td>T2</td>\n <td>Live Load</td>\n <td>27.39</td>\n <td>3.327</td>\n </tr>\n <tr>\n <td>T03</td>\n <td>T3</td>\n <td>Live Load</td>\n <td>8.03</td>\n <td>2.543</td>\n </tr>\n <tr>\n <td>T04</td>\n <td>T4</td>\n <td>Live Load</td>\n <td>11.19</td>\n <td>3.542</td>\n </tr>\n <tr>\n <td>T05</td>\n <td>T5</td>\n <td>Live Load</td>\n <td>11.34</td>\n <td>3.592</td>\n </tr>\n <tr>\n <td>T06</td>\n <td>T6</td>\n <td>Live Load</td>\n <td>16.47</td>\n <td>5.217</td>\n </tr>\n <tr>\n <td>T07</td>\n <td>T7</td>\n <td>Live Load</td>\n <td>11.05</td>\n <td>3.498</td>\n </tr>\n <tr>\n <td>T08</td>\n <td>T8</td>\n <td>Live Load</td>\n <td>8.66</td>\n <td>2.743</td>\n </tr>\n <tr>\n <td>T09</td>\n <td>WT1</td>\n <td>Live Load</td>\n <td>36.56</td>\n <td>2.365</td>\n </tr>\n <tr>\n <td>T10</td>\n <td>WT2</td>\n <td>Live Load</td>\n <td>24.55</td>\n <td>2.853</td>\n </tr>\n <tr>\n <td>T11</td>\n <td>WT3</td>\n <td>Live Load</td>\n <td>38.06</td>\n <td>4.784</td>\n </tr>\n <tr>\n <td>T12</td>\n <td>WT4</td>\n <td>Live Load</td>\n <td>37.70</td>\n <td>5.030</td>\n </tr>\n <tr>\n <td>T13</td>\n <td>WT5</td>\n <td>Live Load</td>\n <td>30.48</td>\n <td>4.524</td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </```"
}]
}
}]
},
"usage": {
"total_tokens": 5536,
"output_tokens": 1981,
"input_tokens": 3555,
"image_tokens": 3470
},
"request_id": "e7bd9732-959d-9a75-8a60-27f7ed2dba06"
}
Penguraian dokumen
Mengurai dokumen hasil pindaian atau dokumen PDF yang disimpan sebagai gambar. Model ini dapat mengenali elemen seperti judul, ringkasan, dan label dalam file serta mengembalikan hasil pengenalan sebagai teks dalam format LaTeX.
| Nilai task | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
|
|
|
Panggil model menggunakan SDK DashScope atau HTTP:
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to 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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# Set the built-in task to document parsing.
ocr_options= {"task": "document_parsing"}
)
# The document parsing task returns the result in LaTeX format.
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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
// Configure the built-in OCR task.
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 keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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"
}
}
}
'
Contoh respons
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"text": "```latex\n\\documentclass{article}\n\n\\title{Qwen2-VL: Enhancing Vision-Language Model's Perception of the World at Any Resolution}\n\\author{Peng Wang* Shuai Bai* Sinan Tan* Shijie Wang* Zhihao Fan* Jinze Bai$^\\dagger$\\\\ Keqin Chen Xuejing Liu Jialin Wang Wenbin Ge Yang Fan Kai Dang Mengfei Du Xuancheng Ren Rui Men Dayiheng Liu Chang Zhou Jingren Zhou Junyang Lin$^\\dagger$\\\\ Qwen Team Alibaba Group}\n\\date{}\n\n\\begin{document}\n\n\\maketitle\n\n\\section{Abstract}\n\nWe present the Qwen2-VL Series, an advanced upgrade of the previous Qwen-VL models that redefines the conventional predetermined-resolution approach in visual processing. Qwen2-VL introduces the Naive Dynamic Resolution mechanism, which enables the model to dynamically process images of varying resolutions into different numbers of visual tokens. This approach allows the model to generate more efficient and accurate visual representations, closely aligning with human perceptual processes. The model also integrates Multimodal Rotary Position Embedding (M-RoPE), facilitating the effective fusion of positional information across text, images, and videos. We employ a unified paradigm for processing both images and videos, enhancing the model's visual perception capabilities. To explore the potential of large multimodal models, Qwen2-VL investigates the scaling laws for large vision-language models (LVLMs). By scaling both the model size-with versions at 2B, 8B, and 72B parameters-and the amount of training data, the Qwen2-VL Series achieves highly competitive performance. Notably, the Qwen2-VL-72B model achieves results comparable to leading models such as GPT-4o and Claude3.5-Sonnet across various multimodal benchmarks, outperforming other generalist models. Code is available at https://github.com/QwenLM/Qwen2-VL.\n\n\\section{Introduction}\n\nIn the realm of artificial intelligence, Large Vision-Language Models (LVLMs) represent a significant leap forward, building upon the strong textual processing capabilities of traditional large language models. These advanced models now encompass the ability to interpret and analyze a broader spectrum of data, including images, audio, and video. This expansion of capabilities has transformed LVLMs into indispensable tools for tackling a variety of real-world challenges. Recognized for their unique capacity to condense extensive and intricate knowledge into functional representations, LVLMs are paving the way for more comprehensive cognitive systems. By integrating diverse data forms, LVLMs aim to more closely mimic the nuanced ways in which humans perceive and interact with their environment. This allows these models to provide a more accurate representation of how we engage with and perceive our environment.\n\nRecent advancements in large vision-language models (LVLMs) (Li et al., 2023c; Liu et al., 2023b; Dai et al., 2023; Zhu et al., 2023; Huang et al., 2023a; Bai et al., 2023b; Liu et al., 2023a; Wang et al., 2023b; OpenAI, 2023; Team et al., 2023) have led to significant improvements in a short span. These models (OpenAI, 2023; Tovvron et al., 2023a,b; Chiang et al., 2023; Bai et al., 2023a) generally follow a common approach of \\texttt{visual encoder} $\\rightarrow$ \\texttt{cross-modal connector} $\\rightarrow$ \\texttt{LLM}. This setup, combined with next-token prediction as the primary training method and the availability of high-quality datasets (Liu et al., 2023a; Zhang et al., 2023; Chen et al., 2023b;\n\n```"
}
]
}
}
]
},
"usage": {
"total_tokens": 4261,
"output_tokens": 845,
"input_tokens": 3416,
"image_tokens": 3350
},
"request_id": "7498b999-939e-9cf6-9dd3-9a7d2c6355e4"
}
Pengenalan rumus
Mengurai rumus dalam gambar dan mengembalikan hasil pengenalan sebagai teks dalam format LaTeX.
| Nilai task | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
|
|
|
Panggil model menggunakan SDK DashScope atau HTTP:
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to 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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False
}]
}]
response = dashscope.MultiModalConversation.call(
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# Set the built-in task to formula recognition.
ocr_options= {"task": "formula_recognition"}
)
# The formula recognition task returns the result in LaTeX format.
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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
// Configure the built-in OCR task.
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 keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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"
}
}
}
'
Contoh respons
{
"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"
}
Pengenalan teks umum
Mengenali teks dalam gambar berbahasa Cina dan Inggris serta mengembalikan hasil dalam format teks biasa.
Nilai task | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
|
|
|
Panggil model menggunakan SDK DashScope atau HTTP:
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to 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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# Set the built-in task to general text recognition.
ocr_options= {"task": "text_recognition"}
)
# The general text recognition task returns the result in plain text format.
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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
// Configure the built-in task.
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 keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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"
}
}
}'
Contoh respons
{
"output": {
"choices": [{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [{
"text": "Audience\nIf you are a system administrator for a Linux environment, you will benefit greatly from learning to write shell scripts. This book does not detail the steps to install the Linux system. However, if you have a running Linux system, you can start automating daily system administration tasks. That is where shell scripting helps, and that is what this book is about. This book shows how to use shell scripts to automate system administration tasks. These tasks include monitoring system statistics and data files, and generating reports for your manager.\nIf you are a home Linux enthusiast, you can also benefit from this book. Today, it is easy to get lost in complex graphical environments. Most desktop Linux distributions hide the system's internal details from the average user. But sometimes you need to know what is happening under the hood. This book shows you how to open the Linux command line and what to do next. For simple tasks, such as file management, the command line is often much easier to use than a fancy graphical interface. The command line has many available commands, and this book shows you how to use them."
}]
}
}]
},
"usage": {
"total_tokens": 1546,
"output_tokens": 213,
"input_tokens": 1333,
"image_tokens": 1298
},
"request_id": "0b5fd962-e95a-9379-b979-38cfcf9a0b7e"
}
Pengenalan multibahasa
Mengenali teks dalam bahasa selain Cina atau Inggris. Bahasa yang didukung: Arab, Prancis, Jerman, Italia, Jepang, Korea, Portugis, Rusia, Spanyol, dan Vietnam. Mengembalikan hasil dalam format teks biasa.
Nilai Tugas | Prompt yang ditentukan | Format output dan contoh |
|---|---|---|
|
|
|
Panggil model menggunakan SDK DashScope atau HTTP:
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# If you use a model in the China (Beijing) region, change the base_url to 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",
# The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
"max_pixels": 32 * 32 * 8192,
# Specifies whether to enable automatic image rotation.
"enable_rotate": False}]
}]
response = dashscope.MultiModalConversation.call(
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen-vl-ocr-2025-11-20',
messages=messages,
# Set the built-in task to multilingual recognition.
ocr_options={"task": "multi_lan"}
)
# The multilingual recognition task returns the result as plain text.
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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
// If you use a model in the China (Beijing) region, change the base_url to 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");
// The maximum pixel threshold for the input image. If the image is larger than this value, it is scaled down until the total pixels are less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image is smaller than this value, it is scaled up until the total pixels are greater than min_pixels.
map.put("min_pixels", 3072);
// Specifies whether to enable automatic image rotation.
map.put("enable_rotate", false);
// Configure the built-in OCR task.
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 keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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);
}
}
# ======= Important =======
# API keys vary by region. To get an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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"
}
}
}
'
Contoh respons
{
"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"
}
Penguraian dokumen PDF
qwen3.5-ocr mendukung penerusan file PDF secara langsung melalui API Response untuk penguraian dokumen, tanpa perlu membagi PDF menjadi gambar secara manual. Panjang output tidak dibatasi oleh panjang output maksimum model, sehingga memungkinkan penguraian lengkap dokumen panjang. Hanya API Response yang didukung; API Chat tidak didukung. Batasan file PDF: tidak lebih dari 100 MB. Batas jumlah halaman bergantung pada task di ocr_options: hingga 50 halaman jika task disetel ke document_parsing, dan hingga 10 halaman jika task tidak disetel atau disetel ke tugas lain.
Contoh berikut menggunakan API Response untuk meneruskan file PDF guna penguraian dokumen.
import os
from openai import OpenAI
client = OpenAI(
# If you have not configured an environment variable, replace the following line with your API key: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
# The URL below is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
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"}
}
)
# Get the built-in task result
print(response.output[0].content[0].ocr_result)
import OpenAI from 'openai';
const client = new OpenAI({
// If you have not configured an environment variable, replace the following line with your API key: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// The URL below is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
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" }
});
// Get the built-in task result
console.log(response.output[0].content[0].ocr_result);
}
main();
import java.util.Collections;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.JsonValue;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseInputFile;
import com.openai.models.responses.ResponseInputItem;
public class Main {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
// If you have not configured an environment variable, replace the following line with your API key: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// The URL below is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
.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);
// Get the built-in task result
Object ocrResult = response.output().get(0).message().get().content().get(0)
.outputText().get()._additionalProperties().get("ocr_result");
System.out.println(ocrResult);
}
}
# The URL below is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
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"
}
]
}
]
}'
Untuk model versi lama (
qwen-vl-ocr-2025-11-20dan sebelumnya) yang tidak mendukung API Response, gunakan pustaka pemrosesan gambar sepertiPython'spdf2imageuntuk mengonversi setiap halaman PDF menjadi gambar, lalu gunakan metode input multi-gambar untuk pengenalan per halaman.
Untuk penggunaan API Responses kompatibel OpenAI lainnya (seperti mengambil dan mengelola respons model yang telah selesai), lihat OpenAI compatible - Responses.
Meneruskan file lokal (encoding Base64 atau jalur file)
Unggah file lokal menggunakan encoding Base64 atau jalur file langsung. Pilih metode berdasarkan ukuran file dan jenis SDK — lihat Cara memilih metode unggah file. Kedua metode harus memenuhi persyaratan file dalam Batasan gambar.
Gunakan encoding Base64
Konversi file menjadi string terenkripsi Base64, lalu teruskan ke model. Metode ini cocok untuk SDK OpenAI dan DashScope, serta permintaan HTTP.
Langkah-langkah untuk meneruskan string terenkripsi Base64
-
Enkode file: Konversi gambar lokal menjadi string terenkripsi Base64.
Contoh Kode untuk Mengonversi Gambar ke String Berenkode Base64
# Encoding function: Converts a local file to a Base64-encoded string. def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8") # Replace xxx/eagle.png with the absolute path of your local image. base64_image = encode_image("xxx/eagle.png") -
Buat Data URL dalam format berikut:
data:[MIME_type];base64,{base64_image}.- Ganti
MIME_typedengan jenis media aktual. Pastikan jenis tersebut sesuai dengan nilaiMIME Typedalam tabel Batasan gambar, sepertiimage/jpegatauimage/png. base64_imageadalah string terenkripsi Base64 yang dihasilkan pada langkah sebelumnya.
- Ganti
-
Panggil model: Teruskan
Data URLmenggunakan parameterimageatauimage_urluntuk memanggil model.
Gunakan jalur file
Teruskan jalur file lokal langsung ke model. Metode ini hanya didukung oleh SDK Python dan Java DashScope. Tidak didukung untuk metode HTTP DashScope atau kompatibel OpenAI.
Tabel berikut menunjukkan format jalur file berdasarkan bahasa pemrograman dan sistem operasi.
Tentukan jalur file (contoh gambar)
Sistem | SDK | Jalur file input | Contoh |
|---|---|---|---|
Linux atau macOS | Python SDK | file://{absolute_path_of_the_file} | file:///home/images/test.png |
Java SDK | |||
Sistem operasi Windows | Python SDK | file://{absolute_path_of_the_file} | file://D:/images/test.png |
Java SDK | file:///{absolute_path_of_the_file} | file:///D:/images/test.png |
Meneruskan jalur file
Penerusan jalur file hanya didukung untuk panggilan yang dilakukan dengan SDK Python dan Java DashScope. Metode ini tidak didukung untuk metode HTTP DashScope atau kompatibel OpenAI.
import os
import dashscope
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# Replace xxx/test.jpg with the absolute path of your local image.
local_path = "xxx/test.jpg"
image_path = f"file://{local_path}"
messages = [
{
"role": "user",
"content": [
{
"image": image_path,
# The minimum pixel threshold for the input image. If the image has fewer pixels than this value, the image is scaled up until the total number of pixels is greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image has more pixels than this value, the image is scaled down until the total number of pixels is less than max_pixels.
"max_pixels": 32 * 32 * 8192,
},
# If no built-in task is set for the model, you can pass a prompt in the text field. If you do not pass a prompt, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
{
"text": "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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 keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen-vl-ocr-2025-11-20",
messages=messages,
)
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
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);
// The maximum pixel threshold for the input image. If the image has more pixels than this value, the image is scaled down until the total number of pixels is less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image has fewer pixels than this value, the image is scaled up until the total number of pixels is greater than min_pixels.
map.put("min_pixels", 3072);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
// If no built-in task is set for the model, you can pass a prompt in the text field. If you do not pass a prompt, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
Collections.singletonMap("text", "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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 keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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 {
// Replace xxx/test.jpg with the absolute path of your local image.
simpleMultiModalConversationCall("xxx/test.jpg");
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Melewatkan string yang dienkode Base64
OpenAI compatible
Python
from openai import OpenAI
import os
import base64
# Read a local file and encode it in Base64 format.
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# Replace xxx/test.png with the absolute path of your local image.
base64_image = encode_image("xxx/test.png")
client = OpenAI(
# API keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
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",
# Note: When you pass a Base64-encoded string, the image format (image/{format}) must match the Content-Type in the list of supported images. "f" is a string formatting method.
# PNG image: f"data:image/png;base64,{base64_image}"
# JPEG image: f"data:image/jpeg;base64,{base64_image}"
# WEBP image: f"data:image/webp;base64,{base64_image}"
"image_url": {"url": f"data:image/png;base64,{base64_image}"},
# The minimum pixel threshold for the input image. If the image has fewer pixels than this value, the image is scaled up until the total number of pixels is greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image has more pixels than this value, the image is scaled down until the total number of pixels is less than max_pixels.
"max_pixels": 32 * 32 * 8192
},
# The model supports passing a prompt in the following text field. If you do not pass a prompt, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
{"type": "text", "text": "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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({
// Kunci API bervariasi menurut Wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// Ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi menurut Wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
// Baca file lokal dan enkode dalam format Base64.
const encodeImage = (imagePath) => {
const imageFile = readFileSync(imagePath);
return imageFile.toString('base64');
};
// Ganti xxx/test.png dengan jalur mutlak gambar lokal Anda.
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": {
// Catatan: Saat Anda meneruskan string yang dienkode Base64, format gambar (image/{format}) harus cocok dengan Content-Type dalam daftar gambar yang didukung.
// Gambar PNG: data:image/png;base64,${base64Image}
// Gambar JPEG: data:image/jpeg;base64,${base64Image}
// Gambar WEBP: data:image/webp;base64,${base64Image}
"url": `data:image/jpeg;base64,${base64Image}`
},
// Ambang batas piksel minimum untuk gambar input. Jika gambar memiliki lebih sedikit piksel dari nilai ini, skala gambar akan ditingkatkan hingga jumlah total piksel lebih besar dari min_pixels.
"min_pixels": 32 * 32 * 3,
// Ambang batas piksel maksimum untuk gambar input. Jika gambar memiliki lebih banyak piksel dari nilai ini, skala gambar akan diturunkan hingga jumlah total piksel lebih kecil dari max_pixels.
"max_pixels": 32 * 32 * 8192
},
// Model ini mendukung penerusan prompt di bidang teks berikut. Jika Anda tidak meneruskan prompt, prompt default akan digunakan: Harap keluarkan hanya konten teks dari gambar tanpa deskripsi atau pemformatan tambahan.
{
"type": "text",
"text": "Ekstrak nomor faktur, nomor kereta, stasiun keberangkatan, stasiun tujuan, tanggal dan waktu keberangkatan, nomor kursi, jenis kursi, harga tiket, nomor KTP, dan nama penumpang dari gambar tiket kereta. Ekstrak informasi utama secara akurat. Jangan menghilangkan atau merekayasa informasi. Ganti setiap karakter tunggal yang buram atau terhalang oleh silau dengan tanda tanya (?). Kembalikan data dalam format 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
- Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.
- Untuk keperluan demonstrasi, string terenkripsi Base64
"data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode ini dipotong. Dalam praktiknya, Anda harus meneruskan string terenkripsi lengkap.
# ======= Important =======
# API keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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": "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# Base64 encoding format.
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# Replace xxx/test.jpg with the absolute path of your local image.
base64_image = encode_image("xxx/test.jpg")
messages = [
{
"role": "user",
"content": [
{
# Note: When you pass a Base64-encoded string, the image format (image/{format}) must match the Content-Type in the list of supported images. "f" is a string formatting method.
# PNG image: f"data:image/png;base64,{base64_image}"
# JPEG image: f"data:image/jpeg;base64,{base64_image}"
# WEBP image: f"data:image/webp;base64,{base64_image}"
"image": f"data:image/jpeg;base64,{base64_image}",
# The minimum pixel threshold for the input image. If the image has fewer pixels than this value, the image is scaled up until the total number of pixels is greater than min_pixels.
"min_pixels": 32 * 32 * 3,
# The maximum pixel threshold for the input image. If the image has more pixels than this value, the image is scaled down until the total number of pixels is less than max_pixels.
"max_pixels": 32 * 32 * 8192,
},
# If no built-in task is set for the model, you can pass a prompt in the text field. If you do not pass a prompt, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
{
"text": "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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 keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
# If you have not configured an environment variable, replace the following line with your Model Studio API key: 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 {
// Replace {WorkspaceId} with your workspace ID. URLs vary by region.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Base64 encoding format.
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 encoding.
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "data:image/jpeg;base64," + base64Image);
// The maximum pixel threshold for the input image. If the image has more pixels than this value, the image is scaled down until the total number of pixels is less than max_pixels.
map.put("max_pixels", 8388608);
// The minimum pixel threshold for the input image. If the image has fewer pixels than this value, the image is scaled up until the total number of pixels is greater than min_pixels.
map.put("min_pixels", 3072);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
// If no built-in task is set for the model, you can pass a prompt in the text field. If you do not pass a prompt, the default prompt is used: Please output only the text content from the image without any additional descriptions or formatting.
Collections.singletonMap("text", "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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 keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
// If you have not configured an environment variable, replace the following line with your Model Studio API key: .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 {
// Replace xxx/test.jpg with the absolute path of your local image.
simpleMultiModalConversationCall("xxx/test.jpg");
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
- Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.
- Untuk keperluan demonstrasi, string terenkripsi Base64
"data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode ini dipotong. Dalam praktiknya, Anda harus meneruskan string terenkripsi lengkap.
# ======= Important =======
# API keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key.
# Replace {WorkspaceId} with your workspace ID. URLs vary by region.
# === Delete this comment before running ===
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": "Extract the invoice number, train number, departure station, destination station, departure date and time, seat number, seat type, ticket price, ID card number, and passenger name from the train ticket image. Extract the key information accurately. Do not omit or fabricate information. Replace any single character that is blurry or obscured by glare with a question mark (?). Return the data in JSON format: {'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'}"}
]
}
]
}
}'
Penggunaan lainnya
Batasan
Batasan gambar
-
Dimensi dan rasio aspek: Lebar dan tinggi gambar harus keduanya lebih besar dari 10 piksel. Rasio aspek tidak boleh melebihi 200:1 atau 1:200.
-
Total piksel: Model secara otomatis menskalakan gambar, sehingga tidak ada batasan ketat pada jumlah total piksel. Namun, gambar tidak boleh melebihi 15,68 juta piksel.
-
Format gambar yang didukung
-
Untuk gambar dengan resolusi di bawah 4K
(3840x2160), format berikut didukung:Format gambar
Ekstensi umum
Jenis 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
-
Untuk gambar dengan resolusi dari
4K(3840x2160)hingga8K(7680x4320), hanya format JPEG, JPG, dan PNG yang didukung.
-
-
Ukuran gambar:
- Jika Anda menyediakan gambar menggunakan URL publik atau jalur lokal:
qwen3.5-ocrmendukung gambar hingga20 MB; versi lain mendukung hingga10 MB. - Jika Anda menyediakan data dalam encoding Base64, string terenkripsi tidak boleh melebihi
10 MB.
Lihat juga: Bagaimana cara memampatkan gambar atau video ke ukuran yang diperlukan?.
- Jika Anda menyediakan gambar menggunakan URL publik atau jalur lokal:
Batasan model
-
Pesan sistem: Qwen-OCR menggunakan
System Messageinternal tetap dan tidak menerima pesan kustom. Teruskan semua instruksi dalamUser Message. -
Percakapan multi-putaran: Mulai dari
qwen3.5-ocr, percakapan multi-putaran didukung—Anda dapat mengirim pesan teks lanjutan tanpa URL gambar. Versiqwen-vl-ocr-2025-11-20dan sebelumnya hanya memproses pesan terbaru dan tidak menyimpan konteks. -
Risiko halusinasi: Model mungkin mengalami halusinasi jika teks dalam gambar terlalu kecil atau memiliki resolusi rendah. Selain itu, akurasi jawaban untuk pertanyaan yang tidak terkait ekstraksi teks tidak dijamin.
-
Kesalahan Pemrosesan File Teks:
- Untuk file yang berisi data gambar, ikuti rekomendasi dalam Going live untuk mengubahnya menjadi urutan gambar sebelum diproses.
- Untuk file dengan teks biasa atau data terstruktur, gunakan Qwen-Long, model yang dapat mengurai teks panjang.
Jenis sertifikat dan dokumen yang didukung
Tugas ekstraksi informasi mendukung ekstraksi data terstruktur dari sertifikat, struk, dan izin berikut.
- Paspor dan dokumen perjalanan: Paspor Tiongkok, paspor Makau, Izin Perjalanan Daratan untuk Penduduk Hong Kong dan Makau, Izin Perjalanan Daratan untuk Penduduk Taiwan, dan Izin Pulang untuk Penduduk Hong Kong dan Makau.
- Dokumen kendaraan dan faktur penjualan: SIM, plat nama kendaraan, sertifikat kesesuaian kendaraan, sertifikat registrasi kendaraan, faktur penjualan kendaraan bermotor, dan faktur penjualan kendaraan bekas.
- Faktur dan struk pajak: Faktur PPN biasa (gulung), faktur khusus nominal tetap, faktur cetak mesin umum, sertifikat pembayaran pajak, dan struk pendapatan non-pajak pusat.
- Struk transportasi: Tiket kereta cepat 12306, tiket kereta, tiket kapal, struk tol jalan raya, dan faktur cetak mesin tol jalan raya.
- Kartu keuangan dan struk: Kartu kredit, wesel bank elektronik, struk pembayaran, dan kartu jaminan sosial.
- Lisensi dan izin usaha: Lisensi usaha, lisensi usaha makanan, lisensi produksi makanan, lisensi usaha farmasi, dan lisensi usaha alat kesehatan.
- Sertifikat properti: Sertifikat kepemilikan properti.
- KTP internasional: KTP Hong Kong, KTP Makau, KTP Indonesia, KTP Thailand, KTP Vietnam, KTP Malaysia, KTP Filipina, KTP India, KTP Turki, KTP Pakistan, KTP Meksiko, KTP Inggris, dan KTP AS.
- Paspor dan SIM internasional: Paspor India, paspor Singapura, paspor Thailand, paspor AS, paspor Australia, paspor UEA, SIM Filipina, SIM Jepang, dan SIM AS.
Penagihan dan pembatasan laju
-
Penagihan: Qwen-OCR adalah model multimodal. Total biaya dihitung sebagai berikut: (Jumlah token input × Harga satuan input) + (Jumlah token output × Harga satuan output). Lihat tagihan atau isi ulang akun Anda di konsol Biaya dan Pengeluaran.
-
Menghitung token gambar: Gunakan kode berikut untuk memperkirakan penggunaan token gambar. Penagihan aktual berdasarkan respons API.
Kode contoh untuk memperkirakan token gambar
Rumus: Token gambar =
(h_bar * w_bar) / token_pixels + 2.-
h_bar * w_barmerepresentasikan dimensi gambar yang diskalakan. Model melakukan pra-pemrosesan gambar dengan menskalakannya ke batas piksel tertentu. Batas ini bergantung pada nilai parametermax_pixels. -
token_pixelsmerepresentasikan nilai piksel perToken.- Untuk
qwen3.5-ocr,qwen-vl-ocr,qwen-vl-ocr-2025-11-20, danqwen-vl-ocr-latest, nilai ini tetap pada32*32(yaitu1024). - Untuk model lain, nilai ini tetap pada
28*28(yaitu784).
- Untuk
Kode ini menunjukkan logika penskalaan gambar perkiraan yang digunakan model. Gunakan untuk memperkirakan jumlah token untuk gambar. Penagihan aktual berdasarkan respons API.
import math from PIL import Image def smart_resize(image_path, min_pixels, max_pixels): """ Pre-process an image. Parameters: image_path: The path to the image. """ # Open the specified PNG image file. image = Image.open(image_path) # Get the original dimensions of the image. height = image.height width = image.width # Adjust the height to be a multiple of 28 or 32. h_bar = round(height / 32) * 32 # Adjust the width to be a multiple of 28 or 32. w_bar = round(width / 32) * 32 # Scale the image to adjust the total number of pixels to be within the range [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 # Replace xxx/test.png with the path to your local image. h_bar, w_bar = smart_resize("xxx/test.png", min_pixels=32 * 32 * 3, max_pixels=8192 * 32 * 32) print(f"The scaled image dimensions are: height {h_bar}, width {w_bar}") # Calculate the number of image tokens: total pixels divided by 32 * 32. token = int((h_bar * w_bar) / (32 * 32)) # <|vision_bos|> and <|vision_eos|> are visual markers. Each is counted as 1 token. print(f"Total number of image tokens: {token + 2}") -
-
-
Pembatasan laju: Untuk batas laju Qwen-OCR, lihat Pembatasan laju.
-
Kuota gratis (hanya Singapura): Qwen-OCR menyediakan kuota gratis 1 juta token. Kuota ini berlaku selama 90 hari, mulai dari tanggal Anda mengaktifkan Model Studio atau permintaan Anda untuk menggunakan model disetujui.
Going live
-
Pra-pemrosesan gambar:
-
Pastikan gambar input jelas, pencahayaan merata, dan tidak terlalu terkompresi:
- Simpan dan transmisikan gambar dalam format lossless (misalnya PNG) untuk menghindari kehilangan informasi.
- Untuk meningkatkan definisi gambar, gunakan algoritma penghilangan derau, seperti filter mean atau median, untuk menghaluskan gambar berisik.
- Untuk mengoreksi pencahayaan tidak merata, gunakan algoritma seperti equalisasi histogram adaptif untuk menyesuaikan kecerahan dan kontras.
-
Gambar miring: Atur
enable_rotate: truedalam SDK DashScope untuk mengoreksi rotasi sebelum pengenalan. -
Gambar sangat kecil atau sangat besar: Gunakan
min_pixelsdanmax_pixelsuntuk mengatur penskalaan gambar.min_pixels: Memperbesar gambar kecil guna meningkatkan detail. Pertahankan nilai default.max_pixels: Mencegah gambar berukuran terlalu besar mengonsumsi terlalu banyak token. Nilai default mencakup sebagian besar kasus. Tingkatkan nilai ini jika teks kecil terlewat—hal ini akan meningkatkan penggunaan token.
-
Pastikan gambar input jelas, pencahayaan merata, dan tidak terlalu terkompresi:
-
Validasi hasil: Hasil pengenalan model mungkin mengandung kesalahan. Untuk operasi bisnis kritis, terapkan proses tinjauan manual atau tambahkan aturan validasi untuk memverifikasi akurasi output model. Misalnya, gunakan validasi format untuk nomor KTP dan kartu bank.
-
Pemrosesan batch: Untuk beban kerja volume tinggi non-real-time, gunakan API Batch untuk memproses pekerjaan secara asinkron dengan biaya lebih rendah.
FAQ
Bagaimana memilih metode unggah file?
Pilih metode unggah terbaik berdasarkan jenis SDK, ukuran file, dan stabilitas jaringan.
Jenis | Spesifikasi | SDK DashScope (Python, Java) | OpenAI compatible / DashScope HTTP |
|---|---|---|---|
Gambar | Lebih dari 7 MB dan kurang dari 10 MB | Teruskan jalur lokal | Hanya URL publik yang didukung. Gunakan Layanan Penyimpanan Objek. |
Kurang dari 7 MB | Teruskan jalur lokal | Encoding Base64 |
Encoding Base64 meningkatkan ukuran data. Ukuran file asli harus kurang dari 7 MB.
Menggunakan jalur lokal atau encoding Base64 membantu mencegah timeout unduhan di sisi server dan meningkatkan stabilitas.
Bagaimana cara menggambar bingkai deteksi pada gambar asli setelah model mengeluarkan hasil pelokalisasian teks?
Setelah model Qwen-OCR mengembalikan hasil pelokalisasian teks, gunakan kode dalam file draw_bbox.py untuk menggambar bingkai deteksi dan labelnya pada gambar asli.
Respons kosong atau berisi tag gaya antarmuka depan setelah saya meneruskan Prompt kustom. Apa yang harus saya lakukan?
Saat Anda menggunakan qwen3.5-ocr, jika Prompt kustom Anda berisi struktur HTML lengkap, seperti <html><body>...</body></html>, model mungkin mengikuti struktur tersebut dan mengembalikan hasil OCR dalam format HTML alih-alih teks biasa. Respons kemudian tampak kosong atau tampak berisi tag gaya antarmuka depan. Tag sederhana, seperti <br> saja, tidak memicu perilaku ini.
Untuk mengatasi masalah ini, gunakan salah satu metode berikut:
- Periksa apakah Prompt Anda berisi struktur tag HTML lengkap. Jika iya, ganti dengan instruksi teks biasa dan coba lagi. Misalnya, ubah
<html><body>Extract all text from the image</body></html>menjadiExtract all text from the image. - Jika Anda tidak yakin apakah Prompt Anda memengaruhi format output, abaikan bidang
textuntuk menggunakan Prompt default model. - Gunakan model
qwen3.7-plussebagai gantinya. Model ini mengembalikan hasil teks biasa bahkan ketika Anda meneruskan Prompt yang sama yang berisi struktur HTML.
Referensi API
Untuk parameter input dan output Qwen-OCR, lihat Referensi API Qwen-OCR.
Kode kesalahan
Jika pemanggilan model gagal dan mengembalikan pesan kesalahan, lihat Kode kesalahan untuk penyelesaian.



