一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种嵌入式仪表码盘字符自动识别系统及方法与流程

2022-02-20 15:44:57 来源:中国专利 TAG:


1.本发明涉及机器视觉和深度学习领域中的仪表码盘字符识别,尤其涉及一种嵌入式仪表码盘字符自动识别系统,本发明还涉及一种嵌入式仪表码盘字符自动识别方法。


背景技术:

2.随着科技的快速发展,人类生活向着智能化、自动化发展,机器视觉作为人工智能正在快速发展的一个分支,该机器视觉是通过视觉传感器进行图像采集,并在获取之后由图像处理系统进行图像处理和识别。
3.同时图像识别技术也得到了大力发展,并应用于各个领域。车牌识别、人脸识别、二维码识别等已进入人们的生活。利用图像识别技术进行水位监测符合当今社会的发展趋势。由于整个监测过程不需要人工参与,所以可以实现对水位数据的实时监测。
4.为了解决传统人工水表读数难的问题,目前普遍采用以pc为中心的仪表视觉检测系统,虽然该检测系统在一定程度上减轻了人工读数的负担,但存在着如体积大、成本高、不易快速部署和使用等缺点。而如何将水位数据监测与图像识别技术结合,并集成到低功耗、体积小、使用方便的嵌入式设备中,是需要解决的一个技术问题。
5.其次,现有的对仪表码盘字符定位和数字识别方法仍然存在很多问题。例如基于字符分割和模板匹配的识别方法,无法有效应对倾斜图像,同时要求输入图像清晰度高,此方法受环境噪声影响较大。另外,目前很多高精度数字式仪表也会存在半字符识别问题,这也大大增加了字符识别难度,而如何对字符进行训练及识别,也是亟需解决的一个技术问题
6.再者,在水位监测环境中使用嵌入式图像识别装置时,常规图像识别模型大且复杂难以被部署和应用,因此选择一种小而高效的图像识别模型至关重要。


技术实现要素:

