基于pytesseract识别硬币俄文文本无输出的问题求助
问题描述
我用Python的pytesseract库编写了图像转文本脚本,用于识别硬币图片上的俄文文本,已提前加载rus.traineddata训练数据。但识别硬币正反两面图片时控制台无输出;尝试用cv2调整图像颜色后,识别结果完全不符预期。
预期识别结果:
- 硬币正面:
Банк России 10 Рублей - 硬币反面:
Никто не забыт, ничто не забыто
我的代码:
import pytesseract from PIL import Image import cv2 import numpy avers, revers = ('coinaversTEST.jpeg', 'coinreversTEST.jpeg') aver = Image.open(avers) rever = Image.open(revers) color = cv2.cvtColor(numpy.array(rever), cv2.COLOR_BGR2HSV) print(pytesseract.image_to_string(color, config='--psm 7 -c tessedit_char_whitelist=0123456789.%', lang="rus").strip())
解决方案
你的代码存在几个关键问题,直接导致识别失败,以下是针对性修正方案:
1. 字符白名单完全错误
你设置的tessedit_char_whitelist=0123456789.%只允许数字和标点,完全排除了俄文字母,这是识别不出俄文的核心原因。可以直接移除白名单限制,或者添加俄文字母到白名单中,比如:
tessedit_char_whitelist=АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789.,% -
2. PSM模式选择不匹配
--psm 7指定将图像视为单一文本行,但硬币上的文字是多行结构(比如反面的句子分为两行),建议改用--psm 6(将图像视为单一文本块)或--psm 3(默认自动页面分割模式)。
3. 图像预处理逻辑不合理
HSV颜色空间不适合文本识别的预处理,应该采用更有效的流程增强文本与背景的对比度:
- 转换为灰度图
- 自适应二值化(解决光照不均问题)
- 降噪处理
修正后的完整代码
import pytesseract import cv2 import numpy as np # 图像预处理函数 def preprocess_image(image_path): # 读取图像 img = cv2.imread(image_path) # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 自适应二值化,反转黑白让文本为白色 thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 中值滤波降噪 denoised = cv2.medianBlur(thresh, 3) return denoised # 硬币图片路径 avers_path = 'coinaversTEST.jpeg' revers_path = 'coinreversTEST.jpeg' # 识别硬币正面 processed_avers = preprocess_image(avers_path) result_avers = pytesseract.image_to_string(processed_avers, lang='rus', config='--psm 6').strip() print("硬币正面识别结果:", result_avers) # 识别硬币反面 processed_revers = preprocess_image(revers_path) result_revers = pytesseract.image_to_string(processed_revers, lang='rus', config='--psm 6').strip() print("硬币反面识别结果:", result_revers)
额外优化提示
- 如果硬币图像存在倾斜,可添加旋转校正步骤(通过霍夫变换检测文本行角度)
- Windows系统需确保指定tesseract路径:
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
内容的提问来源于stack exchange,提问作者Алексндр Босов
相关产品推荐
相关产品推荐

