【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)

【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客

训练与预测

        Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它能一次性预测图像中所有对象的边界框和类别概率,因此在速度上有很大的优势。

        Ultralytics是YOLOv3、YOLOv5等版本的维护者,并且推出了YOLOv8等一系列改进版本。这些模型通常具有更高的精度和更快的速度,同时保持了YOLO系列简单易用的特点。Ultralytics提供的YOLO实现通常是开源的,可以在GitHub等平台上找到,允许研究者和开发者使用、修改和贡献代码。

        此外,Ultralytics还提供了训练、评估和部署YOLO模型的工具和文档,使得用户能够根据自己的数据集定制YOLO模型,用于各种计算机视觉任务,如物体识别、跟踪等。

Home - Ultralytics YOLO Docs

本项目基于Ultralytics YOLOv8模型进行训练和预测。

下载项目

前往github:github.com

进入ultralytics目录,目录结构:

cfg:网络模型架构配置文件

my_datas:自定义数据集

weights:权重文件

需要安装的包:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install ultralytics==8.0.143

(如果要使用最新版的ultralytics,则不需要带版本号,最新版的已更新到YOLO11)

项目配置

为了快速上手,下面只介绍核心流程。在自定义数据集目录下,创建自己的项目(项目名称自定义即可),然后将数据准备好,最后创建一个data.yaml的文件,参考如下目录结构和配置:

data.yaml文件配置:

train、val:自定义数据集的训练和验证数据图片目录

nc:目标检测类别数量

names:目标检测类别

训练

在ultralytics目录下创建train.py脚本,如下:

from ultralytics import YOLO


if __name__ == '__main__':
    model = YOLO('cfg/models/v8/yolov8s.yaml').load('yolov8s.pt')
    model.train(data='my_datas/detect-pointer/data.yaml', epochs=300, imgsz=640, task='detect', batch=64, device=0, amp=True, patience=10, close_mosaic=30)

加载网络模型和权重,本地没有权重文件时,会自动下载。更详细的训练参数请参考cfg目录下的default.yaml文件。

运行脚本开始训练,训练开始后,会在runs/detect目录下生成训练过程数据:

预测

创建predict.py脚本,与train.py同目录。

from ultralytics import YOLO
import cv2

if __name__ == '__main__':
    img_path = 'assets/meter-pointer1.jpg'
    model = YOLO('runs/detect/train/weights/best.pt')
    img = cv2.imread(img_path)
    results = model.predict(img, imgsz=640, show=True, show_labels=True, show_conf=True, device=0, conf=0.8)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

img_path:指定需要预测的图片路径

YOLO(...):加载训练好的模型

predict:预测

预测效果

指针目标检测:

最低位X0.001由目标检测直接分类得出结果,高位只需要检测到即可,后面需要结合梅花针分割模型,计算角度,映射读数。最后再通过修正算法修正误差,得到最终结果。

p2表示最低位读数是2,也就是0.002

指针区域梅花针分割:

circle_area:刻度盘

pointer:梅花针区域

字轮目标检测:

d10表示读数为0,是由0到1的过渡,同时也需要结合最高位指针读数X0.1的值,来进行修正

至此,我们已成功达成了本项目的第一阶段目标:实现了指针区域的目标检测与梅花针的精准分割,以及完成了字轮数字的自动识别任务,并且获得了预期的成果。

接下来的步骤将是开发上位机软件和应用相应的模型,通过集成并优化修正算法,以最终实现表盘读数的准确解析与输出。这一过程不仅将提升数据读取的自动化水平,也将显著增强系统的整体性能与可靠性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt Pro 常用配置

Part1: Summary Qt 开发中 Pro 文件的内容很多,需要不断的去学习和使用,现系统性的整理一下。以备录; 1.创建pro文件 1.1 步骤: Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为&…

ChatGPT生成测试用例的最佳实践(一)

前面介绍的案例主要展示了ChatGPT在功能、安全和性能测试用例生成方面的应用和成果。通过ChatGPT生成测试用例,测试团队不仅可以提升工作效率,还可以加快测试工作的速度,尽早发现被测系统中的问题。问题及早发现有助于提高软件的质量和用户满…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈(Stack)和堆(Heap)1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢?值类型引用类型 2、总结 三、特殊的引用类…

欧科云链研究院:AI时代,如何证明“我是我”?

OKG Research|编辑 近日,OpenAI 发布了新模型 Sora。这是一款高性能的文本到多模态生成工具,支持从文本生成精细的图像和动态视频。 相较早先发布的视频样例,该功能目前已经可以由用户真实上手体验,目前由于服务过载…

【老白学 Java】日期 / 时间格式化

