SAM3流媒体视频推理;kernels减少拓扑错误;流式视频推理原理;websocket
1.SAM3流媒体视频推理
(1)预加载视频推理与流媒体视频推理的概念区别:
| 项目 | 预加载视频推理 | 流媒体视频推理 |
|---|---|---|
| 数据来源 | 本地视频文件 | 摄像头 / RTSP / WebRTC |
| 延迟 | 高 | 低(实时) |
| 处理方式 | 批处理,多帧优化 | 单帧流式,不可回溯 |
| GPU效率 | 高 | 较低 |
| 可否回溯帧 | ✔️ 可 | ❌ 不可 |
| 是否实时 | ❌ 否 | ✔️ 是 |
| 应用场景 | 离线分析 | 实时监控 |
(2)预加载视频推理与流媒体视频推理的运用区别:
| 特点 | 流式视频推理 | 普通视频(preload)推理 |
|---|---|---|
| 是否一次性加载完整视频 | ❌ 否(逐帧) | ✔ 是(加载整个视频) |
| 模型是否保留上一帧的状态 | ✔ 是(使用 inference_session) |
❌ 否 |
| 是否适用实时 RTSP / 摄像头 | ✔ 是 | ❌ 否 |
| 延迟 | 低 | 高 |
| 内存占用 | 低 | 高 |
对于实时应用,Transformer 实现的 SAM3 视频支持在视频帧到达时立即进行处理
2.kernels减少拓扑错误
但始终没有找到kernels这个库、网上也没有关于这个库的使用,暂时搁置,使用手工代码处理拓扑错误
SAM / SAM3 的 masks 在后处理阶段可能出现:
小碎片(sprinkles)
小洞(holes)
边缘不连续
多余小区域
kernels 提供了形态学与 NMS 类后处理,对这些问题有明显改善。
kernels替代了之前处理拓扑错误的手工代码,
mask = kr.remove_small_regions(mask, min_size=100)(移除小区域/碎片)
mask = km.clean_mask(mask)(清理噪点 sprinkle removal)
mask = km.fill_holes(mask)(填补小洞)
mask = km.smooth(mask)(平滑边缘)
mask = km.fix_topology(mask)(修复掩码拓扑结构)
3.流式视频推理原理
流式视频推理原理就是:持续从摄像头/RTSP/视频流读取帧 → SAM3 逐帧实时推理 → 将结果实时返回前端。
4.websocket
既然要使用流式视频推理,就要使用不同的通信方式。
WebSocket 是一种 浏览器与服务器之间的实时双向通信协议。
一句话总结它的作用:
✅ WebSocket = 一条永远不断开的管道,可以实时发送和接收数据
Postman无法测试websocket
Postman 只能发 HTTP POST
两者不是一回事。
websocket的路径写法:
@router.websocket("/stream/text")
ws.connect("ws://localhost:7999/sam3/video/stream/text")
使用python直接模拟请求测试:
import websocket
import json
ws = websocket.WebSocket()
浙公网安备 33010602011771号