使用pytesseract实现图片转字符串无输出问题求助
可行解决建议
- 确认Tesseract底层程序已正确安装
pytesseract只是Tesseract的Python封装库,本身不包含OCR核心程序,你需要先安装对应操作系统的Tesseract安装包:Windows系统安装后需要将Tesseract安装路径加入系统环境变量,或者在代码开头手动指定执行路径:
import pytesseract # 替换为你本地的Tesseract实际安装路径 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
- 校验图片加载是否正常
先确认代码中填写的screenshot.png路径正确,优先使用绝对路径,同时增加图片加载校验逻辑,排除图片读取失败的问题:
from PIL import Image # 替换为图片的绝对路径 img = Image.open(r"C:\Users\你的用户名\Desktop\screenshot.png") # 正常会输出图片的宽高像素值,无输出说明图片读取失败 print(img.size)
- 增加图片预处理逻辑
Tesseract对低对比度、有背景噪点、反色的图片识别率极低,甚至会返回空结果,建议先对图片做灰度转换、二值化处理后再识别:
import pytesseract from PIL import Image img = Image.open("screenshot.png") # 转为灰度图 img = img.convert('L') # 二值化处理,阈值可根据实际图片效果调整 threshold = 140 bin_table = [0 if i < threshold else 1 for i in range(256)] img = img.point(bin_table, '1') # 如需识别中文,要先安装Tesseract简体中文语言包,再指定lang参数 print(pytesseract.image_to_string(img, lang='chi_sim+eng'))
确认语言包匹配识别内容
如果待识别图片包含中文,需要单独下载安装Tesseract的简体中文语言包,调用时通过lang参数指定,否则会出现无输出或乱码的情况。裁剪识别区域
如果目标文字仅占图片的局部区域,先裁剪掉无关的背景区域再做识别,减少无效内容的干扰:
# 裁剪参数格式为(左边界x, 上边界y, 右边界x, 下边界y),根据实际调整 cropped_img = img.crop((50, 50, 600, 350)) print(pytesseract.image_to_string(cropped_img))
内容的提问来源于stack exchange,提问作者Croicco
相关产品推荐
相关产品推荐

