使用OpenCV Python识别机械零件字符时EasyOCR结果不准如何优化
机械零件字符识别优化方案
核心优化方向
1. 图像预处理优化
原有预处理顺序不合理,且没有针对金属反光、字符对比度低的工业场景做适配,调整如下:
- 调整操作顺序:先转灰度再做滤波、锐化,避免彩色通道引入无效干扰
- 新增自适应二值化:解决金属表面反光不均的问题,明确分离深色字符和亮面金属背景
- 新增形态学去噪:过滤零件表面细小划痕、污渍噪点,避免干扰字符特征
- 可选优化:先定位字符所在的ROI区域,裁剪后放大2~3倍再做识别,可大幅提升小字符的识别准确率
2. EasyOCR参数优化
原有调用仅用默认参数,没有针对工业印刷字符的场景做适配:
- 增加
allowlist参数:限定识别范围仅为场景中会出现的大写英文字母、数字,过滤括号、引号、逗号等错误识别的特殊符号 - 开启置信度过滤:设置
detail=1获取每个识别结果的置信度,仅保留置信度≥0.6的有效结果 - 调整识别阈值:适当提高
text_threshold参数到0.7以上,降低误识别概率
3. 后处理规则优化
可以根据你的零件字符的固定规则做校验修正:
- 固定字符长度过滤:如果你的零件字符是固定6位/8位,直接舍弃长度不符的结果
- 特殊符号替换:批量替换识别结果中误判的逗号、横杠、引号等无效符号
优化后参考代码
import numpy as np import cv2 import easyocr IMAGE_FILE_LOCATION = r'D:\camera_mv_image\IMAGES\date (1).jpeg' input_img = cv2.imread(IMAGE_FILE_LOCATION) # 预处理优化 # 1. 先转灰度 gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY) # 2. 双边滤波去噪 bfilter = cv2.bilateralFilter(gray, 15, 30, 30) # 3. 自适应阈值二值化 thresh = cv2.adaptiveThreshold(bfilter, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 4. 形态学开运算去噪 kernel = np.ones((2,2), np.uint8) clean = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1) # 5. 锐化 sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) sharpen = cv2.filter2D(clean, -1, sharpen_kernel) cv2.imshow('processed', sharpen) # EasyOCR参数优化 reader = easyocr.Reader(['en'], gpu=False) # 有GPU可以开启gpu=True提升速度 # 限定识别范围为大写字母+数字,开启置信度过滤 result = reader.readtext(sharpen, detail=1, allowlist='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', text_threshold=0.7) # 过滤低置信度结果,提取文本 final_result = [] for detection in result: if detection[2] >= 0.6: final_result.append(detection[1]) print("final", final_result) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者nilam ghodsare
相关产品推荐
相关产品推荐

