使用Tesseract无法识别图片中的单个数字8,求解决方案
数字8的OCR识别失败问题
我尝试从图片中提取数字,但始终无法识别出数字8。已经试过调整PSM参数(比如6、10),当前代码如下:
image = cv2.imread(image_path) if(image is not None): # Convert the image to grayscale gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Use OCR to extract text from the image extracted_text = pytesseract.image_to_string(gray, config='--psm 10 -c tessedit_char_whitelist=0123456789')
解决思路
- 图像预处理优化对比度:数字8可能因亮度、对比度不足被误判,可尝试二值化处理强化字符轮廓:
# 自适应二值化(适配光照不均场景) thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 或固定阈值二值化(需根据图像调整阈值数值) # _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV) extracted_text = pytesseract.image_to_string(thresh, config='--psm 10 -c tessedit_char_whitelist=0123456789') - 调整PSM参数适配场景:PSM 10是单字符识别模式,若图像中数字8和其他元素存在粘连,切换到PSM 6(假设图像为单一文本块)试试:
extracted_text = pytesseract.image_to_string(gray, config='--psm 6 -c tessedit_char_whitelist=0123456789') - 形态学操作修正字符形态:如果数字8的笔画过细或过粗,用膨胀/腐蚀操作修正:
import numpy as np kernel = np.ones((2,2), np.uint8) # 膨胀增强笔画清晰度 dilated = cv2.dilate(gray, kernel, iterations=1) # 或腐蚀去除干扰噪点 # eroded = cv2.erode(gray, kernel, iterations=1) extracted_text = pytesseract.image_to_string(dilated, config='--psm 10 -c tessedit_char_whitelist=0123456789') - 更新Tesseract版本:旧版本Tesseract对部分字体的数字8识别率偏低,确保使用最新稳定版。
内容的提问来源于stack exchange,提问作者Mukul Saini
相关产品推荐
相关产品推荐

