基于嵌入式的表计识别与读数系统的制作方法

文档序号:20017708发布日期:2020-02-25 10:54阅读:514来源:国知局
基于嵌入式的表计识别与读数系统的制作方法

本发明涉及嵌入式系统领域,具体涉及基于嵌入式的表计识别与读数系统。



背景技术:

自1971年单片机出现以来,各种微处理器就随着电子技术的不断发展而不断更新换代,嵌入式系统最初就是基于单片机的,发展至今已有近50年的历史。嵌入式系统是嵌入式专用计算机系统的简称,与通常意义上的操作系统不同[1],嵌入式系统是为了解决某个问题或实现某个功能而专门开发的,经常是批量生产从而满足某种设备制造的需要。随着近代科技的不断进步,尤其是近年来各种智能化设备的不断普及与发展,对各种嵌入式系统的需求也随之越来越大。嵌入式系统最突出的特点就是体积较小,便于集成到各种小型设备或搭载到各种系统当中。特别是集成电路的出现以及芯片技术的发展,使得各种微处理器的体积不断缩小,嵌入式系统的应用领域也因此变得越来越广泛。

嵌入式系统在智能系统特别是智能机器人领域具有至关重要的地位,各种各样的小体积,高效能,专用性强的嵌入式系统是智能机器人的重要组成部分。智能机器人体积小,功能丰富,能够完成很多人类所不能完成的工作,或者代替人类去完成一些危险的工作,因此智能机器人研究成为了近年来的热门研究领域。变电站智能机器人巡检是智能机器人应用的一个重要方面,主要负责代替人类进行变电站异常检测、表计识别、表计读数等工作。

变电站内存在各种表计,数目繁多,传统方式是依靠人工寻找表计,标出表计类别并进行读数记录。由于仅仅依靠人工读表、统计数据信息会浪费大量人力物力且效率低下,而且当天气恶劣或表计周边环境较为危险时也不方便进行人工操作,导致越来越难以满足变电站的需求。智能机器人巡检系统通过有效的表计识别与读数算法,可以快速完成表计识别与读数,而且能适应各种危险环境,不仅节省了大量人力物力,也大大提高了变电站工作效率。表计识别一般基于深度学习框架,通过大量样本训练从而完成分类识别,而表计读数算法则大多基于hough检测[2-4],一般分为三个步骤:指针区域提取、指针定位和指针读数[5],表计识别与读数都需要进行复杂运算,对设备性能要求较高。传统的表计识别与读数系统大多都是基于计算机等大型设备实现的,识别与读数准确率较高但体积庞大,一般无法用于移动巡检系统实现实时检测。针对此问题,本文提出了基于tx1嵌入式系统的表计识别与读数系统,该嵌入式系统不仅搭配了四核cpu还搭载了专用于图像处理的gpu,能够快速运行深度学习框架完成表计识别,高效进行图像处理完成表计读数,且体积不过平板大小,方便嵌入到智能机器人巡检系统中,跟随机器人巡检过程,完成实时视频流的采集和表计识别与读数工作。该系统较传统表计识别与读数系统缩小了体积,提高了表计识别与读数的效率与精度。

[1]涂刚,阳富民,胡贯荣.嵌入式操作系统综述[j].计算机应用研究,2000,17(11).

[2]haozl,chenxh,hujq,etal.opencv-basedautomaticdetectionsystemforautomobilemeter[j].appliedmechanicsandmaterials,2014,615:149-152.

[3]zhangz,cheng,lij,etal.theresearchondigitrecognitionalgorithmforautomaticmeterreadingsystem[c]//intelligentcontrol&automation.ieee,2010.

[4]jianlongg,liangg,yaoyulv,etal.pointermeterreadingmethodbasedonimprovedorbandhoughalgorithm[j].computerengineeringandapplications,2018.

[5]许丽,石伟,方甜.巡检机器人中的指针式仪表读数识别系统[j].仪器仪表学报,2017(7).



技术实现要素:

为克服现有技术的不足,针对传统表计识别与读数系统体积过大不易应用于变电站机器人巡检的问题,本发明旨在提出一种基于tx1的表计识别与读数系统,通过将表计识别与读数算法集成到tx1嵌入式系统上,利用其四核cpu及高效的gpu对变电站表计进行识别与读数,进而满足缩小体积搭载到变电站智能巡检机器人系统的需求。为此,本发明采取的技术方案是如下:

一种基于嵌入式的表计识别与读数系统,包括下列步骤:

(1)视频流的采集

视频流通过车载摄像头在机器人巡检过程中调用rtsp协议,采集变电站实时视频流;

(2)表计雾浓度等级判别

对表计的雾浓度等级进行预判,当判别雾的浓度能够达到相应要求后进行下一步的表记识别与读数。

(3)表计识别

tx1搭载有gpu模块,通过gpu调用yolo深度学习框架;yolo通过采集的表计图片集,训练生成权重文件和配置文件,修改yolo中的detector.c函数,使之在载入一次必须的权重文件和配置文件后,不再重复载入,而是循环检测图片;

