java 水表识别_一种水表数字的AI智能识别方法与流程

22556c06d2d58545cacf8678f56ed178.gif

本发明涉及模式识别与人工智能技术领域,特别涉及一种直观的水表数字的AI智能识别方法。

背景技术:

深度学习在目标检测的应用发展迅速,在YOLO(You Only Look Once)之后又出现了升级版本YOLOv2,采用的是Darknet-19作为基础网络,它并不是通过加深或加宽网络达到效果提升,反而简化了网络,不管是在召回率还是定位上都有明显优势,我们的水表数字识别就是基于YOLOv2实现的。

目前,有很多涉及模式识别与人工智能相结合的技术出现,特别是被应用于图像数据检测。现有技术中的基于YOLO的图像数据检测,其主要的检测分析过程是基于图片的识别和分析,最终得到的分析结果是带有准确率表示的图片,需要使用者再去根据准确率进行判定,或者呈现给使用者的就是系统分析出来的准确率最高的图片,需要使用者对图片进行分析,不仅不能完全实现智能化识别,而且识别检测的过程繁琐复杂,会逐渐被新的网络所取代,不能适应网络升级的需求。

技术实现要素:

本发明是针对背景技术中提及的有关现有图像识别检测方法的缺陷,提供一种简化网络、精准度高、人工智能化高的水表数据识别方法。

为实现上述目的,本发明所采用的技术方案是:一种水表数字的AI智能识别方法,所述识别方法采用的是Darknet-19作为基础网络,基于YOLOv2实现,具体包括以下步骤:

S1、数据来源:用安装在水表上的摄像头对不同类型的水表进行拍照,并对获取的大量水表图片像素进行批量处理;

S2、数据标注及格式转换:使用标注软件对水表图片进行标注,将标注并转换好的内容存于txt文件中,并将水表图片和对应的txt文件放在同一个文件夹下,最后将水表图片的路径分为训练集和测试集存放到txt文件中;

S3、新建.names文件:里面写入0-9这十个水表数字,每个数字占一行;

S4、新建.data文件:从上到下依次为水表数字的类别数量,训练集路径,测试集路径,.names文件路径和训练好的模型存放路径;

S5、修改.cfg配置文件;

S6、训练模型:将训练数据和标注并转换好的txt文件输入到YOLOv2网络中进行训练;

S7、测试模型:使用训练集以外的数据输入到训练好的网络中进行测试,训练模型对水表上的每一个数字进行识别,将测试的数据上识别出的每一个数字用红色的方框框出来,并在每个红色方框内显示识别结果;

S8、模型中每个方框内的数字最终以连续阿拉伯数字组合的形式呈现于使用界面上。

作为优选的技术方案:步骤S2中对数据进行标注时:使用标注软件对摄像机获取的水表图片进行标注,水表上的每一个数字都要进行单独标注,标注后的边框坐标、边框宽高以及对应的水表数字都将存于txt文件中,并分别用逗号隔开。

作为优选的技术方案:步骤S1中,对水表图片的像素进行批量处理,统一将宽的像素修改为750。

作为优选的技术方案:步骤S2中进行数据格式转换时:将标注好的txt文件里的内容转换成用于训练的数据格式,并将水表图片和对应的txt文件放在同一个文件夹下,最后将水表图片的路径分为训练集(42034张水表图片)和测试集(10508张水表图片)存放到txt文件夹;其中,训练集占所有数据集的80%,测试集占所有数据集的20%。

作为优选的技术方案:步骤S6中修改.cfg配置文件的具体方式是:水表数字是由0-9组成,一共10种数字;类别数classes改为10,同时filters也要按照filters=(classes+coords+1)*num改成75,其中coords=4,num=5。

作为优选的技术方案:步骤S7的模型训练中:将训练数据和标注并转换好的txt文件输入到YOLOv2网络中进行训练;

(1)训练参数设定:迭代次数iters=155000,更新步长steps= 100,25000,35000,45000,初始学习率learning_rate=0.0001,scales= 10,.1,.1,.01,batch=64,subdivisions=8,decay=0.0005;

