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

yolov5 C++环境搭建

安装依赖包:

pip install onnx

模型转化:

python export.py --weights yolov5s.pt --include onnx

opencv版本要求:4.5以上

安装部署器:opencv 4.8.0

opencv编译下载:

git clone https://github.com/opencv/opencv.git

cd opencv git checkout 4.8.0 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D BUILD_EXAMPLES=OFF \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ .. make -j$(nproc) sudo make install

代码:

CMakeLists.txt

cmake_minimum_required(VERSION 3.10) project(yolov5_cpp) set(CMAKE_CXX_STANDARD 11) set(OpenCV_DIR /usr/local/lib/cmake/opencv4) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(yolo main.cpp) target_link_libraries(yolo ${OpenCV_LIBS})

main.cpp

#include <opencv2/opencv.hpp> #include <vector> #include <string> using namespace cv; using namespace cv::dnn; using namespace std; const float CONF_THRESHOLD = 0.25f; const float NMS_THRESHOLD = 0.45f; // 去重框关键 vector<string> class_names = { "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush" }; int main() { string model_path = "yolov5s.onnx"; Net net = readNet(model_path); Mat img = imread("bus.jpg"); int h = img.rows; int w = img.cols; Mat blob = blobFromImage(img, 1 / 255.0, Size(640, 640), Scalar(), true, false); net.setInput(blob); Mat pred; net.forward(pred, net.getUnconnectedOutLayersNames()[0]); vector<Rect> boxes; vector<float> confs; vector<int> classIds; float* data = (float*)pred.data; for (int i = 0; i < 25200; i++) { float conf = data[4]; if (conf < CONF_THRESHOLD) { data += 85; continue; } Mat scores(1, class_names.size(), CV_32FC1, data + 5); double maxScore; Point maxClassPoint; minMaxLoc(scores, 0, &maxScore, 0, &maxClassPoint); int classId = maxClassPoint.x; float x = data[0]; float y = data[1]; float ww = data[2]; float hh = data[3]; int x1 = (x - ww / 2) * w / 640; int y1 = (y - hh / 2) * h / 640; int w2 = ww * w / 640; int h2 = hh * h / 640; boxes.push_back(Rect(x1, y1, w2, h2)); confs.push_back(conf); classIds.push_back(classId); data += 85; } // ✅ NMS 去重框(关键!!!) vector<int> indices; NMSBoxes(boxes, confs, CONF_THRESHOLD, NMS_THRESHOLD, indices); // ✅ 最终干净画框 for (int idx : indices) { Rect box = boxes[idx]; int cid = classIds[idx]; float cf = confs[idx]; rectangle(img, box, Scalar(0, 255, 0), 2); string label = class_names[cid] + " " + to_string(cf).substr(0, 4); putText(img, label, Point(box.x, box.y - 10), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 2); } imshow("YOLOv5 C++ 干净版", img); waitKey(0); return 0; }

编译运行

mkdir build cd build cmake .. make ./yolo

把图片和onnx都放到build的文件夹里,与可执行文件yolo一个目录。

http://www.jsqmd.com/news/653214/

相关文章:

  • 压床课程设计(论文+CAD图纸)
  • 生态建模避坑指南:从MCM赛题看种群动力学模型的5个常见误区
  • 「摩根士丹利」人形机器人产业链全景:从核心部件到系统集成的投资机会
  • 04-07-05 逻辑顺序的应用 - 学习笔记
  • 告别裸机!用STM32F407+FreeRTOS+LWIP搭建稳定TCP服务器(含LAN8720A驱动)
  • HTTPS
  • 【2026奇点智能技术大会权威内参】:AI法律咨询落地的5大合规雷区与3步避险法
  • 2026年3月火锅品牌推荐,火锅/美食/社区火锅/特色美食/火锅店,火锅品牌必吃榜 - 品牌推荐师
  • Windows 11终极优化指南:免费提升系统性能的完整解决方案
  • RS232电平转换实战:如何用MAX3232搞定3.3V/5V与RS232的互转(附电路图)
  • Kubernetes StatefulSet 与 Deployment 的区别
  • 为什么你的Copilot总在高峰时段“胡言乱语”?揭秘LLM服务混沌压测中3个反直觉性能拐点
  • 【生成式AI数据隐私防护黄金法则】:20年安全专家亲授5大不可绕过的合规落地步骤
  • 从安防到工业巡检:红外小目标检测落地实战中的3个‘坑’与优化策略
  • 电商运营避坑指南:从购物车放弃率65%到转化率10%的提升秘籍
  • 深入 DOM 查询底层:HTMLCollection 动态原理与 querySelectorAll 静态快照解析
  • 【生成式AI配置中心设计黄金法则】:20年架构师亲授5大避坑指南与高可用落地框架
  • 011、全参数微调:理论、流程与硬件需求分析
  • KeymouseGo终极指南:3分钟掌握鼠标键盘自动化神器
  • 2026年评价高的摩托车缸体模具/压铸模具优质供应商推荐 - 行业平台推荐
  • C语言指针入门到理解:一篇文章系统梳理指针核心知识(3)
  • AI生成内容署名权与权利归属争议全解(2024最高法典型案例+5类合同条款陷阱预警)
  • 6个值得尝试的Claude Code扩展
  • 基于自指动力学的统一场论:从标准模型到宇宙学特征(世毫九实验室原创理论)
  • 生成式AI服务突然OOM崩溃?7类隐性依赖未追踪导致的级联故障,附可落地的Trace-Span增强模板
  • 如何快速搭建个人AI助手:Open WebUI完整实战指南
  • 一文搞懂近红外光谱学:原理、应用领域与常见问题......
  • 微软 MarkItDown 登顶 GitHub 热榜:108K Star,一键将任意文档转 Markdown,深度拆解它的技术野心
  • 从CVE到CAPEC:漏洞利用模式逆向分析实战(附BurpSuite插件配置)
  • 解锁Bootloader后,你的联想手机还能做什么?Magisk、LSPosed与自定义ROM入门指南