基于Cortex-A8的摄像直读抄表装置的设计
2019-07-25武永华许志杰张淑城
武永华 许志杰 张淑城
摘 要:针对抄表系统中水表表盘读数不准的问题,设计基于Cortex-A8的摄像直读远传抄表装置。该装置通过四路USB摄像模块对表盘进行摄像,利用Linux的V4L2对图像进行采集,OpenCV 完成对图像的预处理、SVM 完成对数字的识别,装置最终通过串口RS 232输出表盘数字提供给后端。通过对装置的应用表明,图像识别率较高,设备运行稳定。
关键词:摄像直读;V4L2;OpenCV;串口;识别率;Cortex-A8
中图分类号:TP274文献标识码:A文章编号:2095-1302(2019)04-00-05
0 引 言
随着物联网技术、电子技术、通信技术的发展,各式各样的新型远传抄表系统涌现。目前我国的水表抄收方式主要有传统的人工抄表方式、现场自动抄表、预付费抄表、远程有线抄表、远程无线自动抄表。自动抄表是利用物聯网技术处理表具数据,将采集到的水表字轮数据发送至服务器,进行后续用户水费计算和其他大数据分析。从技术层面来分,水表抄表技术包括水表计数方式和水表数据远传方式。水表计数方式主要有脉冲式远传水表[1]和直读式远传水表[2],而直读式远传水表又细分为光电直读式远传水表、摄像直读远传水表、厚膜电阻式远传水表。从水表读数传输方式又可分为电力载波[3]、CATV网络远程传输[4]、GSM/GPRS网络无线传输[5]。目前实现远程抄表系统的基表大部分是改造现有水表,通过脉冲计数技术实现计量,因而容易受到磁干扰,可靠性低,数据有误之后的维护工作量大。针对目前抄表装置的优缺点,本文装置在原有水表的基础上设计一种图像处理技术和嵌入式技术相结合的摄像直读抄表装置,所使用的硬件以TI-AM3352[6]为核心,Crotex-A8架构,软件采用Linux操作系统和ARM-Linux平台,利用V4L2[7]完成对表盘图像的采集,OpenCV[8]完成对图像的处理,SVM[9]完成对数字的识别。针对该抄表方法中对图像某区域示数的识别问题,采用可靠的识别方式,即使用摄像头拍摄水表表盘后生成图片,然后根据表盘中的示数位置,对表盘区域进行分割,接着将图片进行JPG压缩后识别图片中的示数,最后将这个示数通过串口显示在终端上。
1 摄像直读抄表装置硬件原理
基于AM3352微处理器的嵌入式摄像直读远程抄表系统将摄像头固定安装在仪表上的某个位置,当需要进行抄表时,通过RS 232获得命令,由AM3352微处理器控制USB模块选择对应的摄像头开启并进行水表摄像。当任务完成后,AM3352数据采集设备再次关机。此系统可以提供可靠的表盘度数,与仪表的脉冲传感器结合使用可以有效避免采集误差,简化人工校正过程,使得抄表过程更加可视化。本文装置主要包括电源模块、RS 232串口、AM3352核心模块、USB模块四部分。摄像直读抄表装置结构如图1所示。
2 摄像直读抄表装置硬件设计
本文装置的电源模块输入DC 9~24 V,电源模块主要通过MP1471和MP1498两个降压芯片,设计输出电压为
3.3 V,电路原理图如图2所示。
RS 232串口模块主要完成电平转化,采用的主芯片为SP3232,电路原理图如图3所示。
USB模块主要完成四路USB摄像头选择一路的功能。所用主芯片为USB2514B,初始化的设定通过I2C完成。电路原理图如图4所示。
AM3352核心模块主要完成四路USB水表图像的采集、预处理以及表盘数字的识别。其中AM3352微处理运行Linux操作系统和OpenCV,电路方框图如图5所示。
3 图像采集和预处理
3.1 V4L2编程与图像采集
V4L2是嵌入式Linux系统中关于视频设备的内核驱动,主要用来采集图片,对视频、音频进行相关操作等,因此V4L2提供了一系列的接口函数,用于视频捕捉、采集图片等视频设备的应用。视频设备采集流程如图6所示。
3.1.1 获取摄像头参数
Linux系统中提供ioctl()函数以及相关参数获取所使用的USB摄像头基本信息和支持的采集格式。其获取的参数信息有采集设备、支持流操作、支持的像素格式等。
3.1.2 设置摄像头参数
摄像头像素格式设置为YUYV422,图像分辨率设置为240×320,使用参数VIDIOC_S_FMT设置摄像头参数。
3.1.3 摄像头图像采集
摄像头设备初始化后就进行图片采集。通过参数VIDIOC_REQBUFS和结构体v4l2_requesbuffers申请缓存,接着通过内存映射将缓存信息映射到用户空间,之后将数据写入文件生成原始图片。
3.1.4 图片格式转换
生成的原始图片为YUYV422,为了方便处理图像,需要先将其转换为RGB888格式后再转成压缩JPG格式图片。
3.1.5 关闭摄像头设备
为了较好地管理内存,防止出现系统崩溃的现象,停止图像采集后,要对内存进行回收。停止采集后通过参数 VIDIOC_STREAMOFF调用 close()函数关闭摄像头设备文件。
3.2 OpenCV处理图像
采集到的图像如图7所示,使用OpenCV开源计算机视觉库对图像进行相关处理。
3.2.1 图像灰度化
一般对图像进行灰度化处理的方法有分量法、加权平均法等。本文装置采用加权平均法对图像进行灰度化处理,因此使用OpenCV库中的cvtColor()函数对采集到的图像进行灰度化处理,处理后的图像如图8所示。
3.2.2 图像去燥
图像去噪即为减少图像中的噪声干扰。常用的图像去噪方法有均值滤波、中值滤波、高斯滤波等。通过使用相关函数对灰度化处理后的图像进行三种滤波处理,无法很直观地看出哪种滤波效果更好,但是经过三种滤波处理后的图像再经过二值化的处理,发现采用高斯滤波后的图像二值化处理效果更好,因此本文采用高斯滤波的方法,使用OpenCV库中的GaussianBlur()函数对灰度化处理好的图像进行高斯滤波处理,处理后的图像如图9所示。
3.2.3 图像二值化
图像经过灰度化和二值化处理后,只剩下黑色和白色,即黑白效果,因为数据量降低了,所以后续在对图像进行处理时,计算量已经没有之前那么大了。一般对图像进行二值化的方法有全局阈值法、局部阈值法。为了降低算法复杂度,便于后续轮廓提取处理,采用固定阈值处理,并加入反色处理,因此在本文设计中使用OpenCV库中的threshold()函数对高斯滤波去噪后的图像进行二值化处理,处理后的图像如图10所示。
3.2.4 图像腐蚀和膨胀
腐蚀即通过自定义的结构元素扫描全图像像素,并进行与运算,目的是对二值化处理后图像中的某些边界点进行消除。膨胀的目的则是对二值化处理后图像中的某些边界进行扩张,即空洞填补,并进行或运算。为了使表盘区域在图像中显得更加突出,以及便于对图像外轮廓进行提取处理,对其进行腐蚀和膨胀处理,使用OpenCV库中的dilate()函数和erode()函数对二值化后的图像进行腐蚀和膨胀处理,处理后的图像如图11、图12所示。
3.2.5 图像轮廓
在图像识别过程中,查找轮廓是识别区域的前提,先对整个图像查找所有外部的轮廓并画出,再进行图像分割,这时也就能得到所要识别的区域了。使用OpenCV查找轮廓的方法有多种,一般步骤是:灰度化-二值化-腐蚀-膨胀-形态学处理-查找轮廓-绘制轮廓-显示处理好的图像。为了后续示数区域的准确分割,本文设计使用OpenCV库中的findContours()函数进行外轮廓的查找。轮廓查找之后的图像如图13所示。
3.2.6 图像分割
图像分割通常结合查找图像轮廓使用。对于本文设计来说,只关心所要识别的区域,将其余区域舍去,因此为了能够将感兴趣的区域分割出来(即示数区域),在图像外轮廓查找和绘制后,图像中出现一些红色的区域,之后对其进行面积判断,最终得到想要的区域,之后才能对其进行数字识别。图像分割处理后的结果如图14所示。
4 表盘字轮读数识别
4.1 数字识别概述
数字识别包含在模式识别领域中,其结果是将某些物体上的数字进行识别,识别方法有多种,如结构特征识别法、模板匹配识别法、神经网络识别法。这些识别算法各有优缺点,选择具体的算法时主要考虑计算复杂度、算法成功识别率、硬件平台匹配性。本文设计采用机器学习+向量机(SVM)的方法实现数字识别,然后通过文件操作将结果保存并显示在远程终端上。
4.2 数字识别
支持向量机能够解决一些模式识别中的问题。SVM是对机器进行训练的一种方法,效果较好,可以应用于分类数据。本文设计使用SVM分类器对数据进行训练,生成XML文件,通过SVM分类器对XML文件进行读取,进而识别图像中的数字。
通过摄像头采集水表图像,使用JPEG库中的压缩算法生成JEP格式的图片,然后对此图片进行灰度化、高斯去噪、二值化、腐蚀、膨胀处理,接着查找图像的外轮廓并繪制出来,图像中会出现一些红色矩形区域,对这些区域进行面积判断,找到示数区域对应的红色矩形区域,保存这个红色矩形区域的4个顶点坐标,之后通过这几个坐标将示数区域分割出来,并对其进行矫正,就得到所要的区域。接着将其保存,识别数字。识别数字的过程中要先将先前使用分类器训练好的数据保存为XML格式的文件进行加载,后进行数字区域的分离,将每个数字所在的位置区域分出来,保存后进行灰度化处理,调整图片大小,改变矩阵的行列数、通道数,进行矩阵数据类型转换,识别数字。识别过程中如果碰到数字不全的情况,将数字不全的都以0处理。识别完成之后,将识别的结果在远程终端上显示出来,同时通过文件操作函数保存结果并生成txt文件。总体识别流程如图15所示,识别结果如图16所示。
5 结 语
本文将嵌入式系统和图像处理技术相结合,并且在Ti-AM3352开发板上实现摄像直读水表的读数识别。在拍摄图片中,采用V4L2编程进行摄像头的相关操作,使用JPEG库对图片进行转换,完成图像采集。在图像处理过程中,利用OpenCV开源代码和SVM把数字识别出来、显示,并保存在文本中。测试结果表明,该系统保证了系统的可靠性和可扩展性,系统工作稳定,硬件成本低,施工简单,抄表成功率99%以上,具有广阔的市场和应用前景。
参 考 文 献
[1]张兴华.基于图像识别的智能抄表系统研究与实现[D]. 哈尔滨:哈尔滨理工大学,2012.
[2]陈泽.基于ARM-Linux控制器的小区智能家居管理系统的设计与实现[D].北京:华北电力大学,2017.
[3]徐伟,王斌,姜元建.低压电力线载波通信技术在用电信息采集系统中的应用[J].电测与仪表,2010(2):57-59.
[4]张亚彬.同轴电缆特性及在CATV信号传输中的应用[J].中国新技术新产品,2009(3):19-20.
[5]任亚军,赵明,朱文革,等.基于GPRS的水表远程抄表系统设计[J].仪器仪表用户,2015,22(2):7-9.
[6]程昌南.ARM Cortex-A8硬件设计DIY[M].北京:北京航空航天大学出版社,2012.
[7]甘勤操,陈西曲.基于V4L2的嵌入式视频监控系统的研究[J].武汉轻工业大学学报,2014,33(1):61-64.
[8]孟祥兴,宋宇飞,顾桥磊.基于OpenCV和嵌入式的工业图像检测系统[J].物联网技术,2018,8(10):106-107.
[9]李良荣,荣耀祖,顾平,等.基于SVM的车牌识别技术研究[J].贵州大学学报,2018,35(5):48-53.
[10]甘英俊,胡天翔,沈海涛,等.基于机器视觉的汽车牌照识别[J].机械制造与自动化,2009(2):97-101.