基于DBNetpp的文本检测的仪表盘读数识别

news2025/4/22 8:25:58

一个不知名大学生,江湖人称菜狗
original author: Jacky Li
Email : 3435673055@qq.com

Time of completion:2023.12.31
Last edited: 2023.12.31

祝自己生日快乐啦!!!!

目录

算法设计

(1)基于YOLOv5s的仪表检测

(2)基于YOLOv8x-pose的指针和刻度关键点检测

(3)基于DBNetpp的文本检测

(4)基于SATRN模型的文本识别

(5)读数识别

算法优化

存在问题

改进方法

总结


本次任务的仪表数据集存在以下难点:

1、仪表刻度存在遮挡、模糊等问题,影响OCR识别

2、仪表图像存在旋转、倾斜问题,影响读数测量

算法设计

算法分为4个流程,首先用yolov5s模型从原图中识别出仪,接着用yolov8x-pose模型检测出仪表中的刻度线、指针的关键点,再用DBNetpp模型检测出数值框并用SATRN模型进行文本识别,最后后处理得到读数结果。

(1)基于YOLOv5s的仪表检测

选型理由

Yolov5s网络小,速度快。虽然AP精度低,但检测的是仪表这种大目标是完全够用的。我们采用极市官方提供的yolov5s训练套件进行训练,上手简单,且仪表识别准确率达到了99.7%,效果满足实际需求。

(2)基于YOLOv8x-pose的指针和刻度关键点检测

选型理由

图片

YOLOv8是YOLOv5团队ultralytics在今年开源的SOTA模型,引入了新的改进,进一步提升了性能和灵活性。YOLOv8 设计快速、准确且易于使用,使其成为目标检测、实例分割、图像分类和姿态估计任务的绝佳选择。

yolo-pose是估计人体姿态的一个模型,它将人体姿态分为17个关键点。

为了尽可能地提高关键点检测精度,我们使用了规模最大的YOLOv8x-pose模型。

指针关键点数据集制作

图片

我们将指针的两个点作为其关键点,由这两个点组成的矩形框作为目标检测框,如果两个点组成的矩形框太窄,进行适当延伸。

刻度关键点数据集制作

由于每个仪表的数值框个数不同,我们将每个数值框视为同一个类别进行目标检测,每个数值框携带对应的刻度点作为其关键点。

我们采用从官网下载的预训练模型在仪表数据集上微调,将关键点权重从12提高到20。

(3)基于DBNetpp的文本检测

选型理由

由于仪表尺寸大小不一,我们选用DBNetpp模型,它在DBNet模型基础上引入了多级特征聚合模块(Adaptive Scale Fusion, ASF),ASF模块由阶段注意力和空间注意力子模块构成,加强了不同尺度特征的融合,提高了处理不同尺寸图像的鲁棒性。

图片

(4)基于SATRN模型的文本识别

选型理由

SATRN模型利用self-attention机制对字符的2D空间关系进行建模,并且在FFN模块中引入卷积层,增强了模型对全局和局部特征的捕捉能力。

SATRN模型对于大曲率弯曲、大角度旋转文本依然具备足够的识别能力,在多个不规则文本数据集上达到SOTA。

(5)读数识别

将上述模型的输出采用opencv进行后处理得到读数结果,具体流程如下:

图片

  1. 区分内外径
  2. 图片

根据刻度点和数值框距离指针原点的距离区分内径和外径,分别进行后续处理。

  1. 确定刻度点的顺序

起点到终点的角度差值是相邻两点间角度差值中最大的,我们只需要找到这个最大的角度差值,就可以确定起始点。

先将刻度点坐标转成以指针原点为中心的极坐标,根据角度从小到大排序 [16,0,4,8,12]

然后计算相邻刻度点两两间的角度差值,选择最大差值的下一个刻度点作为起点,调整顺序后 [0,4,8,12,16]

  1. 修正OCR识别结果

上图中由于指针遮挡,1500识别成500,通过等差数列对其进行修正。

  1. 透视变换

图片

步骤:

