数字式仪表识别python草莓馅饼3B,识别结果返回上位机。 系统介绍整个硬件选型系统的组成。 实物2、算法设计图像预处理倾斜校正字符定位分割SVM数字识别3、识别效果
一、系统介绍
这是我系新建的项目,来源于热门成熟的车牌识别。 数字仪表识别与之相似。 另外,省略了识别汉字和字母的部分,提高了系统识别的正确性。 但是,在定位时,由于不能利用颜色信息,所以定位的实现需要稍微改变。
GitHub :
接送门
硬件选型综合考虑了系统需求,控制器采用草莓馅饼3B型
草莓派性能强,运行稳定,外形小,有丰富的接口引脚,带有Wi-Fi、摄像头等模块。
相机选择草莓派官方相机,像素为500万。
整个系统的结构
实物
二、算法设计本系统采用python语言编程,利用opencv开源代码库,代码简单,参数易于调整
读取图像预处理源图像:
img=cv2.imread('1.jpg ) )。
高斯滤波:
blur=3img=cv2.Gaussianblur(img,(blur,blur ),0 ) ) ) ) ) ) )。
灰度:
img=cv2.cvtcolor(img,cv2.COLOR_BGR2GRAY ) )。
Otsu阈值化:
ret,img_thresh=cv2.threshold(img,0,255,cv2.thresh _ binary cv2. thresh _ Otsu ) () ) ) )
在仪器图像的实际拍摄中,由于人手中的不稳定,使得拍摄的图像容易产生倾斜,如果倾斜角度过大,将严重影响文字的定位分割的效果,对之后的识别产生不良影响,因此在倾斜大的情况下需要对图像进行旋转校正虽然使用Hough直线检测进行校正,但是由于Hough变换运算量过大,所以首先进行Canny边缘检测
Canny提取边缘:
(Edges=cv2.canny(img_Thresh,50,150,apertureSize=7) ) ) ) ) 652 )
Hough检测旋转转换:
defHough_change(Edges ) : #mydyj转换lines=cv2.Houghlines ) Edges,1,NP.pi/180,0 ) for rho, theta inlines [0] : a=NP.cos (theta ) b=NP.sin ) theta ) x0=a*rhoy0=b*rhox1=int ) x01000*(-b ) y1 (a ) ) ifx1==x2ory1==y 2: rotate _ img=img else 3360 t=float (y2-y1 )x2-y1 ) ) ) ) if rotate _ ane
文字对位分割进行关闭修正后的图的运算。
matrix=NP.ones ((5,3 ),np.uint8) #img_edge1=cv2.morphologyex ) img_thresh2,cv2.MORPH_CLOSE,NP
然后,利用轮廓检测,检测矩形,根据矩形的面积和纵横比初步决定表盘的位置。 需要注意的是,在这个过程中小数部分被去除,成功检测小数部分的方法还没有被考虑。
粗分割后,用投影法进行细分割,标准化:
SVM数字识别本设计采用支持向量机(SVM )进行数字识别
SVM是分类器,其原理是找到集合超平面分离数据,使两种数据的几何间隔最大。
对于不可线性分离的数据集,进行非线性变换,投影到高维空间后进行分割。 这个过程由核函数进行。
整体识别流程:
识别结果:
三、识别效果使用python自带的tkinter可视化结构实现用户界面的构建和显示,由于时间关系和设计需求,没有设计远程中心界面。
用户界面和远程中心使用套接字进行通信。
完整代码:
完整的代码下载
不管有什么问题都请联系我。 可以是消息、邮件或303239883@qq.com