探索 Ultralytics YOLOv8標記圖片

1、下載YOLOv8模型文件

下載地址:https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics

2、編寫python腳本?aaa.py

import cv2
import numpy as np
from ultralytics import YOLO
import matplotlib.pyplot as pltdef plot_detection(image, boxes, scores, class_ids, class_names, conf_threshold=0.5):"""將檢測結果繪制到圖像上"""# 創建圖像的副本用于繪制img_with_detections = image.copy()# 定義顏色列表,為不同類別使用不同顏色colors = [(0, 255, 0), (255, 0, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255)]# 遍歷所有檢測結果for i, (box, score, class_id) in enumerate(zip(boxes, scores, class_ids)):# 過濾低置信度的檢測結果if score < conf_threshold:continue# 獲取框的坐標 (x1, y1, x2, y2)x1, y1, x2, y2 = map(int, box)# 選擇顏色 (循環使用顏色列表)color = colors[class_id % len(colors)]# 1. 繪制邊界框cv2.rectangle(img_with_detections, (x1, y1), (x2, y2), color, 2)# 2. 繪制標簽背景label = f"{class_names[class_id]}: {score:.2f}"(label_width, label_height), baseline = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)cv2.rectangle(img_with_detections, (x1, y1 - label_height - 5), (x1 + label_width, y1), color, -1)  # -1 表示填充矩形# 3. 繪制標簽文本cv2.putText(img_with_detections, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)return img_with_detectionsdef main():# 1. 加載預訓練的 YOLOv8n 模型print("正在加載 YOLOv8n 模型...")model = YOLO('yolov8n.pt')  # 會自動下載模型如果不存在# 2. 加載要檢測的圖像image_path = '123.jpg'  # 替換為你的圖片路徑print(f"正在加載圖像: {image_path}")image = cv2.imread(image_path)if image is None:print(f"錯誤: 無法加載圖像 {image_path}")return# 3. 進行推理print("正在進行推理...")results = model(image, verbose=False)  # verbose=False 減少輸出信息# 4. 提取檢測結果# 獲取第一個結果(因為只輸入了一張圖片)result = results[0]# 提取邊界框信息boxes = result.boxes.xyxy.cpu().numpy()      # 邊界框坐標 [x1, y1, x2, y2]scores = result.boxes.conf.cpu().numpy()     # 置信度分數class_ids = result.boxes.cls.cpu().numpy().astype(int)  # 類別ID# 獲取類別名稱class_names = result.namesprint(class_names)print(f"檢測到 {len(boxes)} 個對象")for i, (box, score, class_id) in enumerate(zip(boxes, scores, class_ids)):print(f"對象 {i+1}: {class_names[class_id]} (置信度: {score:.3f})")# 5. 將檢測結果繪制到圖像上print("正在繪制檢測結果...")result_image = plot_detection(image, boxes, scores, class_ids, class_names)# 6. 保存和顯示結果output_path = 'detection_result123-x.jpg'cv2.imwrite(output_path, result_image)print(f"結果已保存到: {output_path}")# 使用 matplotlib 顯示結果(支持中文顯示)plt.figure(figsize=(12, 8))# 將 BGR 轉換為 RGB 用于 matplotlib 顯示result_image_rgb = cv2.cvtColor(result_image, cv2.COLOR_BGR2RGB)plt.imshow(result_image_rgb)plt.title('YOLOv8 result')plt.axis('off')plt.tight_layout()#plt.savefig('detection_result_plt.jpg', dpi=300, bbox_inches='tight')plt.show()def detect_specific_classes():"""示例:只檢測特定的類別(如可能類似于電表的物體)"""# 可能類似于電表的 COCO 類別target_classes = {67: 'cell phone',    # 手機 - 最可能檢測到數字屏幕62: 'tvmonitor',     # 顯示器75: 'remote',        # 遙控器74: 'clock'          # 時鐘}# 加載模型和圖像model = YOLO('yolov8n.pt')image = cv2.imread('your_meter_image.jpg')# 推理results = model(image, verbose=False)result = results[0]# 提取結果boxes = result.boxes.xyxy.cpu().numpy()scores = result.boxes.conf.cpu().numpy()class_ids = result.boxes.cls.cpu().numpy().astype(int)class_names = result.names# 過濾出目標類別filtered_boxes = []filtered_scores = []filtered_class_ids = []for box, score, class_id in zip(boxes, scores, class_ids):if class_id in target_classes and score > 0.3:  # 降低閾值filtered_boxes.append(box)filtered_scores.append(score)filtered_class_ids.append(class_id)print(f"檢測到可能的目標: {target_classes[class_id]} (置信度: {score:.3f})")# 繪制結果if filtered_boxes:result_image = plot_detection(image, filtered_boxes, filtered_scores, filtered_class_ids, class_names, conf_threshold=0.3)cv2.imwrite('meter_detection_result.jpg', result_image)print("電表檢測結果已保存")else:print("未檢測到可能的目標物體")if __name__ == "__main__":# 運行主函數進行通用物體檢測main()# 或者運行特定類別檢測(用于電表檢測嘗試)# detect_specific_classes()

