基于Python识别不同颜色矩形风管及其内部信息
风管识别与文本提取实操方案
一、图像预处理(解决Tesseract识别干扰问题)
- 颜色分割提取风管区域:用OpenCV针对不同颜色风管的HSV色域范围做阈值分割,单独抠出目标风管,过滤背景杂色。示例代码:
import cv2 import numpy as np img = cv2.imread("风管平面图.png") hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 以蓝色风管为例,可根据实际图像调整HSV数值 lower_blue = np.array([90, 50, 50]) upper_blue = np.array([130, 255, 255]) blue_mask = cv2.inRange(hsv_img, lower_blue, upper_blue) blue_duct_area = cv2.bitwise_and(img, img, mask=blue_mask) - 二值化与降噪:将抠出的风管区域转为灰度图后做二值化,再用中值模糊或形态学操作清除小噪点,让文本边缘更清晰:
gray_duct = cv2.cvtColor(blue_duct_area, cv2.COLOR_BGR2GRAY) _, binary_duct = cv2.threshold(gray_duct, 127, 255, cv2.THRESH_BINARY_INV) clean_duct = cv2.medianBlur(binary_duct, 3)
二、优化Tesseract文本提取
- 限定识别范围:只将预处理后的风管区域传入Tesseract,避免无关区域干扰。
- 配置识别参数:针对中文文本添加
-l chi_sim语言参数,用--psm 6指定块级文本识别模式(适配风管内的排版):from pytesseract import pytesseract # 若Tesseract未在系统环境变量中,需指定路径 pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' duct_text = pytesseract.image_to_string(clean_duct, lang='chi_sim', config='--psm 6') print(duct_text.strip()) - 小字号文本处理:若风管内文本过小,可先对区域做放大:
enlarged_duct = cv2.resize(clean_duct, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
三、风管分类与信息对应
- 用轮廓检测
cv2.findContours()提取所有矩形风管的轮廓,结合颜色分割结果给每个风管打上颜色标签。 - 对每个轮廓对应的区域单独裁剪、预处理后提取文本,最终关联“风管颜色-内部文本”的对应关系。
四、备选方案(Tesseract效果不佳时)
- 尝试国内厂商的OCR API(如百度、阿里云OCR),这类工具对复杂背景下的印刷体识别率更高,适合小批量处理场景。
- 若需长期批量处理,可基于YOLO+CRNN训练自定义文本检测模型,针对性适配风管内的文本格式。
内容的提问来源于stack exchange,提问作者Atharva Purohit
相关产品推荐
相关产品推荐

