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

Qt C++ 调用 YOLO / SAM2的方案

🧱 一、Qt C++ 为什么不能直接调用 YOLO / SAM2

模型实现语言依赖生态是否有官方 C++ 接口说明
YOLOv11 (Ultralytics)PythonPyTorch + Numpy + OpenCV❌ 没有Ultralytics 是纯 Python 封装,C++ 无法直接 import 或 link
SAM2 (Meta)PythonPyTorch❌ 没有官方只提供 Python + torch 权重加载方式,没有 TorchScript 或 libtorch 接口
Qt C++C++Qt / OpenCV / CUDA / etc✅ 纯 C++不能 import Python 模块

👉 所以直接写:

YOLO model("yolo11n.pt");

或者:

auto predictor = SAM2ImagePredictor(...);

在 C++ 是不可能编译通过的,因为这些类不存在于 C++ 的命名空间中,它们只在 Python 模块中定义。


✅ 二、想在 Qt C++ 里使用这些模型,有三种可行方案

方案 ①:QProcess 调用 Python 脚本(最简单)

Qt 通过启动 Python 进程运行 yolo_sam2.py,获取检测结果。

QProcess process; process.start("python3", QStringList() << "/home/bing/sam2-main/yolo_sam2.py" << "image.jpg"); process.waitForFinished(-1); QString output = process.readAllStandardOutput(); qDebug() << output; 

你可以在 Python 脚本里输出检测结果为 JSON 格式:

import json print(json.dumps({"boxes": boxes.tolist(), "classes": cls_ids.tolist()})) 

C++ 再解析:

QJsonDocument doc = QJsonDocument::fromJson(output.toUtf8()); auto boxes = doc["boxes"].toArray(); 

优点: 不需要修改 YOLO 或 SAM2
缺点: 启动 Python 子进程性能较低,不适合高频实时调用。


方案 ②:嵌入 Python 解释器(Pybind11 / Python.h)

在 C++ 中嵌入 Python 解释器,直接 import Python 模块并调用函数。

这种方式是:

#include <pybind11/embed.h> namespace py = pybind11; py::scoped_interpreter guard{}; // 启动解释器 py::object yolo = py::module::import("ultralytics").attr("YOLO")("yolo11n.pt"); py::object results = yolo.attr("__call__")("bus.jpg"); 

优点:

  • 模型加载一次可反复调用

  • Qt 界面可以直接与 Python 模型交互

缺点:

  • 需要编译 pybind11 并管理 Python 环境路径

  • 比纯 Python 稍复杂


方案 ③:转换模型 → C++ 推理框架

如果你追求 纯 C++ + 高性能(不依赖 Python),则必须 导出模型为 ONNX/TensorRT

模型转换路径Qt 调用接口
YOLOv11yolo export format=onnxexport format=engine通过 TensorRT 或 ONNX Runtime C++ API 加载
SAM2手动导出为 TorchScript 或 ONNX(需要修改部分代码)同样使用 TensorRT / ONNXRuntime

例如 YOLOv11:

yolo export model=yolo11n.pt format=onnx 

然后在 Qt 中使用 ONNX Runtime:

#include <onnxruntime_cxx_api.h> Ort::Session session(env, "yolo11n.onnx", session_options); 

优点: 真正的 C++ 推理,无需 Python
缺点: 转换 SAM2 非常困难(模型太大、动态 shape、TorchScript 不完全兼容)


🧩 三、建议你的开发路径(结合 Jetson 平台)

目标推荐方案
✅ 先跑通 Qt 调用 YOLO+SAM2QProcess 调 Python 脚本(最容易)
🚀 想优化推理速度转 YOLO → TensorRT,SAM2 暂保留 Python
🧠 最终版本Qt 主控 + C++ TensorRT YOLO + Python SAM2 分割

💡 总结一句话

❌ Qt C++ 不能直接调用 YOLO 或 SAM2(它们是 Python 类)。
✅ 可以通过 子进程调用嵌入 Python 解释器 实现间接调用。
🚀 若要纯 C++ 实现,则需导出为 ONNX / TensorRT 模型 再用 C++ 推理。


是否希望我帮你写一个:

  • Qt + Python(QProcess)调用 YOLO + SAM2 的模板(带 JSON 通信示例),
    这样你只需在 Qt 按钮事件中执行,就能显示检测与分割结果?

http://www.dtcms.com/a/507364.html

相关文章:

  • AD导出FPGA管脚的方法
  • 邯郸做网站的公司郴州建设网站公司
  • 基于 ComfyUI + Wan2.2 animate实现 AI 视频人物换衣:完整工作流解析与资源整合(附一键包)
  • wdaaw
  • 做个企业网网站怎么做西安注册公司虚拟地址
  • [Java数据结构与算法]详解排序算法
  • 工业级时序数据库选型指南:技术架构与场景化实践
  • 精选五款电脑USB接口控制软件,助您高效管控USB端口
  • 有个性的个人网站js打开网站
  • tesla 2025 年在自动驾驶投入 多少钱
  • 做调查报告的网站钟点工
  • 在 Vue 3.5 中优雅地集成 wangEditor,并定制“AI 工具”下拉菜单(总结/润色/翻译)
  • 【YOLO模型】(4)--YOLO V3超超超超详解
  • idea 的全局的配置的修改
  • 永久免费云服务器推荐电子商务网站优化方案
  • Altium Designer(AD24)IEEE Symbols按钮总结
  • 阿里云k8s1.33部署yaml和dockerfile配置文件
  • 有口碑的盐城网站建设wordpress配置ip访问
  • LINUX15--进程间的通信-信号量
  • 在 Linux 内核中加载驱动程序(一)
  • yarn面试题
  • Android跨进程通信: Binder 进程间通信机制解析
  • 【Day 80】Linux-虚拟化
  • 建设厅官方网站网站主题的分类
  • 广州营销网站建设公司php网站开发实例项目
  • Kubernetes 核心概念解析与集群部署实战(基于 Docker+Flannel)
  • 【课堂笔记】复变函数-6
  • OpenBMC: BmcWeb处理WebScoket1 判断是否为WebSocket
  • 操作系统学习 进程(1)进程的概念与状态
  • Genie Envisioner--智元机器人--世界模型框架--2025.8.7