文字提取(OCR)

通义千问OCR是文字提取专有模型,专注于文档、表格、试题、手写体文字等类型图像的文字提取能力。它能够识别多种语言,包括英语、法语、日语、韩语、德语、俄语和意大利语等。

您可以通过调用通义千问OCR模型的API进行文字提取,或者在阿里云百炼平台进行在线体验

如何使用

您需要已获取API Key配置API Key到环境变量。如果通过OpenAI SDKDashScope SDK进行调用,还需要安装最新版SDK,并确保您的DashScope Python SDK版本不低于1.20.7。

DashScope

您可以通过DashScope SDKHTTP方式实现文字提取。

Python

import os
import dashscope

messages = [{
            "role": "user",
            "content": [{
                "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                "min_pixels": 28 * 28 * 4,
                "max_pixels": 1280 * 784},
                {"type": "text", "text": "Read all the text in the image."}]
        }]
response = dashscope.MultiModalConversation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr',
    messages=messages,
    top_p=0.01,
    temperature=0.1,
    max_tokens=2000)
print(response["output"]["choices"][0]["message"].content[0]["text"])  

返回结果

读者对象 如果你是Linux环境下的系统管理员,那么学会编写shell脚本将让你受益匪浅。本书并未细述安装 Linux系统的每个步骤,但只要系统已安装好Linux并能运行起来,你就可以开始考虑如何让一些日常 的系统管理任务实现自动化。这时shell脚本编程就能发挥作用了,这也正是本书的作用所在。本书将 演示如何使用shell脚本来自动处理系统管理任务,包括从监测系统统计数据和数据文件到为你的老板 生成报表。 如果你是家用Linux爱好者,同样能从本书中获益。现今,用户很容易在诸多部件堆积而成的图形环境 中迷失。大多数桌面Linux发行版都尽量向一般用户隐藏系统的内部细节。但有时你确实需要知道内部 发生了什么。本书将告诉你如何启动Linux命令行以及接下来要做什么。通常,如果是执行一些简单任 务 (比如文件管理) ,在命令行下操作要比在华丽的图形界面下方便得多。在命令行下有大量的命令 可供使用,本书将会展示如何使用它们。

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
    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");
        map.put("max_pixels", "1003520");
        map.put("min_pixels", "3136");
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        Collections.singletonMap("text", "Read all the text in the image."))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr")
                .message(userMessage)
                .topP(0.01)
                .temperature(0.1f)
                .maxLength(2000)
                .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);
    }
}

返回结果

读者对象 如果你是Linux环境下的系统管理员,那么学会编写shell脚本将让你受益匪浅。本书并未细述安装 Linux系统的每个步骤,但只要系统已安装好Linux并能运行起来,你就可以开始考虑如何让一些日常 的系统管理任务实现自动化。这时shell脚本编程就能发挥作用了,这也正是本书的作用所在。本书将 演示如何使用shell脚本来自动处理系统管理任务,包括从监测系统统计数据和数据文件到为你的老板 生成报表。 如果你是家用Linux爱好者,同样能从本书中获益。现今,用户很容易在诸多部件堆积而成的图形环境 中迷失。大多数桌面Linux发行版都尽量向一般用户隐藏系统的内部细节。但有时你确实需要知道内部 发生了什么。本书将告诉你如何启动Linux命令行以及接下来要做什么。通常,如果是执行一些简单任 务 (比如文件管理) ,在命令行下操作要比在华丽的图形界面下方便得多。在命令行下有大量的命令 可供使用,本书将会展示如何使用它们。

curl

curl --location 'https://dashscope.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": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                    "min_pixels": 3136,
                    "max_pixels": 1003520
                },
                {"type": "text", "text": "Read all the text in the image."}
            ]
          }
        ]
    },
    "parameters": {
        "top_p": 0.01,
        "temperature": 0.1,
        "repetition_penalty": 1.05,
        "max_tokens":2000
    }
}'

返回结果

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "text": "读者对象 如果你是Linux环境下的系统管理员,那么学会编写shell脚本将让你受益匪浅。本书并未细述安装 Linux系统的每个步骤,但只要系统已安装好Linux并能运行起来,你就可以开始考虑如何让一些日常 的系统管理任务实现自动化。这时shell脚本编程就能发挥作用了,这也正是本书的作用所在。本书将 演示如何使用shell脚本来自动处理系统管理任务,包括从监测系统统计数据和数据文件到为你的老板 生成报表。 如果你是家用Linux爱好者,同样能从本书中获益。现今,用户很容易在诸多部件堆积而成的图形环境 中迷失。大多数桌面Linux发行版都尽量向一般用户隐藏系统的内部细节。但有时你确实需要知道内部 发生了什么。本书将告诉你如何启动Linux命令行以及接下来要做什么。通常,如果是执行一些简单任 务 (比如文件管理) ,在命令行下操作要比在华丽的图形界面下方便得多。在命令行下有大量的命令 可供使用,本书将会展示如何使用它们。"
                        }
                    ]
                }
            }
        ]
    },
    "usage": {
        "output_tokens": 225,
        "input_tokens": 1247,
        "image_tokens": 1219
    },
    "request_id": "449db2cd-f4ba-9308-92ce-dd3724e4146e"
}