日期 / 时间格式化 文章来源:《Head First Java》修炼感悟。 本篇文章,老白把日期和时间的格式化参数进行了整理,方便以后查阅,更加详细的说明请参考 Java API 文档。 一、语法解释 %,必要参数,用于引用参…

说说你对java lambda表达式的理解?

大家好,我是锋哥。今天分享关于【说说你对java lambda表达式的理解?】面试题。希望对大家有帮助; 说说你对java lambda表达式的理解? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java Lambda 表达式是 Java 8 引入的一项重要特性&#…

【roadMap】我转行软件测试的经历

软件测试这行咋样? 如果你简单了解过「软件测试工程师」这个岗位,就会知道它的基本特点: 待遇比开发低,比其他行业高入门丝滑,算是技术岗最简单的一类测试行业有细分领域:功能、性能、自动化… 每个行业…

[笔记] 编译LetMeowIn(C++汇编联编程序)过程

文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目,c调用汇编的程序,需要配置一下,特此记录一下 过程 下载源码 首先下载源码…

从开始实现扩散概率模型 PyTorch 实现

目录 一、说明 二、从头开始实施 三、线性噪声调度器 四、时间嵌入 五、下层DownBlock类块 六、中间midBlock类块 七、UpBlock上层类块 八、UNet 架构 九、训练 十、采样 十一、配置(Default.yaml) 十二、数据集 (MNIST) keyword: Diffusion…

MTK Android12 更换开机LOGO和开机动画

1、路径: (1)device/mediatek/system/common/device.mk (2)vendor/audio-logo/animation/bootanimation.zip (3)vendor/audio-logo/products/resource-copy.mk (4)vendo…

数据分析思维(一):业务指标(数据分析并非只是简单三板斧)

个人认为,数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#x…

matlab测试ADC动态性能的原理

目录 摘要: 简介: 动态规范和定义 动态规格: 双面到单边的功率谱转换 摘要: 模数转换器(adc)代表了接收器、测试设备和其他电子设备中的模拟世界和数字世界之间的联系。正如本文系列的第1部分中所概述…

5G中的ATG Band

Air to Ground Networks for NR是R18 NR引入的。ATG很多部分和NTN类似中的内容类似。比较明显不同的是,NTN的RF内容有TS 38.101-5单独去讲,而ATG则会和地面网络共用某些band,这部分在38.101-1中有描述。 所以会存在ATG与地面网络之间的相邻信…

vue组件开发:构建响应式快捷导航

前言 快捷导航不仅能够显著提升系统的灵活性和用户交互性,还极大地增强了用户的操作体验。本文将展示如何在 vue 中实现一个既可自定义又具备响应式特性的快捷导航菜单。 一、实现思路 列表页 结构设计 定义页面结构,包含一个导航卡片和一个对话框组件&a…

事务管理与锁机制

title: 事务管理与锁机制 date: 2024/12/14 updated: 2024/12/14 author: cmdragon excerpt: 在数据库系统中,事务管理至关重要,它确保多个数据库操作能够作为一个单一的逻辑单元来执行,从而维护数据的一致性和完整性。一个良好的事务管理系统能够解决并发操作带来的问题…

《操作系统 - 清华大学》7 -1:全局页面置换算法:局部页替换算法的问题、工作集模型

文章目录 1. 局部页替换算法的问题2. 全局置换算法的工作原理3. 工作集模式3.1 工作集3.2 工作集的变化 4 常驻集 1. 局部页替换算法的问题 局部页面置换算法 OPT,FIFO,LRU,Clock 等等,这些算法都是针对一个正在运行的程序来讲的…

力扣-图论-12【算法学习day.62】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

每日十题八股-2024年12月14日

1.类加载器有哪些? 2.双亲委派模型的作用 3.讲一下类加载过程? 4.讲一下类的加载和双亲委派原则 5.什么是Java里的垃圾回收?如何触发垃圾回收? 6.判断垃圾的方法有哪些? 7.垃圾回收算法是什么,是为了解决了…

智能引导小车充电系统设计(论文+源码)

1总体方案设计 在16*16点阵LED字符显示器的设计中,系统总体框架如图2.4所示,包括单片机主控模复位电路模块、晶振电路模块、按键电路模块、LED点阵驱动电路模块,蓝牙模块等构成。系统功能实现主要是利用系统在软件程序编写过程中&#xff0c…

【Vue】自定义指令、插槽

目录 自定义指令 是什么 作用 使用方法 定义 使用 自定义指令配合绑定数据 语法 自定义指令的简写 语法 使用时机 插槽 什么是插槽 默认(匿名)插槽 ​编辑插槽的默认值 具名插槽 使用方法 简写 使用示例 作用域插槽 自定义指令 是什…