ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C 目标检测完整上手指南:用 YoloDotNet 从图片一路跑到视频流

C 目标检测完整上手指南:用 YoloDotNet 从图片一路跑到视频流 C# 目标检测完整上手指南用 YoloDotNet 从图片一路跑到视频流【免费下载链接】YoloDotNetYoloDotNet - A C# .NET 8.0 project for Classification, Object Detection, OBB Detection, Segmentation and Pose Estimation in both images and live video streams.项目地址: https://gitcode.com/gh_mirrors/yo/YoloDotNetYoloDotNet 是一个基于 C# .NET 8.0 的开源目标检测库把图像分类、目标检测、OBB 检测、分割和姿态估计统一封装成几个方法图片和实时视频流都能直接喂进去。这篇 YoloDotNet 教程不按操作清单逐条硬背而是带你走一条真实的开发路径从加载一张图片到让摄像头画面里的目标被逐帧盯住。跑完这条路径你就摸清了这套 .NET 目标检测 API 的脾气。先看清能力版图你要调用的是哪个 Run 方法YoloDotNet 的核心入口只有一个类 Yolo所有能力都是初始化一次、调用对应方法。拿到的是普通检测模型就调用 RunObjectDetection模型带旋转角度的走 RunObbDetection分割用 RunSegmentation姿态估计用 RunPoseEstimation分类用 RunClassification。选错入口的典型症状是模型加载成功了结果却一塌糊涂。因为 YoloDotNet 会读取模型元数据来自动匹配内部模块检测模型和分割模型的输出张量结构完全不同入口必须一一对应。同一套 API 换不同模型就切换任务图上这类密集人群正是检测模块的典型输入场景。项目自带的 ONNX 模型都放在 test/assets/Models 目录。yolov8s.onnx、yolov11s.onnx 是标准目标检测模型命名里带 seg、pose、cls、obb 后缀的分别对应分割、姿态、分类和 OBB 任务。新手先用这些现成模型起步最稳妥不用自己从零训练。最省事的起步配置一次备齐仓库与模型前提条件只有一个装好 .NET 8.0 SDKdotnet --version能输出版本号即可。后面要做视频处理的话再装 FFmpeg 并加入系统 PATH。YoloDotNet 安装不需要任何全局注册或环境变量克隆下来就能直接编译git clone https://gitcode.com/gh_mirrors/yo/YoloDotNet cd YoloDotNet仓库本身是一个完整解决方案Demo 目录下每个子项目都是独立可运行的示例。进入目标检测示例并还原依赖cd Demo/ObjectDetectionDemo dotnet restoredotnet restore会把主库、执行提供程序、SkiaSharp 等依赖一次拉齐通常半分钟内完成。这里要理解一个关键概念执行提供程序CpuExecutionProvider、CudaExecutionProvider 等是 YoloDotNet 的可插拔模块意味着你能先在 CPU 上把逻辑跑通再无缝切到 GPU 提速代码改动只限于一行。一次跑通的目标检测示例先让 CPU 跑起来打开 ObjectDetectionDemo 的 Program.cs核心逻辑其实只有三步初始化 Yolo、执行推理、把结果画回图片。下面这段把执行提供程序换成了最通用的 CPUusing var yolo new Yolo(new YoloOptions { ExecutionProvider new CpuExecutionProvider(yolov8s.onnx), ImageResize ImageResize.Proportional }); using var image SKBitmap.Decode(test.jpg); var results yolo.RunObjectDetection(image, confidence: 0.25, iou: 0.7); image.Draw(results); image.Save(output.jpg, SKEncodedImageFormat.Jpeg, 85);这段在做什么YoloOptions 描述模型在哪、用哪种硬件算、图片怎么缩放。ImageResize.Proportional表示等比缩放并自动补边这个选项直接影响检测精度RunObjectDetection返回带类别、置信度和坐标框的检测结果Draw扩展方法负责把框和标签画到图上。街道画面里的车辆与行人被同时框出每条标注都带着类别名和置信度百分比。看结果图时框上的那个百分比就是置信度——它表示模型有多大把握这里确实有某个目标。理解这一点是下面调参的前提。调参心法置信度、IOU 与 ROI 分别管什么你可能会问为什么我的检测结果一堆虚框或者干脆什么都检不出来多半是这两个参数没调对。confidence越低模型越大胆误报也越多iou交并比控制重叠框的合并力度值越低合并得越狠能解决同一辆车被框了三遍的尴尬。如果只想关注图片的局部区域还可以用roi圈出感兴趣范围var results yolo.RunObjectDetection(image, confidence: 0.5, iou: 0.4, roi: new SKRectI(100, 100, 600, 600));把 confidence 提到 0.5低置信度的虚框会被过滤画面立刻干净许多。没有万能组合最实用的做法是把两个参数暴露成命令行变量扫几组数值对比输出图比凭感觉猜快得多。核心场景让检测盯住视频里的每一帧图片跑通之后最让人上头的应用是实时视频检测。YoloDotNet 对视频的抽象很直接给出视频源注册一个逐帧回调然后启动。yolo.InitializeVideo(new VideoOptions { VideoInput device/dev/video0:1280:720:30, // 摄像头也可填本地视频文件路径 VideoOutput output.mp4 }); yolo.OnVideoFrameReceived (frame, frameIndex) { var detections yolo.RunObjectDetection(frame, confidence: 0.3); frame.Draw(detections); }; yolo.StartVideoProcessing();这段的逻辑VideoInput支持本地文件、RTMP 直播流和摄像头三种来源每解码出一帧OnVideoFrameReceived就被触发一次你在回调里做的检测和绘制都会实时叠加到该帧上。摄像头的写法是device设备名:宽:高:帧率Windows 和 Linux 的取流方式不一样先调Yolo.GetVideoDevices()就能列出系统当前可用的设备名。视频流模式下逐帧检测过马路行人配合 SORT 跟踪器还能为每个目标维持稳定编号。如果想让目标跨帧保持同一身份可以在结果上链式调用.FilterLabels([person])只保留行人再.Track(sortTracker)做跨帧跟踪。帧率跟不上时把FrameInterval设为 2 表示只处理每两帧监控类场景通常足够用。新手避坑清单五个最容易翻车的细节模型版本对不上YoloDotNet 按模型元数据自动匹配模块YOLOv8 的模型别指望用 v12 的 demo 跑通Demo 目录与 Models 目录本来就是按版本一一对应的。FFmpeg 缺失视频功能会直接报解码失败先跑ffmpeg -version自查是否已安装并进入 PATH。路径带中文或空格ONNX 模型加载对路径敏感先把模型拷到项目根目录用相对路径最省事。换了硬件却忘了换提供程序CPU 切 GPU 时必须把CpuExecutionProvider换成CudaExecutionProvider两者在代码里是显式不同的类不是改个开关。忘了释放资源Yolo实现了IDisposable务必用using包裹否则 GPU 显存和原生内存不会及时回收。动手挑战把它变成你自己的第一个检测应用读完这篇 YoloDotNet 教程建议直接做一个小作业用 test/assets/Models 里的 yolov8s.onnx写一个命令行摄像头守卫——当检测到 person 时在控制台输出一条带时间戳的日志。提示三个方向摄像头源用device字符串帧回调里把 confidence 调高到 0.5 压制误报把每帧检测结果的数量打印出来即可。做完这一步你就完成了从静态图片到实时视频的完整跨越下一步可以翻开 Trackers 目录下的 SortTracker 源码看看目标是如何在帧与帧之间被记住的。【免费下载链接】YoloDotNetYoloDotNet - A C# .NET 8.0 project for Classification, Object Detection, OBB Detection, Segmentation and Pose Estimation in both images and live video streams.项目地址: https://gitcode.com/gh_mirrors/yo/YoloDotNet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表