1、确定最后一个点的坐标:已知最后一个点在透视变换后的极坐标角度为45°,假设所有刻度点距离圆心距离为R,则最后一个点的坐标可以表示为(45°,R)可以根据该极坐标得出笛卡尔坐标系下的坐标。

2、确定其他三个点的坐标:这里一共有6个间隔平分整个270°量程,所以每个刻度夹角为270/6=45°,据此可以依次计算出其他三个点在变换后的坐标。

通过这种方式,可以确定四个刻度点在透视变换后图像中的坐标,并用这些坐标来进行透视变换。

  1. 补充被指针遮挡的点

图片

步骤:

1、首先,确定缺失点的前后点,以及它们与圆心的平均距离。这些信息将用于推算缺失点的极坐标。

2、根据前后点的角度和平均距离,计算出缺失点的极坐标。极坐标由极径和极角组成,极径表示点到圆心的距离,极角表示点在极坐标系中的角度。将缺失点的极坐标转换为笛卡尔坐标。

3、如果进行了透视变换,需要将转换后的坐标应用于透视矩阵,以获得原图中的坐标。

  1. 计算读数

图片

图片

算法优化

存在问题

图片

边框遮挡导致的刻度数字无法识别,上述算法不能很好的处理。

改进方法

根据数据集分布,为内外径各建立一个list,以外径举例:

图片

总结

优点:

1、目标检测算法和ocr识别算法均源自开源算法库中SOTA模型,实现简单高效,且具备丰富的工业部署落地支持。

2、没有采用传统直线检测的方式检测关键点,通过类似姿态估计的方式提高了关键点检测精度。

3、提出了一种基于查表的鲁棒仪表读数方法,对于遮挡严重的情况也能较好地处理。

4、通过透视变换,将形变的仪表图像修正,使得读数更加准确。

可提升点:

1、将模型文件转换为TensorRT格式,加速推理。

2、更改ocr识别模型,提升效率。

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

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

相关文章

【逗老师的无线电】ICOM IC-705终端模式Terminal Mode直连反射器配置-内置网关IP直连篇

各位友台大家好呀,逗老师最近整了一台IC-705,最吸引人的莫过于这玩意可以IP直连反射器。下面简单介绍一下这个功能和其配置方法 目录 一、功能二、依赖条件三、配置3.1、IC-705连接WIFI3.2、配置Terminal Mode3.2.1、点击MENU进入菜单,翻到第…

数据库的学习笔记——第一篇

SQL通用语法 SQL语句 DDL 数据定义 数据库、表字段 DML 数据操作 增删改 DQL 数据查询 查询表中记录 DCL 数据控制 创建用户、控制用户权限 DLL语句——数据库操作 SHOW DATABASES; # 查询数据库SELECT DATABASE(); # 查询当前数据库CREATE DATABASE [IF …

简单几步制作翻页电子画册

翻页电子画册是一种非常流行的电子书形式,它能够以生动、美观、有趣的方式展示您的内容。如果您想要制作自己的翻页电子画册,以下是一些简单的步骤,可以帮助您轻松上手。 首先,你需要一款在线制作电子杂志平台。比如FLBOOK&#x…

[NCTF 2022]calc

[NCTF 2022]calc 考点:python环境变量注入 打开题目,F12有hint 访问一下得到源码 app.route("/calc",methods[GET]) def calc():ip request.remote_addrnum request.values.get("num")log "echo {0} {1} {2}> ./tmp/log…

DragonEnglish:COCA20000+单词+释义

去年的时候接触到了 COCA20000 单词,对这种给单词特定顺序的方式蛮感兴趣的。因为我当时接触的版本只有单词或者单词释义的版本,所以我直接通过各种方式给它搭配了音标例句发音,然后每100个切割成1份,分成了 202 个文件来学习&…

AIGC重塑基础设施,高密数据中心为何众望所归?

凯文凯利在《必然》中认为,科技在本质上有所偏好,使得它朝往某种特定方向。 毫无疑问,进入到数字经济时代,人工智能技术飞速发展与加速应用之际,这个特定方向逐渐明朗:即算力科技,算力已经成为…

数据结构【线性表篇】(二)

