【YOLOv8】 用YOLOv8實現數字式工業儀表智能讀數(一)

? ? ? ? 上一篇圓形表盤指針式儀表的項目受到很多人的關注,咱們一鼓作氣,把數字式工業儀表的智能讀數也研究一下。本篇主要講如何用YOLOV8實現數字式工業儀表的自動讀數,并將讀數結果進行輸出,若需要完整數據集和源代碼可以私信

目錄

🍓🍓1.yolov8實現數字型儀表智能讀數?

🙋🙋2.數字儀表表盤目標檢測

🍋2.1準備數據

🍋2.2模型選擇

🍋2.3加載預訓練模型

🍋2.4數據組織?

🍉🍉3.目標檢測訓練代碼

🐸🐸4.目標檢測推理代碼

整理不易,歡迎一鍵三連!!!

送你們一條美麗的--分割線--



🍓🍓1.yolov8實現數字型儀表智能讀數?

????????首先介紹下數字型儀表的數據集如下所示,包含了各種數字型儀表:

???????


?????????最后實現的效果如下:

????????從原始數據輸入至最后輸出儀表讀數,共需要3步:

  1. 從原始影像中通過目標檢測識別出表盤的位置
  2. 基于第一步的結果將表盤的位置切分出來,再進一步通過目標檢測識別表盤中的數字
  3. 基于第二步的結果對表盤中的數字進行智能讀數

???????

?????????此篇主要介紹第一步【從原始影像中通過目標檢測識別出表盤的位置

🙋🙋2.數字儀表表盤目標檢測

????????通過目標檢測方法對數字儀表表盤進行目標識別的方法不限,本文仍以YOLOv8為例進行說明。

🍋2.1準備數據

????????訓練數據集共包含390張,驗證集140張,測試集139張。部分訓練數據如下圖所示。

????????label部分采用YOLO格式的txt文件,格式如下所示:

🍋2.2模型選擇


? ? ? ? 以YOLOv8n為例,模型選擇代碼如下:

model = YOLO('yolov8n.yaml') ?# build a new model from YAML
model = YOLO('yolov8n.pt') ?# load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') ?# build from YAML and transfer weights


? ? ? ? 其中yolov8n.yaml為./ultralytics/cfg/models/v8/yolov8n.yaml,可根據自己的數據進行模型調整,打開yolov8n.yaml顯示內容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 1 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 12- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]] # cat head P4- [-1, 3, C2f, [512]] # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]] # cat head P5- [-1, 3, C2f, [1024]] # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)

????????主要需要修改的地方為nc,也就是num_class,此處如果是自己的表盤識別數據,那就要換成自己的表盤類別,此處我的輸入影像中只有表盤這一個類別,所以nc=1。

????????如果其他的模型參數不變的話,就默認保持原版yolov8,需要改造模型結構的大佬請繞行

🍋2.3加載預訓練模型

????????加載預訓練模型yolov8n.pt,可以在第一次運行時自動下載,如果受到下載速度限制,也可以自行下載好(下載鏈接),放在對應目錄下即可。

?

🍋2.4數據組織?

?????????yolov8還是以yolo格式的數據為例,./ultralytics/cfg/datasets/data.yaml的內容示例如下:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)# Classes (80 COCO classes)
names:0: person1: bicycle2: car# ...77: teddy bear78: hair drier79: toothbrush

????????此處建議根據自己的數據集設置新建一個shuziyibiao_data.yaml文件,放在./ultralytics/cfg/datasets/目錄下,最后數據集設置就可以直接用自己的shuziyibiao_data.yaml文件了。以我的shuziyibiao_data.yaml文件為例:


path: /home/datasets/shuziyibiao_dataset  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test: images/test # test images (optional)names:0: biao

🍉🍉3.目標檢測訓練代碼


? ? ? ? 準備好數據和模型之后,就可以開始訓練了,train.py的內容顯示為:

from ultralytics import YOLO# Load a model
model = YOLO('yolov8n.yaml') ?# build a new model from YAML
model = YOLO('yolov8n.pt') ?# load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') ?# build from YAML and transfer weights# Train the model
results = model.train(data='shuziyibiao_data.yaml', epochs=50, imgsz=640)

訓練完成后的結果如下:

