OpenVINO教程(二):圖片目標檢測推理應用

YOLO模型物體檢測

下面是一個簡單的python程序,他的功能是使用yolo11n模型對coco_bike.jpg照片進行檢測,并顯示檢測結果
代碼步驟如下:

  1. coco_bike.jpg照片
  2. 加載yolo模型
  3. 使用模型進行detect推理
  4. 顯示推理結果

下面是完整的代碼

from pathlib import Pathimport urllib.request
import tkinter as tk
from PIL import Image, ImageTkfrom ultralytics import YOLO# ----------------------------- #
# 全局配置和路徑定義
# ----------------------------- #MODEL_VARIANTS = ["yolo11n", "yolo11s", "yolo11m", "yolo11l", "yolo11x"]
MODEL_NAME = MODEL_VARIANTS[0]  # 默認使用最輕量的 yolo11n 模型
PT_MODEL_PATH = f"{MODEL_NAME}.pt"
IR_MODEL_DIR = Path(f"{MODEL_NAME}_openvino_model")
IR_MODEL_PATH = IR_MODEL_DIR / f"{MODEL_NAME}.xml"
INT8_MODEL_PATH = Path(f"{MODEL_NAME}_openvino_int8_model/{MODEL_NAME}.xml")IMAGE_PATH = Path("./coco_bike.jpg")
OUT_DIR = Path("./")# ----------------------------- #
# 工具函數模塊
# ----------------------------- #def download_file_if_needed(url: str, filename: str, dest_dir: Path) -> Path:"""下載文件(若文件已存在則跳過)"""dest_dir.mkdir(parents=True, exist_ok=True)file_path = dest_dir / filenameif not file_path.exists():print(f"Downloading: {filename}")urllib.request.urlretrieve(url, file_path)else:print(f"File already exists: {file_path}")return file_pathdef prepare_test_image():"""確保測試圖片存在,如無則從官方地址下載"""if not IMAGE_PATH.exists():download_file_if_needed("https://storage.openvinotoolkit.org/repositories/openvino_notebooks/data/data/image/coco_bike.jpg",IMAGE_PATH.name, IMAGE_PATH.parent)def predict_and_show_image(det_model: YOLO):"""使用模型對圖像進行目標檢測,并通過 Tkinter GUI 顯示檢測結果"""results = det_model(IMAGE_PATH)result_img = Image.fromarray(results[0].plot()[:, :, ::-1])root = tk.Tk()root.title("YOLOv11 Detection Result")tk_img = ImageTk.PhotoImage(result_img)label = tk.Label(root, image=tk_img)label.pack()root.mainloop()# ----------------------------- #
# 主執行流程
# ----------------------------- #def main():# 1. 準備測試圖像(如無則下載)prepare_test_image()# 2. 構造 Ultralytics YOLO 接口,用于推理/驗證det_model =  YOLO(PT_MODEL_PATH).to("cpu")# 3. 使用openvino模型進行推理并顯示結果predict_and_show_image(det_model)if __name__ == "__main__":main()

下面是推理結果:
yolo11 detect

OpenVINO物體檢測

基于上面程序我們修改,將yolo模型轉換為openvino IR模型,然后使用IR模型進行物體檢測.完整代碼如下:
代碼步驟如下:

  1. coco_bike.jpg照片
  2. 導出和加載OpenVINO IR模型
  3. 用 Ultralytics 的 YOLO 接口重新封裝 之前導出的 OpenVINO 模型
  4. 使用模型進行detect推理
  5. 顯示推理結果

下面是完整的代碼

