使用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
相关产品推荐
相关产品推荐