(2)YOLOv2使用Darknet-19网络,有19个卷积层和5个最大池化层,最后用average pooling层代替全连接层进行预测;

(3)在YOLOv2中,BN层对网络每一层的输入都做了归一化;

(4)YOLOv2采用了anchor boxes去预测bounding boxes,将原网络的全连接层和最后一个pooling层去掉,网络仅采用了卷积层和池化层;

(5)采用Softmax损失函数;

(6)YOLOv2预训练分类模型采用了448x448的输入来finetune分类网络这一中间过程;

(7)YOLOv2采用不同尺寸的图片训练;

(8)YOLOv2中提出了WordTree,使用该树形结构成功的解决了不同数据集中的排斥问题。

作为优选的技术方案:步骤(7)中,YOLOv2采用了多尺度输入训练策略,具体做法是每经过10批训练(10 batches)就会随机选择新的图片尺寸,尺度定义为32的倍数,( 320,352,…,608 )。

本发明所公开的这种图像识别检测方法,其中的水表数字识别基于YOLOv2实现的,采用的是Darknet-19作为基础网络,它并不是通过加深或加宽网络达到效果提升,反而简化了网络,不管是在召回率还是定位上都有明显优势;精准度高,最终能够连续阿拉伯数字组合的形式呈现于使用界面上,实现完全人工智能化,无需使用者分析猜测,直观、方便。

附图说明

图1为本发明水表识别方法的流程图;

图2为本发明的数据采集和处理流程图;

图3发明的深度卷积神经网络结构图;

图4发明检测结果示例。

具体实施方式

下面结合附图和实施例对本发明做进一步说明。

结合附图1-4,本发明所公开的这种图像检测识别方法主要应用于水表数据检测,其识别方法采用的是Darknet-19作为基础网络,基于YOLOv2实现。

水表数字识别的实现步骤如下。

1.数据来源:用安装在水表上的摄像头对不同类型的水表进行拍照,大量的拍照,照片数量50000-60000张左右,对获取的大量水表图片像素进行批量处理,统一将水表图片的宽的像素修改为750。

2.数据标注和格式转换:使用标注软件对水表图片进行标注,每一个水表数字都要单独标注,标注后的边框坐标、边框宽高以及对应的水表数字都将存于txt文件中,并分别用逗号隔开。将标注好的txt文件里的内容转换成用于训练的数据格式,并将水表图片和对应的txt文件放在同一个文件夹下,最后将水表图片的路径分为训练集(42034张)和测试集(10508张)存放到txt文件夹,其中,训练集占所有数据集的80%,测试集占所有数据集的20%。

3.新建.names文件:里面写入0-9这十个水表数字,每个数字占一行。

4.新建.data文件:从上到下依次为水表数字的类别数量,训练集路径,测试集路径,.names文件路径和训练好的模型存放路径。

5.修改.cfg配置文件:水表数字是由0-9组成的,一共10种数字,所以类别数classes改为10,同时filters也要按照filters=(classes+coords+1)*num改成75,其中coords=4,num=5。

6.训练模型:将训练数据和标注并转换好的txt文件输入到YOLOv2网络中进行训练;

(1)训练参数设定:迭代次数iters=155000,更新步长steps= 100,25000,35000,45000,初始学习率learning_rate=0.0001,scales= 10,.1,.1,.01,batch=64,subdivisions=8,decay=0.0005;

(2)YOLOv2使用Darknet-19网络,有19个卷积层和5个最大池化层,最后用average pooling层代替全连接层进行预测,精简了网络;

(3)在YOLOv2中,BN(Batch Normalization)层对网络每一层的输入都做了归一化,在训练时收敛更快,降低模型的过拟合,另外BN可以规范模型,所以去掉了dropout层,BN层的添加直接将mAP提升了2个百分点;