(4)表计读数与数据备份

表计读数需要静止的表计图像与相应的表计区域,通过yolo判断表计坐标是否无明显变化以确定机器人是否已经静止,然后采集图像并根据采集到的图像及检测到的表计种类、坐标信息,确定相应的表计区域,划定表计区域后校准基准线,提取表针,计算表针偏转角度,并根据表计种类确定表计读数范围,从而根据偏转角度与相应读数范围进行表计读数;表计读数完成后需要定时将采集到的表计图像、表计种类、表计坐标、表计读数信息传输回主机端进行数据备份。

本发明通过将表计识别与读数算法整合到tx1系统上,提出了一种新的应用于变电站表计实时识别与读数的小体积嵌入式系统,解决了传统表计识别与读数系统体积过大无法应用于实时巡检系统的问题,为变电站智能巡检机器人进行表计识别与读数提供了新方法。

附图说明

图1:系统设计思路流程图。

图2:表计识别实时显示图像。

图3:表计读数图像。

图中:图a为表计图像;图b为表针提取图像;图c为读数结果

图4:数据传输图像。

图中:图a为客户端;图b为服务端。

具体实施方式

目前传统的表计识别与读数系统大多是基于计算机等大型设备,通过计算机强大的计算能力与图像处理能力进行表计识别与读数,但是由于体积巨大无法与车载系统或智能机器人结合起来,使得只能实现单幅图像或固定视角的视频流检测,无法应用于变电站巡检机器人进行实时表计识别与读数。

针对传统表计识别与读数系统体积过大的问题,本文提出了一种嵌入式系统。该系统包括四个步骤:首先利用智能机器人的车载摄像头调用rtsp协议采集变电站实时视频流,其次判断表计雾浓度等级是否满足识别与读数要求,然后调用yolo深度学习框架进行表计识别,最后进行表计读数并利用wifi模块将数据传回主机端备份。

为将本发明的技术方案描述得更加清楚,对本发明的具体实施过程做如下的进一步地描述。本发明按以下步骤具体实现:

(1)视频流的采集

由于处理模块最终是要对图像矩阵进行处理,因此采集回的视频流要先转换成图像矩阵才能进行下一步操作。而rtsp协议族具有可以控制到视频帧的优点,因此采集视频流最终使用了opencv+ffmpeg调用rtsp视频流的方法。此方法采集回的视频流由一帧一帧的图像组成,这使得tx1可以直接调用opencv库函数对每一帧进行处理,简单方便,大大提高了系统的效率。tx1具有四核cpu,4g运存以及8g交换内存,因此可开辟多线程进行各种处理。如开辟单独子线程进行视频流采集,再开辟单独线程进行视频显示。这样不仅合理利用了tx1的各种杰出性能,而且大大加快了运行速度。图像采集模块主要负责采集视频流并将采集到的视频流传输给处理模块,这就要求采集模块既要具备采集功能又要具备传输功能。车载摄像头为一般网络摄像头,具有以太网接口,而tx1同样具有以太网接口,因此可通过网线直连图像采集模块,支持10/100/1000mbps以太网,速度快,接收到的视频流能达到60fps。

(2)表计雾浓度等级判别

由于天气的影响,空气或表盘上会发生结雾现象,这对表计读数造成了很大的影响。而且不同的雾浓度对表计识别与读数的影响也不同。例如当雾浓度很小时,对表计识别与读数几乎没有影响,与无雾条件几乎相同,此时可直接进行表计识别与读数,而无需进行其他处理;当雾浓度适中时,一些表计能够进行准确地识别与读数,一些表计识别与读数的结果则不再准确,此时就需要对图像进行一定的去雾处理;当雾浓度很大时,将完全无法进行表计识别与读数,即使加入去雾算法也毫无作用。因此,这就要求系统首先要对采集到的图像进行雾浓度等级判别,然后根据不同的雾浓度等级采取不同的处理方法。考虑到即使相同的雾浓度不同的表计占屏比也会对读数造成不同的影响,因此在雾浓度等级判别时还要考虑距离的影响。当判别雾的浓度能够达到相应要求后进行下一步的表记识别与读数。

(3)表计识别与显示

表计识别模块采用darknet即yolo,因为darknet是一个较为轻型的完全基于c与cuda的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(opencv都可以不用),移植性非常好,支持cpu与gpu两种计算方式,而且实现快速检测的同时还能达到较高的识别率。gpu的cuda多线程并发处理,cpu的四核并行运行,使得tx1能在短时间内完成大量计算,大大加快了图像处理速度。而且充足的运算内存使得tx1可嵌入yolo深度学习框架,完成表计实时检测,大大提高了系统的灵活性。而且tx1体积很小,总体不超过平板大小,这使得其能搭载到各种车载系统,应用范围更广。

