指针式仪表自动读数与识别(八):仪表自动读数系统设计与开发

老吴2019-04-12 13:10图像1153浏览


版权声明:本篇文章为原创文章,转载请注明出处。https://yao2san.com/article/2066

前面几篇文章都是偏理论的,这篇文章则是偏实践的,本文使用C#+EmguCV开发一个仪表自动读数系统,目前该系统能够识别圆形的温度表、气压表以及方形的电流、电压表,误差控制在0.1%左右。

系统概述

仪表自动读数系统是指通过机器视觉等图像处理方法,对摄像头采集到的指针式仪表进行分析,自动识别仪表示数的系统。其主要目的是代替人工读数,减小工作量,提高工作效率,同时能够实施反应设备的工作状态,让其处于最佳的运行状态。故该系统应该满足以下要求:

(1) 实时性
能够实时读取输入图像,并分析计算仪表示数。

(2) 准确性
能够保证在误差允许的范围内准确的读取示数。

(3) 鲁棒性
够适应不同环境以及不同仪表种类的读数。

(4) 稳定性
系统应该保持长时间运行稳定,不会经常出现运行异常等意外而停止。

本篇文章在前面的理论研究以及对仪表图片进行测试的基础上,实现了一个仪表自动读数系统,该系统能够对视频图像以及摄像头采集到的图像进行实时读数。系统默认使用了本文提出的RSCD圆检测算法进行表盘定位,默认使用RGS指针检测算法进行指针的定位,同时支持Hough圆检测、Hough直线检测以及CTM进行定位,并针对刻度起始点的确定问题,提供自动检测和手动标记两种模式。

架构与流程

一个仪表自动读数系统,应该包含输入模块、图像处理模块、读数模块、配置模块以及UI模块。其中各个模块的用途如下:

输入模块:用于仪表图像的采集以及传输。本文使用无线摄像头作为输入设备,USB或者局域网作为传输媒介。

图像处理模块:对输入的图像进行预处理和分析,并定位表盘以及指针。

读数模块:用于计算仪表读数,误差评估。

UI模块:用于用户的输入以及对结果输出展示。

配置模块:用于配置仪表识别过程中的参数、过滤条件以及仪表类型等。

仪表自动读数系统的基本架构及工作流程如下:


结合实际需要,对系统模块进行更小的拆分,最终确定的仪表读数系统的详细架构设计如下:

最终界面如下:

测试与误差分析

本次测试采用一个USB摄像头作为输入源,分别使用一个圆形温度表和一个直流电压表进行测试,设备的主要参数如下表:

下面两张表分别是对温度表和电压表测试的结果:





从结果可以看出系统自动读数结果与实际读数平均误差小于0.1%,即在100的量程下,平均误差小于0.1,误差在人眼读数误差范围内,因此具有较高的准确度。同时,识别每张图像(640×480)的平均时间仅为35ms左右,达到了实时读数的要求。

视频演示

温度表自动读数

电压表自动读数


至此整个系列的文章就完了,因时间有限,总结的比较粗糙,如有建议或者疑问,欢迎你请在下方留言,或者微信联系(再页面底部)

赞一个! (9)

文章评论(如需发表图片,请转至留言)