(4)YOLOv2采用了anchor boxes去预测bounding boxes,将原网络的全连接层和最后一个pooling层去掉,网络仅采用了卷积层和池化层。由于大的object一般会占据图像的中心,为了使得每个特征图在划分cell的时候就只有一个center cell,用416*416大小的输入代替原来448*448,这样可以得到奇数大小宽高的特征图。 YOLOv2采用k-means的方式对训练集的bounding boxes做聚类,选用的K值为5,试图找到合适的anchor box,引入的anchor boxes使得预测的box数量超过1千,box的数量越多,目标的定位准确率越高;

(5)采用Softmax损失函数;

(6)YOLOv2预训练分类模型采用了448x448的输入来finetune分类网络这一中间过程,这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入;

(7)YOLOv2可以采用不同尺寸的图片训练,提高鲁棒性。由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416x416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体做法是每经过10批训练(10 batches)就会随机选择新的图片尺寸,尺度定义为32的倍数,( 320,352,…,608 );

(8)YOLOv2中提出了WordTree,使用该树形结构成功的解决了不同数据集中的排斥问题。使用该树形结构进行分层的预测分类,在某个阈值处结束或者最终达到叶子节点处结束。

7.测试模型:使用训练集以外的数据输入到训练好的网络中进行测试,对水表上的每一个数字进行识别,不管是完整的数字还是不完整的数字,该网络都能识别,对测试数据上识别出的每一个数字用红色的方框框出来,并在每个红色方框内显示识别结果,下方文本框会依次显示类别名称在.names文件中的索引,准确率和框坐标。

在训练网络的过程中会产生多个模型,所以我们会在测试模型阶段根据识别准确率挑选出识别效果最好的一个作为最终应用的模型。

经过测试合格,选定模型之后,进行识别时呈现在用户使用界面上的是数字,即模型识别水表图像时被分别框出来的每个阿拉伯数字的组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql.w002_mysql简单例子

登陆数据库:mysql -u用户名 -p密码 -P端口 -h数据库地址‍‍‍‍‍‍修改mysql提示符:(仅本次连接有效)‍‍‍‍‍‍方法一:执行mysql -uroot -proot -prompt \h结果为:localhost方法二:进入mysql后,执行PR…

JQuery中的Deferred-详解和使用

首先,为什么要使用Deferred? 先来看一段AJAX的代码: 1 var data; 2 $.get(api/data, function(resp) { 3 data resp.data; 4 }); 5 doSomethingFancyWithData(data); View Code 这段代码极容易出问题,请…

【Eclipse】eclipse在线安装反编译插件

1.help->install new software 2.Add Name:jd-eclipse_update_site Location:http://jd.benow.ca/jd-eclipse/update 3.等待加载出来 4.持续点击下一步,直到完成。 转载于:https://www.cnblogs.com/flydkPocketMagic/p/7170283.html

Spring Boot 系列(一)快速入门

简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应…

1. 在虚拟机中 添加内容

步骤: 1. 找到要添加的内容,按住 ctrl c 复制 ,例如:复制 飞秋 2. 打开 虚拟机,找到 要复制文件的位置。 3. 将 复制的文件添加到 共享文件夹下面。 4. 打开虚拟机,安装飞秋 5, 最后就完成了…

java web scala_spring boot+scala编写web接口