参数解释

在调用qwen-vl-ocr模型进行文字提取时,为了获得最佳识别率,messages需包含以下参数:

"input": {
    "messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {
            "role": "user",
            "content": [
                {
                    "image": image_url,
                    "min_pixels": 28 * 28 * 4,
                    "max_pixels": 1280 * 784,
                },
                {"type": "text", "text": "Read all the text in the image."},
            ]
        }
    ]
}
  • text:建议指定为 "Read all the text in the image.",设置为该值可获得最佳的识别效果。

  • min_pixels:可选字段,表示输入图像的最小像素。默认值为3136(28*28*4),最小值为100(10*10),最大值不超过max_pixels的设置值。

    若输入图像小于min_pixels的设置值,会将图像按长宽比例放大到设置值。
  • max_pixels:可选字段,决定了输入图像token的最大值。默认值为1280*784,最小值应大于min_pixels的设置值,最大值为30000*784。

    若输入的图像像素大于max_pixels的设置值,会将图像按长宽比例缩小到设置值。
    对小于4000*784像素的图像,将max_pixels设置为1280 * 784可以获得最佳识别率。
    对大于4000*784像素的图像,max_pixels应设置为图像像素1/3以上。

parameters需包含以下参数:

"parameters": {
    "top_p": 0.01,
    "temperature": 0.1,
    "repetition_penalty": 1.05,
    "max_tokens":2000
}
  • top_p核采样的概率阈值,用于控制模型生成文本的多样性。

    默认值为0.01。
    top_p越高,生成的文本更多样。反之,生成的文本更确定。
  • temperature采样温度,用于控制模型生成文本的多样性。

    默认值为0.1。
    top_p越高,生成的文本更多样。反之,生成的文本更确定。
  • repetition_penalty用于控制模型生成时连续序列中的重复度。

    默认值为1.05。
    提高repetition_penalty时可以降低模型生成的重复度;默认值为1.05,该参数对模型效果影响很大,请勿随意修改
  • max_tokens模型输出文本最大token数。

    默认值为2000,推荐设置为2000;最大值为4096;超过最大长度的结果会被截断。

使用限制

  • 由于qwen-vl-ocr模型是一个专用于文字提取的模型,所以只会对用户输入的图像做文字提取,不会根据用户输入的其他文本进行回答。

  • 用户需要在image参数中传入图像的URL或者BASE64链接;如果请求中输入了多个图像,qwen-vl-ocr模型只会识别第一个图像,目前不支持对多图识别

  • 目前不支持多轮对话能力,只会对用户最新的问题进行回答,会忽略掉历史对话信息。

支持的图片

图片格式

Content Type

文件扩展名

BMP

image/bmp

.bmp

DIB

image/bmp

.dib

ICNS

image/icns

.icns

ICO

image/x-icon

.ico

JPEG

image/jpeg

.jfif, .jpe, .jpeg, .jpg

JPEG2000

image/jp2

.j2c, .j2k, .jp2, .jpc, .jpf, .jpx

PNG

image/png

.apng, .png

SGI

image/sgi

.bw, .rgb, .rgba, .sgi

TIFF

image/tiff

.tif, .tiff

WEBP

image/webp

.webp

对于输入的图片有以下限制:

  • 图片大小不超过10MB

模型列表、计费和免费额度

模型名称

版本

上下文长度

最大输入

最大输出

输入输出单价

免费额度

(注)

(Token数)

(每千Token)

qwen-vl-ocr

当前等同qwen-vl-ocr-2024-10-28

稳定版

34096

30000

单图最大30000

4096

0.005

100Token

有效期:百炼开通后180天内

qwen-vl-ocr-latest

始终等同最新快照版

最新版

qwen-vl-ocr-2024-10-28

又称qwen-vl-ocr-1028

快照版

常见问题

我可以删除已上传的图片吗?

答:在模型完成文本生成后,百炼服务器会自动将图片删除,无需手动删除。

qwen-vl-ocr模型是否支持本地图片输入?

答:支持,本地图片输入方法请参见使用本地文件

qwen-vl-ocr模型是否支持流式输出?

答:支持,流式输出方法请参见使用流式输出

API参考

关于通义千问VL模型的输入输出参数,请参见通义千问

错误码

如果模型调用失败并返回报错信息,请参见错误码进行解决。