You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pytesseract的image_to_data()丢失前导零,如何与image_to_string输出一致?

解决pytesseract image_to_data丢失前导零的问题

问题根源在于pandas的自动类型推断:当image_to_data以data.frame格式返回结果时,pandas会把看起来像数值的文本(比如"03")自动转换为浮点型(3.0),转成字符串时就丢失了前导零。而image_to_string直接返回原始识别字符串,不会触发这个转换。

可行解决方案

方法1:手动控制DataFrame的类型(推荐)

先获取字典格式的识别结果,再手动转换为DataFrame并指定所有字段为字符串类型,避免自动类型推断:

import pytesseract
from PIL import Image
import pandas as pd

# 加载图片
img = Image.open("r7xpn.png")
# 你的配置参数
config = "--oem 3 -l eng --psm 7"

# 获取字典格式的识别数据
ocr_data = pytesseract.image_to_data(img, config=config, output_type=pytesseract.Output.DICT)
# 转换为DataFrame,强制所有字段为字符串类型
ocr_df = pd.DataFrame(ocr_data, dtype=str)
# 过滤掉空文本的无效行
ocr_df = ocr_df[ocr_df["text"].notna() & (ocr_df["text"].strip() != "")]

# 此时text字段会保留原始的"03"
print(ocr_df["text"].iloc[0])  # 输出: 03

方法2:修复已转换的数值字段(仅适用于固定长度场景)

如果已经得到了带数值类型text的DataFrame,可以根据已知的格式(比如固定两位数字)重新格式化:

# 假设ocr_df是已有的DataFrame,text字段为数值类型
ocr_df["text"] = ocr_df["text"].apply(
    lambda x: f"{int(x):02d}" if pd.notna(x) and str(x).strip() != "" else x
)

注意:这个方法仅适用于你明确知道识别文本的固定格式,通用性不如方法1。

内容的提问来源于stack exchange,提问作者Andrei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:45:53