Pytesseract运行无报错但无文本输出的排查与解决
问题排查与解决方案
一、无文本输出的原因及解决
- 语言包缺失
Tesseract默认仅包含英文语言包,若你的纸质日程是中文,需先安装中文语言包(下载后放到Tesseract的tessdata目录,通常是C:\Program Files\Tesseract-OCR\tessdata),然后在识别时指定语言参数:
text = pytesseract.image_to_string(im, config="--psm 4 -l chi_sim")
(chi_sim代表简体中文,若为繁体用chi_tra)
- PSM模式不匹配
--psm 4适用于严格的列/表格结构,若你的日程照片排版松散、倾斜或不是规整列结构,尝试切换PSM模式:
--psm 3:默认自动模式,让Tesseract自动分析布局--psm 6:假设文本是单一统一块--psm 11:适用于稀疏分布的文本
- 图片预处理不足
纸质照片常存在倾斜、阴影、低对比度等问题,会严重影响识别率,先做预处理:
from PIL import Image, ImageOps, ImageEnhance # 转灰度 im_gray = ImageOps.grayscale(im) # 增强对比度 enhancer = ImageEnhance.Contrast(im_gray) im_enhanced = enhancer.enhance(2.0) # 二值化(根据实际情况调整阈值) im_threshold = im_enhanced.point(lambda x: 0 if x < 128 else 255, '1') # 预处理后再识别 text = pytesseract.image_to_string(im_threshold, config="--psm 4 -l chi_sim")
- 工作目录问题
Jupyter的工作目录可能和你存放图片的目录不一致,改用绝对路径加载图片:
import os im = Image.open(os.path.abspath("sample_06.jpeg"))
二、Jupyter内核参数冲突错误的解决
错误cannot convert --f=c:\Users\{myUserName}\AppData\Roaming\jupyter\runtime\kernel-v2-xxxx.json是Jupyter内核将自身参数传递给pytesseract子进程,导致Tesseract误解析。解决方法:
直接运行Python脚本
暂时退出Jupyter,将代码保存为.py文件,用Python直接运行,验证是否还出现该错误。升级pytesseract
更新到最新版本的pytesseract,修复已知的子进程参数冲突问题:
pip install --upgrade pytesseract
- 手动调用Tesseract命令
绕过pytesseract的封装,直接用subprocess调用Tesseract命令:
import subprocess import tempfile import os # 将图片临时保存为PNG(Tesseract对PNG支持更好) with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as tmp_file: im.save(tmp_file.name) # 构建Tesseract命令 tesseract_path = r'C:\Program Files\Tesseract-OCR\tesseract.exe' cmd = [ tesseract_path, tmp_file.name, 'stdout', # 直接输出到标准输出 '--psm', '4', '-l', 'chi_sim' ] # 执行命令并获取结果 result = subprocess.run(cmd, capture_output=True, text=True) text = result.stdout # 删除临时文件 os.unlink(tmp_file.name) print(text)
内容的提问来源于stack exchange,提问作者yellowjuniper
相关产品推荐
相关产品推荐