????????其中weights文件夾內hi包含2個模型,一個best.pth,一個last.pth。

????????至此就可以使用best.pth進行推理預測表盤位置了。

在此貼上我的訓練結果:

?

🐸🐸4.目標檢測推理代碼

批量推理python代碼如下:

from ultralytics import YOLO
from PIL import Image
import cv2
import osmodel = YOLO('/yolov8/runs/detect/train4/weights/best.pt')  # load a custom model
path = '/home/數字儀表/dataset/images/test/'  #test_image_path_dir
img_list = os.listdir(path)
for img_path in img_list:
###  =============detect=====================im1 = Image.open(os.path.join(path,img_path))results = model.predict(source=im1, save=True,save_txt=True)

?推理得到的可視化結果如下:

????????為了方便下一步的表盤中的數字識別任務,可以將框內的表盤提取并裁剪出來,方便后續使用。裁剪后的表盤如下所示。

【YOLOv8】 用YOLOv8實現數字式工業儀表智能讀數(二)

【YOLOv8】 用YOLOv8實現數字式工業儀表智能讀數(三)-CSDN博客

整理不易,歡迎一鍵三連!!!


送你們一條美麗的--分割線--


🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸????🍎🍎👍👍🌷🌷?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44531.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44531.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gin源碼分析

一、高性能 使用sync.pool解決頻繁創建的context對象,在百萬并發的場景下能大大提供訪問性能和減少GC // ServeHTTP conforms to the http.Handler interface. // 每次的http請求都會從sync.pool中獲取context,用完之后歸還到pool中 func (engine *Engin…

在C++中怎樣使用C庫

在C中使用C庫是一個相對直接的過程,因為C是從C發展而來的,并且與C高度兼容。這意味著你可以直接在C代碼中使用C庫函數、頭文件和變量,而無需進行特殊轉換。以下是一些基本的步驟和注意事項,用于在C中使用C庫: 1. 包含…

c語言位操作符相關題目之交換兩個數的值

文章目錄 一、題目二、方法11,思路2,代碼實現 三、方法21,思路2,代碼實現 四、方法31,思路2,代碼實現 總結 提示:以下是本篇文章正文內容,下面案例可供參考 一、題目 實現兩個變量的…

淺談PostCSS

1. 背景 css的預處理器語言(比如 sass, less, stylus)的擴展性不好,你可以使用它們已有的功能,但如果想做擴展就沒那么容易。 sass是很常用的css預處理器語言,在webpack中要使用它,…

設計模式使用場景實現示例及優缺點(結構型模式——組合模式)

結構型模式 組合模式(Composite Pattern) 組合模式使得用戶對單個對象和組合對象的使用具有一致性。 有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和復雜元素的概念,客戶程序可以像處理簡單元…

小米起訴“小米”商標侵權,索賠500萬!

近日浙江麗水有家叫小米的公司,因為商標侵權被小米科技起訴索賠500萬,需要變更企業名稱,官網也不能用“小米智能大家居”等,還有其它的賠償,普推知產商標老楊分析,“小米智能大家居”“小米”,后…

【Flask從入門到精通:第九課:數據庫基本操作、數據表操作以及數據操作】

數據庫操作 數據庫驅動(drivers)模塊:pymysql、MySQLDB 數據庫基本操作 在SQLAlchemy中,添加、修改、刪除操作,均由數據庫會話(sessionSM)管理。 會話用 db.session 表示。在準備把數據寫入數據庫前,要先…

交易平臺Zero Hash現已支持SUI交易

Zero Hash是一家領先的加密貨幣和穩定幣基礎設施平臺,為包括Stripe、Shift4和Franklin Templeton在內的公司提供支持,現在也支持對SUI的訪問。此舉使Zero Hash的客戶及其終端用戶能夠使用SUI。 提供API和SDK以及專注于無縫連接法幣、加密貨幣和穩定幣的…

讀人工智能全傳11人工智能會出什么錯

1. 人工智能會出什么錯 1.1. 一些報道是公正合理的,不過坦白地說,大部分報道都愚蠢得無可救藥 1.2. 一些報道頗有知識性和引導性,而大部分則是杞人憂天式的恐嚇 1.3. 滑稽的報道迎合了大眾對人工智能的“終結者式恐懼” 1.3.1. 我們創造出…

