当前位置: 首页 > news >正文

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

相关文章:

  • MySQL VS SQL Server:优缺点全解析
  • Unity3D 编辑器扩展开发指南
  • 基于大模型的贲门失弛缓症手术全流程风险预测与治疗方案研究
  • docker 国内源和常用命令
  • 【Ultralytics 使用yolo12 读取tiff 数据异常解决】
  • 实践项目开发-hbmV4V20250407-跨平台开发框架深度解析与VSCode一站式开发实践
  • 双向流-热-固耦合分析
  • 数据结构:链表
  • Vue中如何优雅地处理 `<el-dialog>` 的关闭事件
  • 【MQ篇】RabbitMQ之简单模式!
  • 第T9周:猫狗识别2
  • 机器学习基础 - 分类模型之逻辑回归
  • Linux kernel signal原理(下)- aarch64架构sigreturn流程
  • XHTMLConverter把docx转换html报java.lang.NullPointerException异常
  • 基于SpringBoot的校园赛事直播管理系统-项目分享
  • 前端如何优雅地对接后端
  • 使用Selenium进行元素定位的全面指南
  • docker容器中uv的使用
  • 前端性能优化全攻略:JavaScript 优化、DOM 操作、内存管理、资源压缩与合并、构建工具及性能监控
  • 从代码学习深度学习 - 异步计算 PyTorch 版
  • 最高检发布知识产权检察白皮书,“知识产权检察厅”同日亮相
  • 翁东华卸任文和友小龙虾公司董事,此前抢镜“甲亢哥”惹争议
  • 受贿超8.22亿,新疆维吾尔自治区党委原副书记李鹏新一审被判死缓
  • 中纪委驻中组部纪检监察组原组长李刚被捕
  • 大学2025丨浙大哲学院院长王俊:文科的价值不在于直接创造GDP
  • 哈萨克斯坦一名副市长遭枪击