Skip to main content

テキスト抽出 (Qwen-OCR)

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

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

例

入力画像認識結果
複数言語の認識imageINTERNATIONALMOTHER LANGUAGEDAY!你好!Bonjour!Merhaba!Ciao!Hello!Ola!Salam!
傾いた画像の認識imageProduct IntroductionImported fiber filaments from South Korea.6941990612023Item No.: 2023
テキスト位置の特定img_1
高精度認識タスクはテキストのローカライズをサポートします。
ローカライズの可視化img_1_location
各テキスト行のバウンディングボックスを元の画像に描画する方法については、「よくある質問」をご参照ください。

モデルの選択

Qwen-OCR は以下のモデルを提供しています。ビジネス要件に基づいて選択してください:
  • Qwen3.5-OCR: Qwen3.5 アーキテクチャをベースに構築され、ドキュメント解析、テキストのローカライズ、キー情報抽出の各機能が全面的にアップグレードされています。マルチターン対話と PDF ドキュメント解析をサポートしています。ビジネス証明書 (ID カードや運転免許証など) からの情報抽出が大幅に改善されました。詳細については、「サポートされている証明書とドキュメントのタイプ」をご参照ください。qwen3.5-ocr モデルが含まれています。
  • Qwen-VL-OCR: Qwen3-VL アーキテクチャに基づいて構築されています。ドキュメント解析、テキストのローカライズ (高精度な認識)、情報抽出、表解析、数式認識、一般的なテキスト認識、多言語認識などの組み込みタスクをサポートしています。また、イメージの回転補正もサポートしています。モデルには、qwen-vl-ocr (安定版) (最新版)、qwen-vl-ocr-2025-11-20、および qwen-vl-ocr-2025-11-20 が含まれます。
  • 初期バージョン (非推奨): これらのバージョンは、特徴とパフォーマンスの両方で新しいモデルに劣ります。qwen3.5-ocr への移行を推奨します。これには qwen-vl-ocr-2024-10-28 モデルが含まれます。