本人是Java开发者,有面向对象的基础,而Scala也是面向对象的语言,学习后可快速入门。通过学习Scala的面向对象(和java面向对象类似)、Scala的高级函数(map,reduce等,和Java8中的stream编程类似)、Scala的隐式转换(在Java中可通过sp…

java小应用_java小应用

第一次使用简书记笔记,主要目的是为了加深印象,方便忘记时及时翻看。hello.java代码如下:import java.applet.Applet;import java.awt.*;public class hello extends Applet{private Font f1;public void init(){f1 new Font("宋体&quo…

java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果

这是一款HTML5 canvas橡皮擦擦拭效果。该效果通过canvas来制作遮罩层和擦拭用的橡皮擦,用户可以通过移动鼠标来移除遮罩层,效果非常炫酷。因为发代码有时会排版混乱,所以先发图演示了。源码已经打包好了,想学习的朋友可以下载练习…

mysql to mssql_MysqlToMsSql

MysqlToMsSql是一款简单易用的数据库迁移工具,这款软件功能强大,可以帮助用户将MySQL数据库内容转移到msSQL数据库中,采用可视化操作,支持预览,方便用户查看数据库,实用性强,有需要的用户快来下…

java延迟覆盖_高效Java第九条覆盖equals时总要覆盖hashCode

原标题:高效Java第九条覆盖equals时总要覆盖hashCode高效Java第九条覆盖equals时总要覆盖hashCode在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。否则会导致该类无法与基于散列的集合一起正常运作。 hashCode约定在应用程序的执行期间&#xff…

原生js简单实现双向数据绑定原理

根据对象的访问器属性去监听对象属性的变化,访问器属性不能直接在对象中设置,而必须通过 defineProperty() 方法单独定义。 访问器属性的"值"比较特殊,读取或设置访问器属性的值,实际上是调用其内部特性:get…

java中write方法报错_Java中管道报错:Write end dead

今天看了下关于管道的通信,Java中的管道只能在同一进程的不同线程间通信。今天测试两个线程进行通信发现报错。下面是我测试的代码。package com.wpl.testIO;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;public …

神盾局特工第四季/全集Agents Of SHIELD迅雷下载

英文全名Agents Of SHIELD,第4季(2016)ABC. 本季看点:《神盾局特工》(Agents Of SHIELD)第三季季终集里,我们终于知道谁死了……但死的不是一个,而是两个。在这两集中,很多角色都遭遇过险境&…

php科学计数法转string,php如何将科学计数法转数字

php将科学计数法转数字的实现方法:首先通过if语句判断指定的数值是否为科学计数法;然后提取科学计数法中有效的数据;接着正式处理该数据;最后调用“convert_scientific_number_to_normal”方法实现转换即可。PHP将科学计数法转换为…

php8vsgo,服务端 I/O 性能:Node、PHP、Java、Go 的对比

原标题:服务端 I/O 性能:Node、PHP、Java、Go 的对比了解应用程序的输入/输出(I/O)模型意味着理解应用程序处理其数据的载入差异,并揭示其在真实环境中表现。或许你的应用程序很小,在不承受很大的负载时,这并不是个严重…

Python day8

阅读目录 为什么要用函数  函数的定义与调用  函数的返回值  函数的参数  本章小结返回顶部为什么要用函数 现在python届发生了一个大事件,len方法突然不能直接用了。。。 然后现在有一个需求,让你计算hello world的长度,你怎么计算&…

java创建对象过七夕,想 new 个对象过七夕,她却抛了异常

原标题:想 new 个对象过七夕,她却抛了异常关注 “”导读:单身之痛......作者 | 轩辕之风来源 | 编程技术宇宙(ID:xuanyuancoding)七夕又到了,单身汪们太难了,每年不仅要经历双十一,要经历2.14&a…

【Redis】解析Redis和Java传递数据

在Java中使用Redis之前需要导入 jedis.jar 包,由于Redis是基于key-value进行数据存储,java中的数据存储到Redis中有许多方式,这里笔者介绍采用JSON字符串和对象序列化两种方式。 1,使用JSON方式 首先将Java对象转化为JSON字符串 …

C#带按钮的文本框TextBoxContainButton

经常需要用到各种组合控件,每次组合太麻烦,通过打包成自定义控件,方便调用。 带按钮的文本框,如下图: 文本框内可以输入文本,响应文本框内容变化事件,按钮可以设置点击事件,图标 通过…

Windows单机配置Zookeeper环境

转自:http://www.jianshu.com/p/f7037105db46 首先要确保机器已经安装好java环境,并且配置好环境变量 http://apache.fayea.com/zookeeper/current/ 下载后,解压缩到硬盘,我这里解压到了 D:\WorkSoftware\zookeeper_3.4.9 解压缩在…