3、運行python腳本

python aaa.py

正在加載 YOLOv8n 模型...
正在加載圖像: 10.jpg
正在進行推理...
檢測品類:{0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 
7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 11: 'stop sign', 12: 
'parking meter', 13: 'bench', 14: 'bird', 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 
19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 
'umbrella', 26: 'handbag', 27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis', 31: 
'snowboard', 32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove', 36:'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle', 40: 'wine glass', 41: 
'cup', 42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl', 46: 'banana', 47: 'apple', 48: 
'sandwich', 49: 'orange', 50: 'broccoli', 51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 
'donut', 55: 'cake', 56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining 
table', 61: 'toilet', 62: 'tv', 63: 'laptop', 64: 'mouse', 65: 'remote', 66: 'keyboard',67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink', 72: 
'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors', 77: 'teddy bear', 78:'hair drier', 79: 'toothbrush'}檢測到 2 個對象
對象 1: chair (置信度: 0.968)
對象 2: chair (置信度: 0.946)
正在繪制檢測結果...
結果已保存到: detection_result10.jpg

python腳本、模型文件、圖片文件在一個目錄中

參考官網內容:https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics

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

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

相關文章

Matplotlib數據可視化實戰:Matplotlib子圖布局與管理入門

Matplotlib多子圖布局實戰 學習目標 通過本課程的學習&#xff0c;學員將掌握如何在Matplotlib中創建和管理多個子圖&#xff0c;了解子圖布局的基本原理和調整方法&#xff0c;能夠有效地展示多個數據集&#xff0c;提升數據可視化的效果。 相關知識點 Matplotlib子圖 學習內容…

【python實用小腳本-194】Python一鍵給PDF加水印:輸入文字秒出防偽文件——再也不用開Photoshop

Python一鍵給PDF加水印&#xff1a;輸入文字秒出防偽文件——再也不用開Photoshop PDF加水印, 本地腳本, 零會員費, 防偽標記, 瑞士軍刀 故事開場&#xff1a;一把瑞士軍刀救了投標的你 周五下午&#xff0c;你把 100 頁標書 PDF 發給客戶&#xff0c;卻擔心被同行盜用。 想加水…

開源 C++ QT Widget 開發(四)文件--二進制文件查看編輯

文章的目的為了記錄使用C 進行QT Widget 開發學習的經歷。臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 C QT Widget 開發&#xff08;一&#xff09;工程文件結構-CSDN博客 開源 C…

【密碼學實戰】X86、ARM、RISC-V 全量指令集與密碼加速技術全景解析

前言 CPU 指令集是硬件與軟件交互的核心橋梁&#xff0c;其設計直接決定計算系統的性能邊界與應用場景。在數字化時代&#xff0c;信息安全依賴密碼算法的高效實現&#xff0c;而指令集擴展則成為密碼加速的 “隱形引擎”—— 從服務器端的高吞吐量加密&#xff0c;到移動端的…

2025-08-21 Python進階2——數據結構

文章目錄1 列表&#xff08;List&#xff09;1.1 列表常用方法1.2 列表的特殊用途1.2.1 實現堆棧&#xff08;后進先出&#xff09;1.2.2 實現隊列&#xff08;先進先出&#xff09;1.3 列表推導式1.4 嵌套列表推導式2 del 語句3 元組&#xff08;Tuple&#xff09;4 集合&…

告別手工編寫測試腳本!Claude+Playwright MCP快速生成自動化測試腳本

在進行自動化測試時&#xff0c;前端頁面因為頻繁迭代UI 結構常有變動&#xff0c;這往往使得自動化測試的腳本往往“寫得快、廢得也快”&#xff0c;維護成本極高。在大模型之前大家往往都會使用錄制類工具&#xff0c;但錄制類工具生成的代碼靈活性較差、定位方式不太合理只能…

一款更適合 SpringBoot 的API文檔新選擇(Spring Boot 應用 API 文檔)