from pathlib import Pathimport urllib.request
import tkinter as tk
from PIL import Image, ImageTkfrom ultralytics import YOLO
import openvino as ov# ----------------------------- #
# 全局配置和路徑定義
# ----------------------------- #MODEL_VARIANTS = ["yolo11n", "yolo11s", "yolo11m", "yolo11l", "yolo11x"]
MODEL_NAME = MODEL_VARIANTS[0]  # 默認使用最輕量的 yolo11n 模型
PT_MODEL_PATH = f"{MODEL_NAME}.pt"
IR_MODEL_DIR = Path(f"{MODEL_NAME}_openvino_model")
IR_MODEL_PATH = IR_MODEL_DIR / f"{MODEL_NAME}.xml"
INT8_MODEL_PATH = Path(f"{MODEL_NAME}_openvino_int8_model/{MODEL_NAME}.xml")IMAGE_PATH = Path("./coco_bike.jpg")
OUT_DIR = Path("./")# ----------------------------- #
# 工具函數模塊
# ----------------------------- #def download_file_if_needed(url: str, filename: str, dest_dir: Path) -> Path:"""下載文件(若文件已存在則跳過)"""dest_dir.mkdir(parents=True, exist_ok=True)file_path = dest_dir / filenameif not file_path.exists():print(f"Downloading: {filename}")urllib.request.urlretrieve(url, file_path)else:print(f"File already exists: {file_path}")return file_pathdef prepare_test_image():"""確保測試圖片存在,如無則從官方地址下載"""if not IMAGE_PATH.exists():download_file_if_needed("https://storage.openvinotoolkit.org/repositories/openvino_notebooks/data/data/image/coco_bike.jpg",IMAGE_PATH.name, IMAGE_PATH.parent)def load_or_export_openvino_model() -> ov.CompiledModel:"""加載或導出 YOLOv11 OpenVINO IR 模型,并編譯為 CPU 運行時模型"""model = YOLO(PT_MODEL_PATH).to("cpu")if not IR_MODEL_PATH.exists():model.export(format="openvino", dynamic=True, half=True)core = ov.Core()ir_model = core.read_model(IR_MODEL_PATH)return core.compile_model(ir_model, "CPU")def build_ultralytics_model() -> YOLO:"""創建 Ultralytics 的 YOLO 模型接口,用于調用預測器"""return YOLO(IR_MODEL_DIR, task="detect")def predict_and_show_image(det_model: YOLO, compiled_model: ov.CompiledModel):"""使用模型對圖像進行目標檢測,并通過 Tkinter GUI 顯示檢測結果"""if det_model.predictor is None:config = {"conf": 0.25, "batch": 1, "save": False, "mode": "predict"}args = {**det_model.overrides, **config}det_model.predictor = det_model._smart_load("predictor")(overrides=args, _callbacks=det_model.callbacks)det_model.predictor.setup_model(model=det_model.model)det_model.predictor.model.ov_compiled_model = compiled_modelresults = det_model(IMAGE_PATH)result_img = Image.fromarray(results[0].plot()[:, :, ::-1])root = tk.Tk()root.title("YOLOv11 (OpenVINO) Detection Result")tk_img = ImageTk.PhotoImage(result_img)label = tk.Label(root, image=tk_img)label.pack()root.mainloop()# ----------------------------- #
# 主執行流程
# ----------------------------- #def main():# 1. 準備測試圖像(如無則下載)prepare_test_image()# 2. 加載或導出 OpenVINO IR 模型,并編譯運行(用于量化或預測)compiled_fp_model = load_or_export_openvino_model()# 3. 構造 Ultralytics YOLO 接口,用于推理/驗證det_model = build_ultralytics_model()# 4. 使用openvino模型進行推理并顯示結果predict_and_show_image(det_model, compiled_fp_model)if __name__ == "__main__":main()

下面是推理結果:
yolo11 openvino detect

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

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

相關文章

聚類算法(K-means、DBSCAN)

聚類算法 K-means 算法 算法原理 K-means 是一種基于類內距離最小化的劃分式聚類算法,其核心思想是通過迭代優化將數據劃分為 K 個簇。目標函數為最小化平方誤差(SSE): S S E ∑ i 1 K ∑ x ∈ C i ∣ ∣ x ? μ i ∣ ∣ 2…

Oracle在ERP市場擊敗SAP

2024年,甲骨文(Oracle)以87億美元的ERP收入和6.63%的市場份額,首次超越SAP,成為全球最大的ERP應用軟件供應商,結束了SAP自上世紀80年代以來在該領域的長期霸主地位。據APPS RUN THE WORLD的市場調研&#x…

嵌入式面試高頻筆試題目解析

一、基礎概念與 C 語言核心題 1. 指針與內存操作 典型題目: char str[] = "hello"; char *ptr = "world"; str[0] = H; // 合法嗎? ptr[0] = W; // 合法嗎?為什么?解析: str 是棧上數組,可修改內容,str[0]=H 合法。ptr 指向常量字符串區,修改會…

【Python】Selenium切換網頁的標簽頁的寫法(全!!!)

在使用selenium做網站爬取測試的時候,我們經常會遇到一些需要點擊的元素,才能點擊到我們想要進入的頁面, 于是我們就要模擬 不斷地 點點點擊 鼠標的樣子。 這個時候網頁上就會有很多的標簽頁,你的瀏覽器網頁標簽欄 be like: 那…

MySQL GTID模式主從同步配置全指南:從配置到故障轉移

前言 MySQL主從復制是企業級數據庫架構的基礎,而GTID(Global Transaction Identifier)模式則是MySQL 5.6版本后推出的革命性復制技術。本文將詳細介紹如何配置基于GTID的主從同步,并包含實用的故障轉移操作指南。 一、GTID模式核心優勢 相比傳統基于…

MAC系統下完全卸載Android Studio

刪除以下文件 /Applications/Android Studio.app /Users/用戶名/Library/Application Support/Google/AndroidStudio2024.2 /Users/用戶名/Library/Google/AndroidStudio /Users/用戶名/Library/Preferences/com.google.android.studio.plist /Users/用戶名/Library/Cache…

<C#>.NET WebAPI 的 FromBody ,FromForm ,FromServices等詳細解釋