qwen-vl-ocr, モデルでは、max_tokens` パラメーター (最大出力長) のデフォルト値は 4096 です。この値を 4097 から 8192 の範囲に増やすには、営業担当者にご連絡いただき、次の情報をご提供ください: お客様の Alibaba Cloud アカウント ID、画像タイプ (ドキュメント画像、eコマース画像、契約書など)、モデル名、推定 QPS (1 秒あたりのクエリ数) と 1 日あたりの合計リクエスト数、およびモデルの出力長が 4096 トークンを超えるリクエストの割合。
オンライン体験:Model Studio コンソールにアクセスし、右上のコーナーで対象のリージョンを選択し、Vision Models に移動して Qwen-OCR モデルをお試しください。

事前準備

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

はじめに

次の例では、乗車券画像 (URL) から構造化フィールドを抽出し、結果を JSON として返します。ローカルファイルについては、「ローカルファイルの受け渡し方法」をご参照ください。入力制約については、「画像の制限」をご参照ください。
  • OpenAI 互換 - チャット
  • OpenAI 互換 - 応答
  • DashScope
Python
from openai import OpenAI
import os

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

try:
    client = OpenAI(
        # API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # {WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
        base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
    )
    completion = client.chat.completions.create(
        model="qwen-vl-ocr-2025-11-20",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                        # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
                        "min_pixels": 32 * 32 * 3,
                        # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
                        "max_pixels": 32 * 32 * 8192
                    },
                    # モデルはテキストフィールドでプロンプトを渡すことをサポートしています。プロンプトが渡されない場合、デフォルトのプロンプトが使用されます:画像からテキストコンテンツのみを出力し、追加の説明やフォーマットは含めないでください。
                    {"type": "text",
                     "text": PROMPT_TICKET_EXTRACTION}
                ]
            }
        ])
    print(completion.choices[0].message.content)
except Exception as e:
    print(f"Error message: {e}")
{
  "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",
  "id": "chatcmpl-20e5d9ed-e8a3-947d-bebb-c47ef1378598"
}

組み込みタスクの呼び出し

qwen-vl-ocr-2024-10-28 を除くモデルには、一般的な OCR シナリオ向けの組み込みタスクが付属しています。 組み込みタスクの呼び出し方法:
  • DashScope SDK: 組み込みタスクを呼び出すには、ocr_options パラメーターを設定します。qwen3.5-ocr 以降、組み込みタスクはカスタムプロンプトと連携して動作し (上書きされなくなりました)、組み込みタスク結果は ocr_result フィールドで返されます。以前のモデルでは、固定の内部 Prompt を使用します。
  • OpenAI 互換 SDK: メッセージでタスク固有の Prompt を手動で渡します。
各タスクには、task 値、固定の Prompt、出力フォーマット、および出力例があります:
  • 高精度認識
  • 情報抽出
  • 表解析
  • ドキュメント解析
  • 数式認識
  • 一般的なテキスト認識
  • 多言語認識
高精度認識には 以降のモデルバージョン、または最新バージョン (推奨) を使用します。特長:
  • テキストコンテンツを認識して抽出します。
  • テキスト行を特定し、その座標を出力することでテキストの位置を検出します。
返された座標を使用して元の画像にバウンディングボックスを描画するには、「よくある質問」をご参照ください。
task の値指定されたプロンプト出力形式と例
advanced_recognitionすべてのテキスト行を検出し、回転した長方形の座標 ([cx, cy, width, height, angle]) を返します。
  • フォーマット: プレーンテキストまたは ocr_result フィールドから直接取得できる JSON オブジェクト。
  • 例:

{
  "output": {
    "choices": [
      {
        "message": {
          "content": [
            {
              "ocr_result": {
                "words_info": [
                  {
                    "location": [331, 139, 465, 139, 465, 166, 331, 166],
                    "rotate_rect": [398,153,134,27,90],
                    "text": "Magsafe"
                  },
                  {
                    "location": [411, 86, 411, 220, 384, 220, 384, 86],
                    "rotate_rect": [680,250,40,167,90],
                    "text": "金盾系列"
                  },
  • text:各行のテキストコンテンツ。
  • location:
    • 値の例: [x1, y1, x2, y2, x3, y3, x4, y4]
    • テキストボックスの 4 つの頂点の絶対座標です。元のイメージの左上隅が原点 (0,0) です。頂点の順序は、左上 → 右上 → 右下 → 左下の順で固定です。
  • rotate_rect:
    • 値の例:[center_x, center_y, width, height, angle]
    • 意味: テキストボックスの別の表現であり、center_x と center_y はテキストボックスの重心の座標、width は幅、height は高さ、angle は水平方向に対するテキストボックスの回転角を示し、その値は [-90, 90] の範囲内です。
import os
import dashscope

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

messages = [{
            "role": "user",
            "content": [{
                "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                # 入力画像の最小ピクセルしきい値。画像がこの値より小さい場合、総ピクセル数が min_pixels を超えるまで拡大されます。
                "min_pixels": 32 * 32 * 3,
                # 入力画像の最大ピクセルしきい値。画像がこの値より大きい場合、総ピクセル数が max_pixels を下回るまで縮小されます。
                "max_pixels": 32 * 32 * 8192,
                # 画像の自動回転を有効にするかどうかを指定します。
                "enable_rotate": False}]
            }]

response = dashscope.MultiModalConversation.call(
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 組み込みタスクを高精度認識に設定します。
    ocr_options={"task": "advanced_recognition"}
)
# 高精度認識タスクは結果をプレーンテキストとして返します。
print(response["output"]["choices"][0]["message"].content[0]["text"])
{
  "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"
}

PDF ドキュメント解析

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

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

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

# 組み込みタスクの結果を取得します
print(response.output[0].content[0].ocr_result)
レスポンス API をサポートしていない以前のモデル (qwen-vl-ocr-2025-11-20 以前) の場合、Python の pdf2image のような画像処理ライブラリを使用して各 PDF ページをイメージに変換し、次に 複数イメージ入力 メソッドを使用してページごとに認識を行います。
OpenAI Responses API のその他の使用法 (完了したモデル応答の取得と管理など) については、「OpenAI 互換 - 応答」をご参照ください。

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

Base64 エンコーディングまたは直接のファイルパスを使用してローカルファイルをアップロードします。ファイルサイズと SDK タイプに基づいてメソッドを選択してください — 「ファイルアップロード方法の選択方法」をご参照ください。どちらのメソッドも「画像の制限」のファイル要件を満たす必要があります。
  • Base64 エンコーディングの使用
  • ファイルパスの使用
ファイルを Base64 エンコードされた文字列に変換し、モデルに渡します。この方法は、OpenAI および DashScope SDK、および HTTP リクエストに適しています。
  1. ファイルのエンコード:ローカル画像を Base64 エンコードされた文字列に変換します。
    # エンコード関数:ローカルファイルを Base64 エンコードされた文字列に変換します。
    def encode_image(image_path):
        with open(image_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode("utf-8")
    
    # xxx/eagle.png をローカル画像の絶対パスに置き換えてください。
    base64_image = encode_image("xxx/eagle.png")
    
  2. 以下の形式で Data URL を作成します:data:[MIME_type];base64,{base64_image}。
    1. MIME_type を実際のメディアタイプで置き換えます。 タイプが イメージの制限 表にある MIME Type の値 (image/jpeg や image/png など) と一致することを確認してください。
    2. base64_imageは、前のステップで生成された Base64 エンコードされた文字列です。
  3. モデルの呼び出し: Data URL を image または image_url パラメーターを使用して渡し、モデルを呼び出します。
  • ファイルパスの受け渡し
  • Base64 エンコードされた文字列の受け渡し
ファイルパスの受け渡しは、DashScope Python および Java SDK での呼び出しでのみサポートされています。この方法は、DashScope HTTP または OpenAI 互換のメソッドではサポートされていません。
Python
import os
import dashscope

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

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

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

その他の使用法

制限事項

画像の制限

  • ディメンションと縦横比:画像の幅と高さは両方とも 10 ピクセルより大きい必要があります。縦横比は 200:1 または 1:200 を超えてはなりません。
  • 総ピクセル数:モデルは画像を自動的にスケーリングするため、総ピクセル数に厳密な制限はありません。ただし、画像は 1568 万ピクセルを超えることはできません。
  • サポートされている画像形式
    • 解像度が 4K (3840x2160) 未満の画像は、以下のフォーマットに対応しています。

      画像形式

      一般的な拡張子

      MIME タイプ

      BMP

      .bmp

      image/bmp

      JPEG

      .jpe, .jpeg, .jpg

      image/jpeg

      PNG

      .png

      image/png

      TIFF

      .tif, .tiff

      image/tiff

      WEBP

      .webp

      image/webp

      HEIC

      .heic

      image/heic

    • 解像度が 4K(3840x2160) から 8K(7680x4320) までのイメージでは、JPEG、JPG、および PNG フォーマットのみがサポートされています。
  • 画像サイズ:
    • パブリック URL またはローカルパスを使用してイメージを提供する場合、qwen3.5-ocr は最大 20 MB、他のバージョンは最大 10 MB のイメージに対応しています。
    • データを Base64 エンコーディングで提供する場合、エンコードされた文字列は 10 MB を超えることはできません。
    ご参照:画像や動画を必要なサイズに圧縮するにはどうすればよいですか?。

モデルの制限

  • システムメッセージ: Qwen-OCR は、固定の内部 システムメッセージ を使用するため、カスタムのメッセージは受け付けません。すべての命令は ユーザーメッセージ で渡してください。
  • マルチターン対話: qwen3.5-ocr 以降では、マルチターン対話がサポートされており、イメージ URL なしでフォローアップのテキストメッセージを送信できます。qwen-vl-ocr-2025-11-20 以前のバージョンでは、最新のメッセージのみを処理し、コンテキストを保持しません。
  • ハルシネーションのリスク:画像内のテキストが小さすぎるか、解像度が低い場合、モデルがハルシネーションを起こす可能性があります。また、テキスト抽出に関係のない質問への回答の精度は保証されません。
  • テキストファイルの処理エラー:
    • 画像データを含むファイルについては、「本番環境に適用」の推奨事項に従って、処理前に画像シーケンスに変換してください。
    • プレーンテキストまたは構造化データを含むファイルについては、長いテキストを解析できるモデルである Qwen-Long を使用してください。

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

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

課金とレート制限

  • 課金:Qwen-OCR はマルチモーダルモデルです。合計コストは次のように計算されます:(入力トークン数 × 入力単価) + (出力トークン数 × 出力単価)。費用とコストコンソールで請求書を表示したり、アカウントにチャージしたりできます。
    • 画像トークンの計算:次のコードを使用して、画像トークンの使用量を見積もります。実際の課金は API 応答に基づきます。
      計算式: 画像トークン = (h_bar * w_bar) / token_pixels + 2。
      • h_bar * w_bar は、スケーリングされたイメージのディメンションを表します。モデルは、特定のピクセル制限までイメージをスケーリングすることで前処理します。この制限は、max_pixels パラメーターの値に依存します。
      • token_pixels は、Token あたりの画素値を表します。
        • qwen3.5-ocr、qwen-vl-ocr、qwen-vl-ocr-2025-11-20 の場合、この値は 32*32(1024)に固定されています。
        • その他のモデルでは、この値は 28*28 (784) に固定されています。
      このコードは、モデルが使用するおおよその画像スケーリングロジックを示しています。これを使用して、画像のトークン数を見積もります。実際の課金は API 応答に基づきます。
      import math
      from PIL import Image
      
      def smart_resize(image_path, min_pixels, max_pixels):
          """
          画像を前処理します。
      
          パラメーター:
              image_path:画像へのパス。
          """
          # 指定された PNG 画像ファイルを開きます。
          image = Image.open(image_path)
      
          # 画像の元のディメンションを取得します。
          height = image.height
          width = image.width
          # 高さを 28 または 32 の倍数に調整します。
          h_bar = round(height / 32) * 32
          # 幅を 28 または 32 の倍数に調整します。
          w_bar = round(width / 32) * 32
      
          # 総ピクセル数が [min_pixels, max_pixels] の範囲内になるように画像をスケーリングします。
          if h_bar * w_bar > max_pixels:
              beta = math.sqrt((height * width) / max_pixels)
              h_bar = math.floor(height / beta / 32) * 32
              w_bar = math.floor(width / beta / 32) * 32
          elif h_bar * w_bar < min_pixels:
              beta = math.sqrt(min_pixels / (height * width))
              h_bar = math.ceil(height * beta / 32) * 32
              w_bar = math.ceil(width * beta / 32) * 32
          return h_bar, w_bar
      
      # xxx/test.png をローカル画像のパスに置き換えてください。
      h_bar, w_bar = smart_resize("xxx/test.png", min_pixels=32 * 32 * 3, max_pixels=8192 * 32 * 32)
      print(f"スケーリングされた画像のディメンションは:高さ {h_bar}、幅 {w_bar}")
      
      # 画像トークン数を計算します:総ピクセル数を 32 * 32 で割ります。
      token = int((h_bar * w_bar) / (32 * 32))
      
      # <|vision_bos|> と <|vision_eos|> は視覚マーカーです。それぞれ 1 トークンとしてカウントされます。
      print(f"画像トークンの総数:{token + 2}")
      
  • レート制限:Qwen-OCR のレート制限については、「レート制限」をご参照ください。
  • 無料クォータ (シンガポールのみ):Qwen-OCR は 100 万トークンの無料クォータを提供します。このクォータは、Model Studio をアクティベートした日、またはモデルの使用リクエストが承認された日から 90 日間有効です。

本番環境に適用

  • 画像の前処理:
    • 入力画像が鮮明で、均一に照明され、過度に圧縮されていないことを確認してください:
      • 情報損失を避けるため、画像をロスレス形式 (例:PNG) で保存および送信します。
      • 画像の解像度を向上させるには、平均または中央値フィルタリングなどのノイズ除去アルゴリズムを使用して、ノイズの多い画像を滑らかにします。
      • 不均一な照明を補正するには、適応的ヒストグラム均等化などのアルゴリズムを使用して、輝度とコントラストを調整します。
    • 傾いたイメージ: DashScope SDK で enable_rotate: true を設定し、認識前に回転を補正します。
    • 非常に小さいまたは大きいイメージ: min_pixelsとmax_pixelsを使用して、イメージのスケーリングをコントロールします。
      • min_pixels: 小さなイメージを拡大し、詳細をより鮮明にします。デフォルトのままにしてください。
      • max_pixels: 大きすぎるイメージがトークンを過剰に消費するのを防ぎます。デフォルトでほとんどのケースに対応します。小さいテキストが認識されない場合はこの値を大きくします。これにより、トークンの使用量が増加します。
  • 結果の検証:モデルの認識結果にはエラーが含まれる場合があります。重大なビジネス運用では、手動レビュープロセスを実装するか、検証ルールを追加してモデルの出力の精度を検証してください。たとえば、ID カードや銀行カード番号の形式検証を使用します。
  • バッチ処理:大量で非リアルタイムのワークロードには、バッチ API を使用して、ジョブを非同期で低コストで処理します。

よくある質問

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

タイプ

仕様

DashScope SDK (Python, Java)

OpenAI 互換 / DashScope HTTP

画像

7 MB より大きく 10 MB 未満

ローカルパスを渡す

公開 URL のみがサポートされています。Object Storage Service を使用してください。

7 MB 未満

ローカルパスを渡す

Base64 エンコーディング

Base64 エンコーディングはデータサイズを増加させます。元のファイルサイズは 7 MB 未満である必要があります。
ローカルパスまたは Base64 エンコーディングを使用すると、サーバー側のダウンロードタイムアウトを防ぎ、安定性を向上させることができます。
Qwen-OCR モデルがテキストのローカライズ結果を返した後、draw_bbox.py ファイルのコードを使用して、元の画像に検出フレームとそのラベルを描画します。
qwen3.5-ocr を使用する際、カスタムプロンプトに <html><body>...</body></html> のような完全な HTML 構造が含まれていると、モデルがその構造をフォローし、OCR 結果をプレーンテキストではなく HTML フォーマットで返すことがあります。その場合、応答は空に見えるか、フロントエンドスタイルのタグが含まれているように表示されます。単一の <br> のようなシンプルなタグでは、この動作はトリガーされません。この問題を解決するには、次のいずれかの方法を使用してください:
  • プロンプトに完全な HTML タグ構造が含まれているかどうかを確認してください。含まれている場合は、プレーンテキストの命令に置き換えて、もう一度お試しください。たとえば、<html><body>イメージからすべてのテキストを抽出する</body></html> を イメージからすべてのテキストを抽出する に変更します。
  • お使いのプロンプトが出力形式に影響を与えるかどうかが不明な場合は、text フィールドを省略して、モデルのデフォルトのプロンプトを使用してください。
  • 代わりに qwen3.7-plus モデルをご使用ください。このモデルは、HTML 構造を含む同じプロンプトを渡した場合でも、プレーンテキストの結果を返します。

API リファレンス

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

エラーコード

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