SpringDoc&#xff1a;Spring Boot 應用 API 文檔生成的現代化解決方案 概述 SpringDoc 是一個專為 Spring Boot 應用設計的開源庫&#xff0c;能夠自動生成符合 OpenAPI 3 規范的 API 文檔。它通過掃描項目中的控制器、方法注解及相關配置&#xff0c;動態生成 JSON/YAML/HTML…

文獻閱讀 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 來自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React學習(九)

目錄&#xff1a;1.react-進階-antd-新增2.react-進階-antd-刪除選中1.react-進階-antd-新增新增代碼&#xff0c;跟需改的代碼類似&#xff0c;直接copy修改組件代碼進行修改userEffect可以先帶著&#xff0c;沒啥用A6組件用到的函數跟修改的也類似&#xff1a;這個useEffect函…

零基礎從頭教學Linux(Day 17)

三層交換機一、三層交換機的配置1.關于如何配置三層交換機&#xff0c;首先我們應該先創建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任務十四 推薦頁面接口開發

一、接口準備 在對接qq音樂接口之前,首先要將之前的項目,一定要記得備份一份; 備份完成之后,首先要在vscode終端安裝axios,這個是請求后端的工具,和之前的ajax一樣,都是請求后端的工具。只不過axios更專業化,跟強大 至于qq音樂接口怎么獲取,一般有兩個途徑,第一個是…

醫療AI與醫院數據倉庫的智能化升級:異構采集、精準評估與高效交互的融合方向(下)

核心功能創新詳解: 統一門戶與角色化工作臺: 統一入口: 用戶通過單一URL登錄,系統根據其角色和權限自動呈現專屬工作臺。 角色化工作臺: 臨床醫生工作臺: 首屏展示常用患者查詢入口、快速統計(如“我的患者檢驗異常趨勢”)、相關臨床文獻推薦、待處理任務(如報告審核)…

數據庫面試常見問題

數據庫 Delete Truncate Drop 區別 答:這三個操作都是針對數據庫的表進行操作,都有刪除表的功能,其中的區別在于: Delete:只將表中的數據進行刪除,不刪除定義不釋放空間,是dml語句,需要提交事務,如果不想刪除可以回滾。delete每次刪除一行,并在事務日志中為所刪除…

用nohup setsid繞過超時斷連,穩定反彈Shell

在We滲透過程中&#xff0c;我們常常會利用目標系統的遠程代碼執行&#xff08;RCE&#xff09;漏洞進行反彈Shell。然而&#xff0c;由于Web服務器&#xff08;如PHP、Python后端&#xff09;的執行環境通常存在超時限制&#xff08;如max_execution_time或進程管理策略&#…

Java設計模式-模板方法模式

Java設計模式-模板方法模式 模式概述 模板方法模式簡介 核心思想&#xff1a;定義一個操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;將算法中某些步驟的具體實現延遲到子類中完成。子類可以在不改變算法整體結構的前提下&#xff0c;重定義這些步驟的行為&…

Centos7物理安裝 Redis8.2.0

Centos7物理安裝 Redis8.2.0一、準備依賴環境首先安裝編譯 Redis 所需的依賴&#xff1a;# CentOS/RHEL系統 yum install -y gcc gcc-c make wget 二、下載并編譯 Redis 8.2.0# 1. 下載Redis 8.2.0源碼包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解壓…

牛津大學xDeepMind 自然語言處理(3)

條件語言模型無條件語言模型 概率計算&#xff1a;通過鏈式法則分解為預測下一詞概率&#xff08;將語言建模問題簡化為建模給定前面詞語歷史的下一個詞的概率&#xff09;基于循環神經網絡的無條件語言模型&#xff1a;根據歷史詞語預測下一個詞的概率條件語言模型 定義&#…

Vue2.x核心技術與實戰(一)

目錄 一、Vue2.x:快速上手+插值表達式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 創建實例 1.1.3 插值表達式 { { }} 1.1.4 響應式特性 1.1.5 開發者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU學習筆記 - 自科三面前端方向實戰演示

本來是準備寫完二面直接開始寫算法三面的&#xff0c;maimai那個封面圖我都做好了。但是可惡的出題人說要等我出完解析再針對性避開出題&#xff0c;所以swan決定把那個先擱置&#xff0c;本文我們先以2023年的自科三面前端方向題為例帶各位快速入門前端三件套&#xff08;因為…

前后端聯合實現文件上傳,實現 SQL Server image 類型文件上傳

1、前端 Vue3QualityFileInfoDialog.vue<script setup lang"ts" name"QualityFile"> ...... // 上傳&#xff0c;防抖 const onUploadClick debounce(() > {// 模擬點擊元素if (fileInputRef.value) {// 重置以允許重復選擇相同文件fileInputRef…