TextIn调用API教程及避坑

本文介绍了如何通过API进行通用文字识别,包括获取API凭据、调用过程中的JSON返回结构,以及在处理网络图片时的注意事项,如错误码解析和文件上传要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. API调用

在工作台中右上角点击获取机器人,进入产品市场,可以看到所有支持识别的类型,这里以通用文字识别为例,点进去后可以发现新用户有免费的1000次额度。

然后点击API文档查看详细使用说明及示例代码

CommonOcr类中的id和和secret_code输入自己的Id和密码,即可实现API调用,非常简单

二. 获取文本

返回的是JSON类型,如下所示

{
    "code": 200,
    "message": "success",
    "version": "v2.0.0",
    "duration": 871.5,
    "result": {
        "angle": 90,
        "width": 1280,
        "height": 1440,
        "lines": [
            {
                "text": "这是一个例子。",
                "score": 0.99,
                "type": "text",
                "position": [
                    0,
                    0,
                    50,
                    0,
                    50,
                    30,
                    0,
                    30
                ],
                "angle": 90,
                "direction": 1,
                "handwritten": 1,
                "char_scores": [
                    0.99,
                    0.98,
                    0.95,
                    0.95,
                    0.99,
                    0.93,
                    0.87
                ],
                "char_centers": [
                    [
                        20,
                        10
                    ],
                    [
                        30,
                        10
                    ],
                    [
                        40,
                        10
                    ],
                    [
                        50,
                        10
                    ],
                    [
                        60,
                        10
                    ],
                    [
                        70,
                        10
                    ],
                    [
                        80,
                        10
                    ]
                ],
                "char_positions": [
                    [
                        18,
                        8,
                        22,
                        8,
                        22,
                        12,
                        18,
                        12
                    ],
                    [
                        28,
                        88,
                        32,
                        8,
                        32,
                        12,
                        28,
                        12
                    ],
                    [
                        38,
                        88,
                        42,
                        8,
                        42,
                        12,
                        38,
                        12
                    ],
                    [
                        48,
                        88,
                        52,
                        8,
                        52,
                        12,
                        48,
                        12
                    ],
                    [
                        58,
                        88,
                        62,
                        8,
                        62,
                        12,
                        58,
                        12
                    ],
                    [
                        68,
                        88,
                        72,
                        8,
                        72,
                        12,
                        68,
                        12
                    ],
                    [
                        78,
                        88,
                        82,
                        8,
                        82,
                        12,
                        78,
                        12
                    ]
                ],
                "char_candidates": [
                    [
                        "这"
                    ],
                    [
                        "是"
                    ],
                    [
                        "一",
                        "-"
                    ],
                    [
                        "个"
                    ],
                    [
                        "例"
                    ],
                    [
                        "子"
                    ],
                    [
                        "。",
                        "O"
                    ]
                ],
                "char_candidates_score": [
                    [
                        0.99
                    ],
                    [
                        0.99
                    ],
                    [
                        0.95,
                        0.05
                    ],
                    [
                        0.99
                    ],
                    [
                        0.99
                    ],
                    [
                        0.99
                    ],
                    [
                        0.89,
                        0.11
                    ]
                ]
            }
        ]
    }
}

其中大部分是无用信息,只有text是我们要的识别内容字符串,为了获取其中的内容,可以执行以下代码:

ans = CommonOcr(img).recognize()

# 将识别的文字转换为字典
data = json.loads(ans)
# 从结果中提取文字
text_list = [line["text"] for line in data["result"]["lines"]]

text_list就是我们要的字符串了,其余参数可以在文档里查看详细介绍

三. 避坑

有时候我们不是传入本地图片,而是传入url,我们如果直接调用request,然后用PIL的Image读取会产生报错,这是因为请求体的数据格式为文件的二进制流。解决办法是创建一个临时文件,将字节对象写进临时文件上传读取,具体代码如下:

import requests
from io import BytesIO
import json
from tempfile import NamedTemporaryFile