yolo通过采集的表计图片集,自己训练生成权重文件(.weights文件)和配置文件(.cfg文件)。针对视频检测或摄像头视频流实时检测,yolo给出一个demo函数,但是此demo对硬件性能要求较高,因此tx1直接运行demo会非常卡顿,因此无法直接使用yolo进行实时检测,最终修改yolo源码进行检测。yolo给出的demo对每一帧进行检测时都会载入一次权重文件和配置文件,这使得运行效率大大降低。修改yolo中的detector.c函数,使之在载入一次必须的权重文件和配置文件后,不再重复载入,而是循环检测图片,这样最终达到每张图片检测完毕只需要400-500ms。即使如此,如果每一帧均处理一次也会有很大的延迟感,应该处理完一帧再传入一帧,然后把box的坐标传回主函数,也不能使用yolo的显示函数,而是在主函数显示前按照传回的box坐标在每一帧上画框,并把识别出的种类字符串传回主函数,一并写入到在每一帧上,这样就能实现实时检测实时显示。

表记识别后要进行实时显示,tx1具有hdmi音频/视频接口、wifi模块。因此显示模块可采用hdmi线直接连接高清屏幕,也可采用平板,手机等移动设备通过接入同一局域网,进而连接tx1进行显示。这使得整个系统更加灵活、易控。

由于qt具有简单易操作和可移植性好等优点,界面最终采用qt进行设计。新建qtwidgetsapplication工程,由于qt自带的ui编辑器局限性太大,因此最终选择自己写代码实现界面。界面由时间部分、主体显示部分以及功能按键部分组成。时间部分显示当前时间。主体显示部分右侧显示表计识别实时视频流,并在下面label内实时显示表计识别框的坐标与表计类别;左侧可显示抓取的某一帧图像,下方label显示抓取到的图像中表计坐标,类别及读数等信息;当系统静止1-2s时,系统会抓取一帧保存并在左侧显示,并在label内显示此图像内表计的一些信息。功能按键部分共有四个按键。camera按键用来开启摄像头,开始视频流采集与表计实时检测;grab按键用来抓取一帧图片并在左侧显示,grab抓帧后左侧显示框在系统静止1-2s时暂停抓取图片;reimgshow按键用来在grab抓帧之后,重置左侧显示框,使之能够重新在系统静止1-2s时抓帧并进行显示;shutdown按键为关机按键,用来关闭tx1。

(4)表计读数与数据备份

表计读数需要静态的表计图像,因此当智能机器人巡检到表计位置时,首先静止1-2s,利用yolo算法对检测到的表计坐标进行判断,当坐标变化小于一定阈值时,即可认为此时系统处于静止状态。将系统静止时采集到的表计图像、yolo识别到的表计坐标以及表计种类等相关信息传输到表计读数算法,表计读数算法根据表计坐标对表计图像进行裁剪以保证表计足够的占屏比,使得读数更加方便准确。然后提取表针区域,为了去除光照等因素的影响,增强算法的鲁棒性,提取表针区域之前需要进行去噪处理。成功提取表针区域后基于hough算法提取出表计表针,对比基准点计算出表针偏转的角度,根据表计的种类确定表计的读数范围,依照表计的读数范围将表针与基准点的偏转角度与表盘刻度拟合,即可得到相应的表计读数。

获得图片,box坐标、表计类别及标记读数等信息后,需要把这些信息传输回主机备份或进行下一步处理。传输模块采用的是tx1的wifi模块,采用tcp/ip协议传输。这是由于车载系统一直在移动,而主机固定不动,因此系统和主机不可能通过物理布线连接,故而只能采用无线传输。tx1自带wifi模块,可进行wifi网络连接,因此只要车载系统和主机处于同一局域网内,就可以采用tcp/ip协议进行无线传输。具体实现方法采用的是socket套接字来实现。socket()函数包含三个参数。其中af参数是一个地址描述。目前仅支持af_inet格式,也就是说arpainternet地址格式。type参数用来指定socket类型,常用的socket类型有,sock_stream、sock_dgram、等等。protocol参数,顾名思义,就是指定协议。套接口所用的协议。如调用者不想指定,可用0。常用的协议有ipproto_tcp、ipproto_udp、ipproto_stcp、ipproto_tipc等,它们分别对应tcp传输协议、udp传输协议、stcp传输协议、tipc传输协议。在此我们type参数选择sock_stream,protocol参数默认即自动选择tcp协议。

传输部分又分为客户端和服务端,本系统要实现的是tx1向主机传输,因此tx1做客户端,主机做服务端。首先分别在服务器及客户端使用socket()函数创建套接字,并使用bind()函数进行套接字绑定,接下来服务器端需要调用listen()函数进入监听阶段,监听客户端是否发出连接请求,而客户端调用connect()函数发出连接请求,此时服务器端接到客户端的连接请求后再调用accept()函数接受连接。这样建立起可靠连接,保证传输质量与稳定性。在传输文件时,需要调用fopen()、fread()、fwrite()等文件操作函数,以二进制形式分别对文件进行打开、读、写等操作。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1