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

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.xdnf.cn/news/1149.html

相关文章:

  • IDEA创建Gradle项目然后删除报错解决方法
  • [PTA]2025 CCCC-GPLT天梯赛 胖达的山头
  • 基于ssm的新冠疫情下基于java的校园出入系统(源码+文档)
  • 双卡 4090 服务器租用:释放强算力的新选择​
  • 代理模式(Proxy Pattern)详解:以延迟加载图片为例
  • 2.5 函数的拓展
  • 联易融科技:以科技赋能驱动经营反转与价值重估
  • Java多线程编程初阶指南
  • Swiper、样式结构重用、GridGridItem
  • 力扣每日打卡17 49. 字母异位词分组 (中等)
  • SpringMVC入门
  • 17.2Linux的MISC驱动实验(编程)_csdn
  • C#使用sftp远程拷贝文件
  • 417. 太平洋大西洋水流问题
  • 什么是机器视觉3D无序堆叠抓取
  • 谷歌推出探索型推荐新范式:双LLM架构重塑用户兴趣挖掘
  • 精益数据分析(13/126):洞察数据关系,灵活调整创业方向
  • Spark与Hadoop之间有什么样的对比和联系
  • 从ChatGPT到GPT-4:大模型如何重塑人类认知边界?
  • 神经网络权重优化秘籍:梯度下降法全解析(五)
  • JETBRAINS USER AGREEMENT【2025.4.16】更新用户许可协议
  • 新零售行业时代:如何用科技驱动传统零售的转型升级​​
  • dolphinscheduler实现(oracle-hdfs-doris)数据ETL
  • 【锂电池剩余寿命预测】BiLSTM双向长短期记忆神经网络锂电池剩余寿命预测(Matlab源码)
  • IntelliJ IDEA 新版本中 Maven 子模块不显示的解决方案
  • AWS Lambda 架构深入探究
  • 【数据可视化-22】脱发因素探索的可视化分析
  • 前端学习笔记
  • 学 Python 需要安装哪些软件?全面工具指南
  • 开源的自动驾驶模拟器