7.发明目的:本发明提供一种嵌入式仪表码盘字符自动识别系统及方法,通过自动读取现有码盘式仪表的字符,实现仪表字符的自动识别;同时考虑了当前水位数据监测的实际需求,将水位数据监测与图像识别技术结合,并集成到运算资源受限、低功耗、体积小、使用方便的嵌入式设备中。
8.技术方案:为实现上述目的,本发明的嵌入式仪表码盘字符自动识别系统,包括嵌入式微型处理器、图像传感器、摄像头模块、ttl-usb转串口模块、存储模块和供电模块。
9.本发明嵌入式仪表码盘字符读数自动识别方法包括如下步骤:
10.(1)样本数据集的获取:将摄像头模块架设在仪表码盘上方,仪表码盘和摄像头的夹角为90
°
,采用摄像头模块拍摄不同倾斜角度和光照条件仪表码盘图像,将拍摄到的仪表码盘图像经过倾斜校正后对码盘字符区域精准定位,并分割出单个码盘字符,将得到的单个码盘字符进行图像尺寸归一化,利用数据增强算法对图像数据进行移位处理,得到整字符及双半字符样本数据集,扩增样本数据集,将整字符及双半字符样本数据集分为样本训
练集和样本验证集;
11.(2)模型的构建及训练:搭建深度学习框架,在深度学习框架下构建轻量级卷积神经网络模型,将步骤(1)中获取的样本训练数据集输入轻量级卷积神经网络中进行训练;
12.(3)模型的量化及部署:将训练好的神经网络模型文件经过全整型量化后通过模型转换工具转化成tflite模型文件,将tflite模型文件加载到嵌入式机器视觉系统的内存中,进行对模型的部署;
13.(4)字符识别结果显示:将摄像头模块架设在仪表码盘上方,首先对拍摄到的码盘图像按照步骤(1)中的图像倾斜校正、字符定位分割方法进行一次配准操作,即定位出单个字符区域;调用神经网络模型,对区域内的单个字符进行分类识别,将识别结果在pc端显示。
14.步骤(1)中码盘图像倾斜校正方法为:
15.(1.1)首先采用摄像头模块拍摄不同倾斜角度和不同光照条件下的仪表码盘图像;
16.(1.2)对图像进行二维平面坐标下的倾斜校正,首先对码盘图像利用霍夫直线检测算法将图像中的直线提取出来,先把直角坐标系的目标点映射到极坐标系上进行累积,图像空间中每个像素点,经过变换公式得到一条在参数空间中的曲线,同一条直线上的点在参数空间中的变换曲线相交于一点。在参数空间里统计每个位置上曲线相交次数,相交次数最多的位置(x,y)在还原后的图中也就是最长的一条直线,这一点的极坐标θ就是图像的倾斜角度值;
17.求出图像的起始点坐标,以及图像宽w和高h,根据上面的方法利用霍夫直线检测算法检测出仪表码盘图像区域的直线,得出图像倾斜角度θ后,利用以下公式对图像中的每一点的坐标都进行旋转,即得到旋转后的图像;
[0018][0019]
其中,x,y为原图像中的点坐标,x1,y1为旋转后图像中的点坐标。
[0020]
步骤(1)中码盘字符定位分割方法为:
[0021]
对倾斜校正后的图像使用矩形检测算法定位出字符区域,对图像进行自适应阈值二值化处理,采用水平投影法精确定位出仪表码盘字符区域的上下边框,利用垂直投影法定位出码盘字符区域的左右边界以及单个字符的左右边界,对码盘字符区域图像进行分割,得到分割后的单个码盘字符;具体过程为:
[0022]
采用矩形检测算法和投影法来确定仪表码盘字符区域的起止位置,对仪表码盘字符区域进行定位及分割。码盘字符区域接近矩形,先采用矩形检测算法检测出码盘字符的位置,之后利用水平投影法以及垂直投影法定位出字符的确切位置,将图像二值化后做水平投影,从获取的投影直方图上计算出字符的开始(上升点)、结束(下降点)位置以及字符高度(峰宽度)、字符上下边框位置等参数。对峰谷分析,获取一个合理的阈值,分割出字符区域与非字符区域,通过水平投影得到字符区域的上下边框。之后对确定了上下边框的字符区域图像做垂直投影分析,由仪表码盘字符的先验知识知道,仪表码盘上字符有5个,做垂直投影后,得到的直方图会出现有规律的连续跳变。观察直方图的分布情况,选择阈值将各个字符单元分割开。通过垂直投影得到字符区域的起止位置以及每个字符的起止位置。
[0023]
将每一张单个码盘字符图像归一化为像素尺寸,并利用数据增强算法对单个码盘字符图像数据进行水平方向和垂直方向的偏移处理,扩增样本数据,得到整字符及双半字符样本数据集,将整字符及双半字符样本数据集分为样本训练集和样本验证集。
[0024]
步骤(1)中双半字符数据集的采集方法为:
[0025]
码盘字符数值是通过滚轴滚动变化的,并且是0~9的连续变化,为了保证完整地收集到双半字符连续变化的过程,通过模拟滚轴滚动过程,模拟过程如下:将数值相邻的两个完整的字符在保留与码盘同样的字符间隔之后上下拼接到一起,小的在上,大的在下,拼接后的图像尺寸为w*2w,之后做一个与完整码盘字符相同尺寸即w*w的滑动窗口对拼接的图像做分割,就可以得到接近真实场景下的半字符数据。并规定,当上半字符字长大于下半字符字长时,此双半字符图像的标签取上半字符标签,当下半字符字长大于上半字符字长时,此双半字符图像的标签取下半字符标签。对利用拼接方法得到的双半字符样本数据随机做水平和垂直方向的偏移,扩增双半字符样本数据,将得到的双半字符的样本数据集也进行分类。
[0026]
步骤(1)中样本数据集进行图像增强的方法为:
[0027]
考虑到实际应用时,对字符区域定位分割时字符位置存在水平方向和竖直方向的偏移,所以采用imagedatagenerator函数对图像的水平位移以及竖直位移做随机偏移,使得获得的数据集更加符合实际场景的字符特点,提高了网络模型的泛化能力。
[0028]
步骤(2)中模型的构建以及模型的训练过程为:
[0029]
搭建深度学习框架环境,构建所需的网络模型;该网络模型为轻量级卷积神经网络模型mobilenet-v2。其中,模型采用的卷积结构为深度可分离卷积和倒残差结构的结合,倒残差卷积主要分三个部分:pointwise1、depthwise、pointwise2。即先采用1*1的卷积核进行升维操作,提取更多的通道信息;之后采用3*3的卷积核进行逐通道卷积操作;最后再采用1*1的卷积核进行降维操作,获得相应通道的输出。假设输入图像的尺寸为w*w,输入通道数为m,输出通道数为n,则采用3*3的卷积核进行传统卷积操作时的计算量为w*w*m*n*3*3,参数量为3*3*m*n;若采用深度可分离卷积,计算量为w*w*m*3*3 w*w*m*n,参数量为3*3*m m*n;所以采用深度可分离卷积时的计算量和参数量都减少为传统卷积的1/8~1/9。
[0030]
该mobilenet-v2网络结构依次包括1个3*3卷积核的卷积层和17个bottleneck层(每个bottleneck包含两个逐点卷积层和一个深度卷积层)以及1个1*1卷积核的卷积层、1个7*7池化核的avg pool池化层和1个1*1卷积核的卷积层。每个卷积层都包括卷积、batchnormalization和relu6操作,其中,每个bottleneck层中的第二个逐点卷积层以及avg pool池化层后的1*1卷积核的卷积层都不使用relu6激活,而是使用线性函数;最后,mobilenet-v2网络结构采用平均池化和逐点卷积代替全连接层,减少参数数量。
[0031]
模型构建完成,设置mobilenet网络中的两个收缩超参数:宽度因子α(width multiplier)和分辨率因子ρ(resolution multiplier);宽度因子α用来改变所有层的通道数,若引入α,上述采用深度可分离卷积的计算量变为w*w*α*m*3*3 w*w*α*m*α*n,参数量为3*3*α*m α*m*α*n;则参数量和计算量将减少为原来的α2,因此通过改变α的值来改变模型大小。分辨率因子ρ用来改变输入层的分辨率,若引入ρ,模型的参数量不变,计算量变为ρ*w*ρ*w*m*3*3 ρ*w*ρ*w*m*n,减少为原来的ρ2。
[0032]
因此,α小于1时,减小网络的计算量和参数,减小模型大小;ρ小于1,减小网络的计
算量,加快模型运行速度;设置初始学习率和学习率衰减指数以及学习率衰减速度、迭代次数、批量大小、最大步长及其它参数;开始迭代训练,直到精确度达到预设的精确度指标以上,表示训练完成,保存训练好的模型文件。
[0033]
步骤(3)模型的量化及部署包括以下过程:
[0034]
(3.1)通过训练得到float32浮点数的网络模型权重、激活值以及输入输出,采用全整型量化操作将步骤(2)中已经训练好的网络模型的权重、激活值以及输入值均做int8量化,转化为int8定点数,利用模型转换工具将量化后的模型转化为tflite格式;
[0035]
(3.2)将tflite格式的模型文件保存到嵌入式机器视觉系统的内置flash中;
[0036]
(3.3)在嵌入式机器视觉系统的集成开发环境中通过load函数完成固件对模型文件读取,实现对网络模型的调用。
[0037]
步骤(3.1)中的全整型量化操作过程为:
[0038]
首先准备输入数据样本,网络模型以及浮点型权重;
[0039]
对网络进行前向浮点式的推理过程,记录每一层的输入、输出和权重以及激活值的分布范围,并分别统计出每层输入、输出和权重以及的最大和最小极值;
[0040]
根据当前层的输入、输出和权重最大和最小极值对当前层的输入和权重进行int8整型量化,量化的公式为:
[0041][0042]
其中r为浮点数据,q为量化后的整型数据,round()为取整函数,s为定点量化后可表示的最小刻度,z表示0浮点值对应的量化定点值,s和z的求值公式如下:
[0043][0044][0045]rmax
表示浮点数据的最大值,r
min
表示浮点数据的最小值,q
max
表示定点数据的最大值,q
min
表示定点数据的最小值;对于int8量化,[q
min
,q
max
]就是[-128,127];量化后得到当前层的输入输出和权重的定点数据并保存;
[0046]
再对当前层的整型量化输出反量化为浮点型,量化后的q反推求得的浮点值r,若它们超出各自表示的最大范围,则进行截断处理;
[0047]
将得到的浮点型数据输出至下一层,开始根据下一层的输入、输出和权重最大和最小极值对下一层的输入和权重进行int8整型量化,循环此过程直至网络的最后一层;
[0048]
保存完整的全整型的输入输出以及权重激活值,输入数据样本验证量化后的模型性能;
[0049]
其中,对于激活值的量化,将每层的激活值统计出直方图,对不同阈值进行不同的量化分布,通过kl散度公式确定阈值:
[0050][0051]
其中,p表示浮点型数据的分布概率,q表示定点型的分布概率;选取好阈值后再根据量化公式进行量化操作。利用模型转换工具将量化后的模型转化为tflite格式并导出。
[0052]
步骤(4)中实现对字符的识别分类的过程为:
[0053]
(4.1)摄像头模块实时拍摄仪表码盘图像,采用hough直线检测方法判断图像是否
发生倾斜,如果发生倾斜,可由hough直线检测得到图像倾斜角,利用旋转算法进行校正;之后通过矩形检测算法可得到一个粗略的字符区域定位,再采用投影法进一步定位字符区域;定位到单个字符区域后,
[0054]
(4.2)将分割好的多个单个码盘字符按顺序依次调用训练好的神经网络模型和标签文件进行分类识别;
[0055]
(4.3)按顺序把识别结果在pc端显示。
[0056]
有益效果:与现有技术相比,本发明具有以下优点:
[0057]
(1)本发明所采用的卷积神经网络对字符进行训练及识别,抗干扰性能好,识别率高。
[0058]
(2)本发明在对码盘字符识别时不受拍摄位置的限制,可以做到即架即用,对设备资源要求低,识别精度高,使用灵活方便。
[0059]
(3)本发明解决了双半字符识别的问题,实现了码盘字符出现不完整状态时的准确读取。
[0060]
(4)本发明完成了字符识别算法在低运算能力、低功耗的嵌入式设备上的部署,实现了在资源受限、低功耗、使用方便的嵌入式系统上对仪表码盘字符的识别。
附图说明
[0061]
图1是本发明嵌入式仪表码盘字符自动识别方法的流程图;
[0062]
图2是本发明嵌入式仪表码盘字符自动识别系统的设备简图;
[0063]
图3是本发明嵌入式仪表码盘字符自动识别方法中字符区域定位及分割的过程示意图;
[0064]
图4是pointwise1卷积过程图;
[0065]
图5是depthwise卷积过程图;
[0066]
图6是pointwise2卷积过程图;
[0067]
图7是mobilenetv2网络结构表;
[0068]
图8是本发明嵌入式仪表码盘字符自动识别系统的嵌入式设备结构图。
具体实施方式
[0069]
实施例1:
[0070]
本发明嵌入式仪表码盘字符自动识别系统包括嵌入式微型处理器、图像传感器、摄像头模块、ttl-usb转串口模块、存储模块和供电模块。
[0071]
本实施例中,该嵌入式微型处理器为stm32h743ii arm cortex m7为内核的电路板,有休眠模式,运行高效且低功耗。
[0072]
图像传感器为ov5640的cmos类型数字图像传感器,嵌入式微型处理器通过dcmi总线接口与ov5640摄像头dvp接口连接,通过iic总线与ov5640 sccb配置端口连接,并通过gpio连接控制摄像头端的reset和powerdown管脚。
[0073]
摄像头模块采用2.8mm焦距镜头,该镜头安装在一个标准m12镜头底座上。
[0074]
ttl-usb转串口模块通过uart串口与嵌入式微型处理器连接,并通过usb接口与上位机连接。
[0075]
存储模块为外置sd卡存储器,嵌入式微型处理器拥有32mb外置的32-bit sdram和32mb外置的quad spi flash,当内存不够用时通过外置sd卡存储器存储数据。
[0076]
供电模块采用3.7v锂离子电池,通过ph2.0电池接口将3.7v锂离子电池与嵌入式微型处理器连接,采用此模块供电时实现脱机运行。
[0077]
如图1至图8所示,本发明仪表码盘字符自动识别方法包括以下步骤:
[0078]
(1)将摄像头模块架设在仪表码盘上方,通过摄像头模块采集不同角度下的仪表码盘图像,仪表码盘和摄像头之间的夹角为90
°
,对图像水平倾斜校正后定位出码盘字符区域,再对码盘字符区域进行单个字符的分割,之后对分割好的字符图像的尺寸做归一化处理并进行标记,由此获取到用于模型训练的样本数据集;将样本数据集分为二十个分类并按比例分为样本训练集和样本验证集;
[0079]
(2)在tensorflow框架下构建mobilenetv2神经网络模型,将步骤(1)所获取的样本数据集输入mobilenetv2神经网络中进行训练;
[0080]
(3)对训练好的mobilenetv2神经网络模型进行全整型量化,将量化后的网络模型通过tensorflow lite转换成tflite文件并部署到嵌入式机器视觉系统中;利用load函数实现固件对模型文件的读取,完成对模型的调用;
[0081]
(4)将摄像头模块架设在仪表码盘上方,仪表码盘和摄像头之间的夹角为90
°
,首先对拍摄到的码盘图像按照步骤(1)中的图像倾斜校正、字符定位分割方法进行一次配准操作,即定位出单个字符区域;调用网络模型,对区域内的单个字符进行分类识别,将识别结果在pc端显示。
[0082]
本实施例中以某水位计码盘为例,将上述方法进行实例应用,具体如下:
[0083]
(1)将摄像头模块架设在水位计码盘上方,仪表码盘和摄像头之间的夹角为90
°
,实时对水位计码盘进行拍摄。利用霍夫hough直线检测获取图像的倾斜角,进而利用旋转算法对图片进行倾斜校正。对图像倾斜校正的过程具体如下:
[0084]
1)对图像进行边缘检测;
[0085]
2)对边缘二值化图像进行霍夫空间变换;
[0086]
3)完成霍夫空间变换后,找到参数空间点集的极大值点,该点还原到图像空间就是一条直线且是最长的,此点对应的极坐标值θ就是图像的倾斜角;
[0087]
4)检测出图像倾斜角后对图像进行几何变换,首先做空间坐标变换,即通过图像矩阵乘以旋转矩阵完成旋转变换;求出图像的起始点坐标,以及图像宽w和高h,图像倾斜角度θ,利用以下公式对图像中的每一点的坐标进行旋转,即得到旋转后的图像;
[0088][0089]
其中,x,y为原图像中的点坐标,x1,y1为旋转后图像中的点坐标。
[0090]
5)由于对图像做空间坐标变换之后的坐标存在小数,而图像是离散的,因此采用插值运算来填充空洞。
[0091]
对图形进行倾斜校正之后,采用矩形检测算法先确定仪表码盘字符区域大致位置,之后采用水平投影法确定仪表码盘字符区域的上下边框,采用垂直投影法确定仪表码盘字符区域的起止位置以及每个码盘字符的起止位置,选择阈值将各个字符单元分割开。对图像中字符区域定位及字符分割的过程具体包括以下步骤:
[0092]
1)由于大多仪表码盘字符区域类似于矩形,所以先通过矩形检测算法框出码盘字符区域;
[0093]
2)对图像做自适应阈值二值化处理,对字符区域做水平方向投影,统计二值图像中像素为1的像素点的个数,得到直方图,分析直方图,计算出矩形区域内字符的最大高度,确定字符区域的上下边界。
[0094]
3)对字符区域做作垂直方向投影,统计二值图像中像素为1的像素点的个数,获得直方图,分析直方图,计算出字符间的最大中心距,确定分割阈值的选取间距(字符分割宽度)。分割出单个字符以后,将分割好的字符图像尺寸归一化为128*128,对于整字符图像,直接使用数据增强算法对图像做水平方向和垂直方向的偏移处理。为了获得连续变化的双半字符样本数据集,采用将两张相邻的经过归一化处理之后的单个完整的码盘字符按照数值下大上小的顺序进行拼接,两个码盘字符之间的间距要还原真实场景下的间距,小的在上,大的在下,取一个随机数t,为了区分整字符,t的取值范围为[0.1,0.9],从拼接图像上截取纵坐标从t*w到(1 t)*w的部分,由此得到一个w*w的双半字符图像;并规定,当t取[0.1,0.5]时,此双半字符图像的标签取上半字符标签,当t取[0.5,0.9]时,此双半字符图像的标签取下半字符标签。
[0095]
本实施例中,拼接后的图像尺寸为128*256,取一个随机数t,为了区分整字符,t的取值范围为[0.1,0.9],从拼接图像上截取纵坐标从t*128到(1 t)*128的部分,由此得到一个128*128的双半字符图像;并规定,当t取[0.1,0.5]时,此双半字符图像的标签取上半字符标签,当t取[0.5,0.9]时,此双半字符图像的标签取下半字符标签。拼接后对双半字符图像也使用数据增强算法对图像做水平方向和垂直方向的偏移处理,扩增数据集。
[0096]
(2)搭建tensorflow框架,并安装一些常用库;将整字符数据集做十个分类,同样将双半字符数据集也做十个分类,整个数据集一共是二十个分类,将数据集按照9:1的比例分为训练集和验证集;构建mobilenetv2网络,设置mobilenetv2网络中的两个收缩超参数:宽度因子α和分辨率因子ρ,设置α为0.25,ρ为0.35,初始学习率为0.1,设置学习率衰减指数和学习率衰减速度、迭代次数和批次大小,开始进行迭代训练。
[0097]
(3)将训练好的模型经过测试后保存为包含图模型文件(graphdef)和变量文件(checkpoint)的模型文件包后导出;用bazel编译tensorflow源码,编译成功后固化模型结构,将计算图中的变量取值以常量的形式保存,保存格式为pb格式;利用tensorflow的toco工具,对模型的权重、激活值和输入值做int8量化,并将pb格式模型文件最终转换为tflite格式模型文件;测试tflite格式模型文件之后将其加载到嵌入式机器视觉系统的内置flash中,以便实现在嵌入式机器视觉系统端对模型的调用。其中,模型量化的具体执行步骤如下:
[0098]
首先准备输入数据样本,网络模型以及浮点型权重;
[0099]
对网络进行前向浮点式的推理过程,记录每一层的输入、权重以及激活值的分布范围,并分别统计出每层输入、权重的最大和最小极值;
[0100]
根据当前层的输入和权重最大和最小极值对当前层的输入和权重进行int8整型量化,量化的公式为:
[0101]
[0102]
其中r为浮点数据,q为量化后的整型数据,round()为取整函数,s为定点量化后可表示的最小刻度,z表示0浮点值对应的量化定点值,s和z的求值公式如下:
[0103][0104][0105]rmax
表示浮点数据的最大值,r
min
表示浮点数据的最小值,q
max
表示定点数据的最大值,q
min
表示定点数据的最小值;对于int8量化,[q
min
,q
max
]为[-128,127];量化后得到当前层的输入输出和权重的定点数据并保存;
[0106]
再对当前层的整型量化输出反量化为浮点型,量化后的q反推求得的浮点值r,若它们超出各自表示的最大范围,则进行截断处理;
[0107]
将得到的浮点型数据输出至下一层,开始根据下一层的输入、输出和权重最大和最小极值对下一层的输入和权重进行int8整型量化,循环此过程直至网络的最后一层;
[0108]
保存完整的全整型的输入输出以及权重激活值,输入数据样本验证量化后的模型性能;
[0109]
其中,对于激活值的量化,将每层的激活值统计出直方图,对不同阈值进行不同的量化分布,通过kl散度公式确定阈值:
[0110][0111]
其中,p表示浮点型数据的概率分布,q表示定点型数据的概率分布;选取好阈值后再根据量化公式进行量化操作;p[i]表示浮点型数据的概率值;q[i]表示定点型数据的概率值。
[0112]
(4)通过摄像头模块实时拍摄仪表码盘图像,首先调用集成好的霍夫hough直线检测以及矩形检测算法、水平垂直投影法定位出单个字符的字符区域;调用神经网络模型循环对单个字符区域的字符分类识别,并按顺序将识别结果在pc端显示。
[0113]
表1 bottleneck结构图
[0114]
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献