在 .NET 8 Web API 中,[FromBody]、[FromForm]、[FromHeader]、[FromKeyedServices]、[FromQuery]、[FromRoute] 和 [FromServices] 這些都是用于綁定控制器動作方法參數的特性,下面為你詳細解釋這些特性。 1. [FromBody] 作用:從 HTTP 請求…

# 透視 Linux 內核:Socket 機制的底層架構與運行邏輯深度解析

在由 Linux 操作系統構建的龐大網絡生態中,Socket 作為網絡通信的核心樞紐,承載著不同主機間應用進程的數據交互重任。無論是日常的網頁瀏覽、在線游戲,還是復雜的分布式系統通信,Socket 都在幕后扮演著關鍵角色。盡管多數開發者對…

# 利用遷移學習優化食物分類模型:基于ResNet18的實踐

利用遷移學習優化食物分類模型:基于ResNet18的實踐 在深度學習的眾多應用中,圖像分類一直是一個熱門且具有挑戰性的領域。隨著研究的深入,我們發現利用預訓練模型進行遷移學習是一種非常有效的策略,可以顯著提高模型的性能&#…

Excel提取圖片并自動上傳到文件服務器(OOS),獲取文件鏈接

Excel提取圖片并自動上傳到接口 在實際項目中,我們可能經常會遇到需要批量從Excel文件(.xlsx)中提取圖片并上傳到特定接口的場景。今天,我就詳細介紹一下如何使用Python實現這一功能,本文會手把手教你搭建一個完整的解…

jmeter利用csv進行參數化和自動斷言

1.測試數據 csv測試數據如下(以注冊接口為例) 2.jemer參數化csv設置 打開 jmeter,添加好線程組、HTTP信息頭管理器、CSV 數據文件設置、注冊請求、響應斷言、查看結果樹 1) CSV 數據文件設置 若 CSV 中數據包含中文,…

騰訊云對象存儲m3u8文件使用騰訊播放器播放

參考騰訊云官方文檔: 播放器 SDK Demo 體驗_騰訊云 重要的一步來了: 登錄騰訊云控制臺,找到對象存儲的存儲桶。 此時,再去刷新剛才創建的播放器html文件,即可看到播放畫面了。

CSS 美化頁面(五)

一、position屬性 屬性值??描述??應用場景?static默認定位方式,元素遵循文檔流正常排列,top/right/bottom/left 屬性無效?。普通文檔流布局,默認布局,無需特殊定位。relative相對定位,相對于元素原本位置進行偏…

Spring MVC 核心注解與文件上傳教程

一、RequestBody 注解詳解 1. 基本使用 作用:從 HTTP 請求體中獲取數據,適用于 POST/PUT 請求。 限制:GET 請求無請求體,不可使用該注解。 示例代碼 Controller RequestMapping("/demo01") public class Demo01Cont…

js原型鏈prototype解釋

function Person(){} var personnew Person() console.log(啊啊,Person instanceof Function);//true console.log(,Person.__proto__Function.prototype);//true console.log(,Person.prototype.__proto__ Object.prototype);//true console.log(,Function.prototype.__prot…

為您的照片提供本地 AI 視覺:使用 Llama Vision 和 ChromaDB 構建 AI 圖像標記器

有沒有花 20 分鐘瀏覽您的文件夾以找到心中的特定圖像或屏幕截圖?您并不孤單。 作為工作中的產品經理,我總是淹沒在競爭對手產品的屏幕截圖、UI 靈感以及白板會議或草圖的照片的海洋中。在我的個人生活中,我總是捕捉我在生活中遇到的事物&am…

Kafka消費者端重平衡流程

重平衡的完整流程需要消費者 端和協調者組件共同參與才能完成。我們先從消費者的視角來審視一下重平衡的流程。在消費者端,重平衡分為兩個步驟:分別是加入組和等待領導者消費者(Leader Consumer)分配方案。這兩個步驟分別對應兩類…

2025年五大ETL數據集成工具推薦

ETL工具作為打通數據孤島的核心引擎,直接影響著企業的決策效率與業務敏捷性。本文精選五款實戰型ETL解決方案,從零門檻的國產免費工具到國際大廠企業級平臺,助您找到最適合的數據集成利器。 一、谷云科技ETLCloud:國產數據集成工…

PageIndex:構建無需切塊向量化的 Agentic RAG

引言 你是否對長篇專業文檔的向量數據庫檢索準確性感到失望?傳統的基于向量的RAG系統依賴于語義相似性而非真正的相關性。但在檢索中,我們真正需要的是相關性——這需要推理能力。當處理需要領域專業知識和多步推理的專業文檔時,相似度搜索常…

ubuntu20.04 遠程桌面Xrdp方式

1,Ubuntu 安裝Xrdp 方法 1.1,安裝xrdp sudo apt install xrdp 1.2,檢查xrdp狀態 sudo systemctl status xrdp 1.3,加入ssl-cert sudo adduser xrdp ssl-cert 1.4,重啟xrdp服務 sudo systemctl restart xrdp 最后…