用资料里5.4.9的智能盒子做了一个rtsp推流,出来的视频流识别方面没什么问题,但是帧率太低了,有没有办法提高帧率和流畅度


如图帧率只有11,还有个问题就是想问问 Model confidence的配置文件在哪里,想修改置信度的下限能通过配置文件或者源码修改吗

你好,这块的代码是完全开源的,包括模型的confidence配置,可以尝试去launch文件里面看具体配置文件的路径

11侦 挺不错了, 你是怎么推流的啊, 我想学习一下

针对您提到的 RTSP 推流帧率低(11 FPS)Model Confidence 配置 两个问题,结合社区现有案例,给出以下优化建议:


一、RTSP 推流帧率优化方案

1. 瓶颈分析

11 FPS 的帧率偏低,常见瓶颈在以下环节:

  • 编码环节:是否使用了硬件编码(H.264/H.265)?软件编码会占用大量 CPU。
  • 推流协议:RTSP 推流是否设置了合理的 GOP、码率、分辨率?
  • 数据拷贝:是否存在多次 NV12 ↔ BGR 转换?
  • 线程阻塞:推流线程是否与推理线程耦合?

2. 优化步骤

:white_check_mark: 使用硬件编码器(推荐)

RDK S100/X3/X5 均支持硬件编码,避免使用 OpenCV 的 cv2.VideoWriter 软件编码。

# 示例:使用 ffmpeg 硬件编码推流
ffmpeg -f v4l2 -input_format nv12 -video_size 640x480 -i /dev/video0 \
  -c:v h264_v4l2m2m -b:v 2M -g 30 -f rtsp rtsp://your_server/live/stream

:white_check_mark: 降低推流分辨率

如果推理用 640x640,推流可降至 640x480 或 720p,减少编码负载。

:white_check_mark: 零拷贝 + 多线程分离

参考社区案例 RDK X5 MIPI 摄像头推理帧率优化,建议:

  • 推理线程与推流线程分离
  • 使用共享内存传递 NV12 数据,避免拷贝
  • 推流线程独立运行,不阻塞推理
# 简化示例:双线程结构
def infer_thread():
    while True:
        nv12 = camera.get_infer_frame()
        results = model.infer(nv12)
        with lock:
            shared_results = results

def rtsp_thread():
    while True:
        nv12 = camera.get_stream_frame()
        with lock:
            draw_results(nv12, shared_results)
        encoded = hw_encode(nv12)  # 硬件编码
        rtsp_push(encoded)

:white_check_mark: 调整 RTSP 参数

  • GOP(关键帧间隔):设为 30(1 秒 1 个 I 帧)
  • 码率:2~4 Mbps(根据网络调整)
  • 帧率:显式设置为 30 fps

二、Model Confidence 配置文件位置

根据管理员 @Marcelo615 的回复,置信度配置在 launch 文件中指定,通常路径如下:

# 常见配置文件路径
/opt/tros/share/hobot_dnn/config/
├── yolov5s_672x672_nv12.bin
├── yolov5s_672x672_nv12.yaml  # ← 置信度配置在此

# 或在 launch 文件中指定
<launch>
  <node pkg="hobot_dnn" type="dnn_node" name="dnn_node">
    <param name="model_path" value="/path/to/model.bin"/>
    <param name="config_path" value="/path/to/config.yaml"/>
    <param name="confidence_threshold" value="0.25"/>  <!-- 可直接修改 -->
  </node>
</launch>

修改方法

  1. 直接修改 launch 文件
    ros2 param set /dnn_node confidence_threshold 0.3
    
  2. 修改 YAML 配置文件
    # config.yaml
    model:
      path: /path/to/model.bin
      confidence_threshold: 0.3
      nms_threshold: 0.45
    
  3. 源码修改(如需动态调整):
    // dnn_node.cpp
    double conf_thresh = node->declare_parameter("confidence_threshold", 0.25);
    

三、参考资源

  1. RTSP 推流教程 - X3 MIPI 摄像头
  2. 帧率优化案例 - RDK X5 推理 + 显示分离
  3. TROS 高效输出示例

四、下一步建议

  1. 确认推流方式:您目前是用 ffmpeg、GStreamer 还是自定义代码推流?
  2. 检查编码方式:是否使用了硬件编码?
  3. 提供 launch 文件路径:方便定位 confidence 配置文件

如果方便,可以贴出您的推流代码或 launch 文件,我可以帮您具体优化。