尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

jetson-inference Recognizer 实战:基于 WebRTC 的交互式视频标注与在线训练分类 Web 应用

发布时间:2026/9/25 1:21:35

资讯中心
01
ARTICLE

jetson-inference Recognizer 实战:基于 WebRTC 的交互式视频标注与在线训练分类 Web 应用

jetson-inference Recognizer 实战:基于 WebRTC 的交互式视频标注与在线训练分类 Web 应用
人工智能计算机视觉深度学习微调【免费下载链接】jetson-inferenceHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.项目地址https://gitcode.com/gh_mirrors/je/jetson-inference点击查看免费下载Recognizer 是 jetson-inference 项目中一套基于 Flask 的视频打标tagging/分类classificationWeb 应用示例它把 WebRTC 视频流采集、交互式数据标注、PyTorch 后台增量训练与 TensorRT 推理融为一体用户在浏览器中给实时视频打标签、录制或上传图片模型便在后台自动重新训练训练出的最佳模型会被导出为 ONNX 并动态加载进 TensorRT 用于推理训练与推理可同时进行。读完本文你将掌握该应用的完整源码结构、启动与 HTTPS/SSL 配置、网页端数据采集与训练/推理操作流程以及全部训练相关命令行参数和底层实现原理能够在此基础上定制自己的交互式识别系统。Recognizer 是什么Recognizer源码位于 python/www/recognizer是一个 Flask 架构的视频打标/分类 Web 应用其核心亮点是交互式数据采集与在线训练随着视频被实时打标并录制更新后的模型会在后台由PyTorch增量式重新训练训练完成后再由TensorRT执行推理inference推理与训练可以同时运行重训好的模型会在运行时被动态加载支持多标签标注multi-label tagging即同一张图片可被打上多个类别标签除了通过 WebRTC 录制客户端摄像头视频也支持从客户端上传已有图片进入数据集。应用的主体由 5 个源文件构成各自职责如下相对仓库根目录的路径文件职责python/www/recognizer/app.pyFlask Web 服务器负责路由、REST 查询与命令行参数解析python/www/recognizer/stream.pyWebRTC 流线程视频采集、推理与渲染输出python/www/recognizer/model.pyDNN 推理 训练线程PyTorch 训练、ONNX 导出、TensorRT 加载python/www/recognizer/dataset.py数据打标 录制数据集线程与 PyTorch Dataset 实现python/www/recognizer/templates/index.html前端页面呈现运行时架构三个并行线程从源码看启动app.py会同时拉起三个并行的处理单元stream.py 与 model.py 中Stream、Model和Dataset都继承自threading.ThreadFlask Web 服务器主线程响应页面请求与各类 REST 查询见 app.pyStream 流线程Stream.process()中依次执行input.Capture()采集帧 →dataset.AddImage(img)把帧放入录制队列 → 推理开启时调用model.Classify()与model.Visualize()→output.Render(img)通过 WebRTC 回传浏览器见 stream.pyModel 训练线程Model.train()中循环等待数据与training_enabled标志然后对当前数据集训练一个 epoch见 model.py。此外Dataset自身也是一个后台线程通过队列异步地把录制帧落盘为图片并写入标注见 dataset.py。快速开始运行 Recognizer前置条件已从源码构建 jetson-inference或使用 Docker 容器安装了PyTorch若从源码构建请按 building-repo-2.md 中“Installing PyTorch”一节安装或重新运行仓库根目录下的install-pytorch.sh脚本若使用 Docker 容器PyTorch 已预装安装应用依赖仅flask见 requirements.txt。启动命令$ cd jetson-inference/python/www/recognizer $ pip3 install -r requirements.txt $ python3 app.py --datadata/my_dataset--data指定数据集与模型存储的根路径默认data源码见 app.py启动后浏览器访问https://JETSON-IP:8050即可开始流式传输默认端口 8050可用--portN修改。注意接收浏览器端摄像头视频要求启用 HTTPS/SSL否则浏览器不会授权 WebRTC 调用摄像头。启用方法在仓库data/目录下用 openssl 生成自签名证书并设置SSL_KEY/SSL_CERT环境变量或直接传--ssl-key/--ssl-cert参数详见 webrtc-server.md 的 Enabling HTTPS / SSL 一节。应用默认将 WebRTC 同时作为输入与输出--inputwebrtc://:8554/input、--outputwebrtc://:8554/output见 app.py如需换成其他视频输入设备可用--input参数指定例如--input/dev/video0使用直连 Jetson 的 V4L2 摄像头。更多输入流协议与 URI 格式MIPI CSI、V4L2、RTP、RTSP、视频/图片文件等见 aux-streaming.md。网页端操作数据采集Collecting Data采集数据在浏览器页面完成流程如下如需更换画面来源先从页面上的stream source下拉框选择客户端摄像头按下Send按钮在Tags输入框中输入当前摄像头画面所属的类别标签可输入多个标签支持多标签标注标签输入完成后即可通过Record按钮录制或Upload上传图片进入数据集——按住Record按钮可连续录制一段视频序列逐帧截图入数据集。从底层看录制过程走的是Dataset.AddImage()与后台Dataset.record()队列每帧图像经cudaMemcpy拷贝后放入队列录制线程取出并以时间戳命名%Y%m%d_%H%M%S_%f.jpg保存为 JPG同时把当前激活标签写入tags.json标注文件dataset.py上传的图片则经/dataset/upload路由落盘并立即打标app.py。数据集目录结构如下data/my_dataset/ ├── images/ # 录制的 JPG 图片 ├── tags.json # 图片文件名 标签列表 的 JSON 标注 └── models/ # 训练模型输出model_best.pth / checkpoint.pth / resnet18.onnx / labels.txt保持标签分布均衡建议让各类别标签数量大致平衡否则模型容易偏向样本多的类别。展开页面上的Training下拉框可以查看数据集的标签分布class distribution与图片总数相关统计由 dataset.py 的update_class_distribution()计算并通过 model.py 的training_stats属性对外提供。训练Training随着新数据不断被打标加入可在页面Training下拉框中启用训练。训练进度与精度会实时刷新在页面上每个 epoch 结束时若模型达到当前最高精度就会被导出为 ONNX 并加载进 TensorRT 用于推理。训练命令行参数启动app.py时可设置的训练相关参数如下默认值以 app.py 源码为准CLI 参数说明默认值--data数据集与模型存储路径data--net/--networkDNN 网络架构支持 torchvision 中可用的分类模型如resnet18utils.py的reshape_model覆盖 resnet / alexnet / vgg / squeezenet / densenet / efficientnet / mobilenet / inception / googlenet 等resnet18--net-width模型输入宽度增大可提升精度224--net-height模型输入高度增大可提升精度224--batch-size训练批次大小1--workers数据加载线程数2--optimizer优化器adam或sgdadam--learning-rate优化器初始学习率0.001--no-augmentation关闭训练数据增强颜色抖动 / 随机翻转默认开启增强开启--print-freq每隔 N 步打印一次训练进度10训练循环与模型热切换的源码实现训练主循环位于 model.py关键行为包括动态类别数适配Model.train()用torchvision.models.__dict__args.network创建预训练模型并按数据集当前类别数调用reshape()重构输出层训练中若类别数发生变化train_epoch()会检测并自动重启当前 epochmodel.py。各架构的输出层重构成形逻辑见 utils.py 的reshape_model()损失函数自适应多标签数据集使用BCEWithLogitsLoss配合 sigmoid 计算多标签精度单标签使用CrossEntropyLoss配合 softmax见 model.py 与compute_accuracy()model.py数据增强与预处理默认启用ColorJitter(0.2, 0.2, 0.2, 0.2)与RandomHorizontalFlip随后统一Resize到网络输入尺寸、转 Tensor 并做 ImageNet 均值/方差归一化model.py优化器adam使用学习率--learning-ratesgd额外带 0.9 动量与 1e-4 权重衰减model.pyONNX 导出与 TensorRT 热加载每个 epoch 结束后save_checkpoint()写入checkpoint.pth若达到最高精度则复制为model_best.pth并调用export_onnx()多标签时在模型后拼接Sigmoid单标签拼接Softmax再以input_0/output_0为输入/输出名导出 ONNX 与labels.txt见 model.py随后load_inference()用imageNet(model..., labels...)加载 TensorRT 推理模型并套用置信度阈值与平滑参数model.py。整个过程无需重启应用模型在运行中动态切换。推理Inference推理可在页面的Classification下拉框中启用。使用多标签分类即数据集中存在同一图片带多个标签的情况时页面会展示所有置信度高于阈值的分类结果阈值可在页面实时控制对应/classification/confidence_thresholdREST 路由见 app.py。推理核心调用位于Model.Classify()model.py它会返回一组(classID, confidence)元组——多标签时topK0返回全部候选单标签时topK1只返回最可能的类别随后在Visualize()中把类别名与置信度叠加到画面model.py。扩展在识别到特定类别时触发动作你可以往Model.Classify()中添加自定义处理逻辑例如当检测到person类别时打印提示按你的类别名修改def Classify(self, img): Run classification inference and return the results. if not self.inference_enabled: return # returns a list of (classID, confidence) tuples self.results self.model_infer.Classify(img, topK0 if self.dataset.multi_label else 1) # to trigger custom actions/processing, add them here: for classID, confidence in self.results: if self.model_infer.GetClassLabel(classID) person: # update for your classes print(fdetected a person with {confidence * 100}% confidence) # do something in response return self.results修改后端服务端 Python 代码后记得重启app.py使改动生效。前后端通信REST 查询机制与之前的 Flask 示例一致Recognizer 通过 REST JSON 查询在客户端与服务器之间传递动态设置与状态常见路由包括完整列表见 app.pyGET /dataset/classes、GET|PUT /dataset/active_tags、GET|PUT /dataset/recording、POST /dataset/upload—— 数据集与标注相关GET|PUT /training/enabled、GET /training/stats—— 训练开关与进度统计GET|PUT /classification/enabled、GET|PUT /classification/confidence_threshold、GET|PUT /classification/output_smoothing—— 推理开关、置信度阈值与时间平滑系数GET /alerts—— 页面上显示的告警消息。这些路由大多借助 utils.py 的rest_property()/rest_function()封装了 GET/PUT 的样板逻辑。对 REST 查询机制的更详细讲解后端app.py与前端index.html的对应写法、Jinja 宏checkbox()/slider()的使用可参考 webrtc-flask.md 的 REST Queries 一节你也可以按同样模式为应用添加新的设置项。小结Recognizer 完整演示了「WebRTC 视频流 交互式数据采集 PyTorch 增量训练 ONNX/TensorRT 热切换推理」这一条 Jetson 边缘 AI 应用闭环Dataset线程负责异步录制与打标Model训练线程在后台随数据增长不断重训并在每个 epoch 用最优精度模型刷新 TensorRT 推理引擎Stream线程则保证 WebRTC 输入/输出与推理渲染同时进行。你可以在 python/www/recognizer 源码基础上通过扩展Model.Classify()、新增 REST 路由与前端控件快速搭建面向自身业务如安防人员识别、质检分类等的交互式识别系统WebRTC 底层的服务端配置与流协议细节可进一步阅读 webrtc-server.md 与 aux-streaming.md。赞分享人工智能计算机视觉深度学习微调【免费下载链接】jetson-inferenceHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.项目地址https://gitcode.com/gh_mirrors/je/jetson-inference点击查看免费下载相关推荐基于 jetson-inference 的多标签图像标注实战resnet18-tagging-voc 与 topK 分类接口详解基于 jetson inference 的多标签图像标注实战resnet18 tagging voc 与 topK 分类接口详解 多标签分类Multi La人工智能计算机视觉深度学习微调jetson-inference WebRTC Server 实战在 Jetson 与浏览器之间搭建低延迟视频流与边缘 AI 应用jetson inference WebRTC Server 实战在 Jetson 与浏览器之间搭建低延迟视频流与边缘 AI 应用 导读 本文聚焦 jetso人工智能计算机视觉深度学习微调X-AnyLabeling 视频交互式目标分割实战基于 SAM 2 的 iVOS 标注指南X AnyLabeling 视频交互式目标分割实战基于 SAM 2 的 iVOS 标注指南 本指南以 X AnyLabeling 官方示例 examples/人工智能AI 应用数据标注计算机视觉桌面应用多模态上一篇GTA5线上小助手终极游戏效率提升与个性化定制工具下一篇如何使用 build-plugin-alt 的 inject 注入调试在低代码项目中本地调试物料创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。