html設計(兩種常見的充電效果)

第一種 完整代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

方便快捷傳文件—搭建rsync文件傳輸服務器

比如我們有一個服務器&#xff0c;想把各個機器的文件都通過腳本傳給這臺機&#xff0c;用sftp或者直接rsync就必須輸密碼&#xff0c;肯定不行&#xff0c;做等效性免密又麻煩&#xff0c;怎么辦呢&#xff0c;這么辦&#xff01; 在服務端 yum -y install rsync #編輯&…

Vue3 關于scss預編譯中:deep 其中的deep如何理解

在SCSS預處理器中&#xff0c;:deep是一個偽類選擇器&#xff0c;用于選擇一個元素的所有后代元素&#xff0c;無論它們在DOM結構中的層級深度如何。換句話說&#xff0c;:deep選擇器是一個類似于CSS中的后代選擇器&#xff0c;但是它可以不考慮嵌套層級的限制&#xff0c;而是…

Android MessageQueue 源碼分析

類注釋 /*** Low-level class holding the list of messages to be dispatched by a* {link Looper}. Messages are not added directly to a MessageQueue,* but rather through {link Handler} objects associated with the Looper.** <p>You can retrieve the Messa…

【FineGrip】全光學感知:一種新的通用遙感圖像解釋任務和細粒度數據集(IEEE TGRS 2024)

摘要 目前的遙感解譯模型通常集中于單一的任務&#xff0c;如檢測、分割或字幕。但是&#xff0c;針對特定任務設計的模型無法實現綜合多層次解譯。該領域也缺乏多任務聯合解譯數據集。本文提出Panoptic Perception&#xff0c;一個新的任務和一個新的細粒度數據集&#xff08…

apache Kylin系列介紹及配置

Apache Kylin是一個開源的分布式分析引擎,用于OLAP(聯機分析處理)數據處理。它專門設計用于處理大規模的數據集,并提供快速的查詢和分析能力。 apache Kylin架構: Apache Kylin是一個開源的分布式分析引擎,旨在提供高性能、低延遲的OLAP(聯機分析處理)能力。下面是Ap…

nvim工具介紹

1. **seoul256.vim**: 一個基于首爾色彩的低對比度 Vim 顏色方案&#xff0c;適用于 256 色終端或 GVim。 2. **vim-easy-align**: Vim 插件&#xff0c;用于對齊文本。 3. **vim-go**: Vim 的 Go 語言插件&#xff0c;支持語法高亮、自動縮進等。 4. **coc.nvim**: 集成了 LSP…

GESP CCF C++ 二級認證真題 2024年6月

第 1 題 小楊父母帶他到某培訓機構給他報名參加CCF組織的GESP認證考試的第1級&#xff0c;那他可以選擇的認證語言有幾種&#xff1f;&#xff08; &#xff09; A. 1 B. 2 C. 3 D. 4 第 2 題 下面流程圖在yr輸入2024時&#xff0c;可以判定yr代表閏年&#xff0c;并輸出 2月…

介紹一款數據準實時復制(CDC)中間件 `Debezium`

簡介 文章開頭先介紹一下什么是CDC。數據準實時復制(CDC)是目前行內實時數據需求大量使用的技術。常用的中間件有Canal、Debezium、Flink CDC等 下面我們做一下對比 各有優缺點吧,本主要介紹一下Debezium中間件。 Debezium是什么 Debezium是一個為變更數據捕獲(CDC)提供…

Windows圖形界面(GUI)-SDK-C/C++ - 列表框(List)

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> 鏈接點擊跳轉博客主頁 目錄 列表框(List) 控件樣式 創建控件 初始控件 消息處理 示例代碼 列表框(List) 控件樣式 列表框&#xff08;ListBox&#xff09;是Windows圖形界面開發中常用的控件&#xff0c;允許用戶從…

力扣第230題“二叉搜索樹中第K小的元素”

在本篇文章中&#xff0c;我們將詳細解讀力扣第230題“二叉搜索樹中第K小的元素”。通過學習本篇文章&#xff0c;讀者將掌握如何使用中序遍歷來找到二叉搜索樹中的第K小的元素&#xff0c;并了解相關的復雜度分析和模擬面試問答。每種方法都將配以詳細的解釋&#xff0c;以便于…