使用pytesseract提取图片中带框数字失败,求解决方案
解决pytesseract数字识别不准确的问题
针对你遇到的数字识别乱码问题,可以通过图像预处理和配置tesseract识别参数来优化效果,以下是具体方案:
1. 图像预处理
OCR对高对比度的黑白图像识别精度更高,先对原图做灰度化、二值化和降噪处理:
- 灰度化:将彩色图转为灰度图,减少色彩干扰
- 二值化:把图像转为黑白两色,突出文字轮廓
- 降噪:去除图像中的杂点,提升文字清晰度
2. 限定识别字符范围
指定tesseract只识别数字和目标符号([]:-),避免识别无关字符。
3. 调整识别模式(PSM)
使用合适的页面分割模式(PSM),让tesseract更准确地匹配文本结构。
修改后的代码
import pytesseract import cv2 pytesseract.pytesseract.tesseract_cmd = 'folder/tesseract.exe' img = cv2.imread("folder/test_image.png") # 图像预处理流程 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度图 # 二值化(可根据图片实际亮度调整阈值,这里用OTSU自动适配) _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) denoised = cv2.medianBlur(thresh, 3) # 中值降噪 # 自定义tesseract配置:限定字符集+指定识别模式 custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=[]0123456789:-' text = pytesseract.image_to_string(denoised, config=custom_config) print(text.strip())
关键参数说明
--oem 3:使用默认的OCR引擎模式--psm 6:假设图像为单一均匀文本块,适配你的目标内容格式tessedit_char_whitelist:严格限定识别的字符集,过滤无关干扰字符
如果效果仍不理想,可以尝试调整二值化阈值,或者更换PSM模式(比如--psm 8针对单个字符区域,--psm 10针对独立单个字符)。
内容的提问来源于stack exchange,提问作者ao0oa
相关产品推荐
相关产品推荐