数据结构【线性表篇】(二) 文章目录 数据结构【线性表篇】(二)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件? 目录一、单链表(一)、单链表的定义(二)、单链表的建立(三)、单链表的插入删除(四)、单链表的查找 二、主函…

电表通讯协议DLT645-2007编程

1、协议 电表有个电力行业推荐标准《DLT645-2007多功能电能表通信协议》,电表都支持,通过该协议读取数据,不同的电表不需要考虑编码格式、数据地址、高低位转换等复杂情况,统一采集。 不方便的地方在于这个协议定义得有点小复杂…

【数据结构与算法】字符串匹配(头歌习题)【合集】

目录 第1关:实现朴素的字符串匹配任务描述相关知识编程要求评测说明完整代码 第2关:实现KMP字符串匹配任务描述相关知识编程要求评测说明完整代码 第3关:【模板】KMP算法任务描述相关知识C STL容器string1、string的定义2、string中内容的访问…

计算机网络-动态路由

网络层协议:ip,ospf,rip,icmp共同组成网络层体系 ospf用于自治系统内部。 一个路由器或者网关需要能够支持多个不同的路由协议,以适应不同的网络环境。特别是在连接不同自治系统的边缘路由器或边界网关的情况下&#…

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

本课对应源文件下载链接: https://download.csdn.net/download/XiBuQiuChong/88680079 这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本功能其实就两个:显示画面和播放声音。在实现这两个功能前,我们需要先用ffmpeg连接到rtmp服…

蓝桥杯嵌入式KEY

1.按键原理图 2.按键GPIO引脚设置成输入,上拉模式 3.设置TIM4时钟源为外部时钟源 PSC为80-1 Period为10000-1 打开NVIC 中断时间为10ms 4.在bsp文件中添加interrupt.c文件 5.按键单击代码 6.长按键 7.按键过程和显示过程

动态规划 典型例题

总结 动态规划的的四个解题步骤是: 定义子问题写出子问题的递推关系确定 DP 数组的计算顺序空间优化(可选) from functools import cache cache #缓存,避免重复运算 def dfs(i)->int:if 终止: return 0 #具体返回什么值要看…

在线尺码计算

在线衣服尺码计算 尺码不确定的话,可以填写身高、体重生成可以参考的尺码还是不错的 工具简介 选购时请综合参考尺码表中的各项参数,这有助您选择到更好的尺码。 该尺码计算工具仅供参考,测量脚时请注意用适当力度轻踩水平面上。因测量方法不…

Tomcat和Servlet

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Tomcat是什么?1.1下载:1.2 tomcat是什么1.3启动服务器: 二.部署三、Servlet3.1创建项目3.2引入依赖pom.xml的所有代码 3…

electron——查看electron的版本(代码片段)

electron——查看electron的版本(代码片段)1.使用命令行: npm ls electron 操作如下: 2.在软件内使用代码,如下: console.log(process) console.log(process.versions.electron) process 里包含很多信息: process详…

Python装饰器的专业解释

装饰器,其实是用到了闭包的原理来进行操作的。 单个装饰器: 以下是一个简单的例子: def outer(func):print("OUTER enter ...")def wrapper(*args, **kwargs):print("调用之前......")result func(*args, **kwargs)p…

4.31 构建onnx结构模型-Tile

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Tile 结点进行分析 方式 方法一…

用Xshell连接虚拟机的Ubuntu20.04系统记录。虚拟机Ubuntu无法上网。本机能ping通虚拟机,反之不能。互ping不通

先别急着操作,看完再试。 如果是:本机能ping通虚拟机,反之不能。慢慢看到第8条。 如果是:虚拟机不能上网(互ping不通),往下一直看。 系统是刚装的,安装步骤:VMware虚拟机…

DevOps系列 之 Python与Java互相调用的案例

Python和Java是两种非常流行的编程语言。Python是一种解释型语言,而Java则是一种编译型语言。两者都有广泛的应用,尤其是在测试领域。在本文中,我们将讨论如何使用Python测试Java源代码,Java如何调用Python脚本。 单元测试 单元…