# 定义一个函数来识别图片上的文字
def recognize_text(image_url):
    # 发送GET请求到图片URL
    response = requests.get(image_url)

    # 检查请求是否成功
    if response.status_code == 200:
        # 使用BytesIO将响应内容转换为字节对象
        image_bytes = BytesIO(response.content)

        # 创建一个临时文件
        with NamedTemporaryFile(delete=False) as tmp_file:
            # 将字节对象写入临时文件
            tmp_file.write(image_bytes.read())

            # 调用TextIn API来识别文字
            ans = CommonOcr(tmp_file.name).recognize()

            # 将识别的文字转换为字典
            data = json.loads(ans)

            # 从结果中提取文字
            text_list = [line["text"] for line in data["result"]["lines"]]

            # 返回识别到的文字列表
            return text_list
    else:
        # 如果请求失败,返回一个错误信息
        return f"获取图片失败,状态码:{response.status_code}"

错误码说明

错误码描述
40101x-ti-app-id 或 x-ti-secret-code 为空
40102    x-ti-app-id 或 x-ti-secret-code 无效,验证失败
40103    客户端IP不在白名单
40003余额不足,请充值后再使用
40004    参数错误,请查看技术文档,检查传参
40007    机器人不存在或未发布
40005    机器人未开通,请至市场开通后重试
40301    图片类型不支持
40302    上传文件大小不符,文件大小不超过 10M
40303    文件类型不支持
40304    图片尺寸不符,图像宽高须介于 20 和 10000(像素)之间
40305识别文件未上传
30203基础服务故障,请稍后重试
500    服务器内部错误

### 如何使用Python调用千帆大模型API 以下是基于参考资料中的内容以及专业知识整理的关于如何通过Python调用百度千帆大模型API的具体方法。 #### 非流式调用示例 非流式的调用方式适用于简单的文本生成需求。可以通过`completions`接口完成请求发送并获取响应数据[^3]。 ```python import requests def call_qwen_api_non_stream(api_key, secret_key, model="qwen-max", prompt="你好"): url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/completion/{model}" headers = { 'Content-Type': 'application/json' } access_token = get_access_token(api_key, secret_key) request_url = f"{url}?access_token={access_token}".format(model=model) payload = { "prompt": prompt, "temperature": 0.9, "top_p": 0.8, "max_tokens": 2048 } response = requests.post(request_url, json=payload, headers=headers) result = response.json() return result["result"] if "result" in result else None def get_access_token(api_key, secret_key): token_host = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}" response = requests.get(token_host) if response: return response.json().get("access_token") ``` 上述代码展示了如何利用HTTP POST请求向千帆大模型发起一次非流式的文本补全操作,其中包含了访问令牌的申请过程。 #### 流式调用示例 对于更复杂的场景或者希望实时接收返回结果的情况,则可以选择流式调用来处理。这种方式允许程序逐步读取服务器传回的数据片段而不是等待整个回复完成后才解析全部内容。 ```python import websocket try: import thread except ImportError: import _thread as thread def on_message(ws, message): print(f"Received:{message}") def on_error(ws, error): print(error) def on_close(ws, close_status_code, close_msg): print("### closed ###") def on_open(ws): def run(*args): ws.send(json.dumps({ "prompt":"讲述一个未来世界的故事", "stream":True })) thread.start_new_thread(run, ()) if __name__ == "__main__": api_key = "<your_api_key>" secret_key = "<your_secret_key>" access_token = get_access_token(api_key, secret_key) websocket.enableTrace(True) ws_url = f"wss://ws.aip.baidubce.com/text generation/stream/?access_token={access_token}" ws = websocket.WebSocketApp(ws_url, on_message=on_message, on_error=on_error, on_close=on_close) ws.on_open = on_open ws.run_forever() ``` 此部分提供了另一种形式即WebSocket协议下的交互模式来演示流式传输的实际运用案例。 #### Django集成实例 如果计划在一个Web应用程序里嵌入这些功能的话,那么可以考虑采用Django框架作为后端服务基础架构之一,并按照如下步骤实施: 1. 创建一个新的视图函数用于接受来自用户的输入; 2. 将接收到的信息传递给之前定义好的API调用逻辑; 3. 把得到的结果反馈回去展示在页面上[^1]。 注意这里仅提供了一个大致方向性的指导思路而非完整的项目源码文件列表等内容说明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值