关于yolov5部署到web(flask)上 边界框不显示的问题

关于yolov5部署在flask上 实在不知道为什么。明明推理结果都有了 但是在web上没有实时跟随,本地的视频和图片我在web上做一个表单的提交 上传文件后就可以进行模型推理 并且会显示在web界面,如果我用的是rtmp的网络视频流 推理结果有 在终端也看到了打印信息 说明是没有把保存边界框的图片上传到web上

img

下面是主要的源码

img

img


从这里开始会根据我的类型去选择相应的处理由于我模型进行推理了所以识别到url形式的视频流是走下去了的

img

从这里开始进行便利每个图像的目标检测结果

img

img


然后在界面上打印检测的一些信息,从图一看也确实能够看到 但是web上并没有显示

img


最后是这个视频流的处理方式… 实在不知道为什么不能在web上也显示边界框 可能是我哪个地方理解错了吧 有没有佬指导一下 秋梨膏

Batch size设置过大

【以下回答由 GPT 生成】

【问题分析】 根据问题描述,目前在Flask的web界面上,边界框无法实时显示,但在本地上传视频或图片后,在web界面上可以正常显示边界框。此外,使用rtmp的网络视频流时,模型的推理结果能够打印在终端上,但边界框却没有显示在web界面上。可能的原因有: 1. Web界面未及时更新边界框的显示。 2. 通过rtmp网络视频流方式处理视频帧的逻辑有问题。

【问题解决方案】 根据问题分析,可以采取以下解决方案:

  1. 确保Web界面及时更新显示:在视频帧处理完成后,需要将结果传递到前端的Web界面上进行显示。可以使用Flask的模板引擎,如Jinja2,来动态渲染结果。
  2. 重新审查通过rtmp网络视频流方式处理视频帧的逻辑:确认是否正确获取到视频帧数据,是否正确进行模型推理并得到边界框结果。

【代码示例】 下面是一个简化的代码示例,用于演示在Flask的web界面上实时显示边界框的过程。

from flask import Flask, render_template
import cv2
import numpy as np

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/video_feed')
def video_feed():
    # 在此处获取视频流,并将视频帧逐一处理
    cap = cv2.VideoCapture("rtmp://your_stream_url")
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        # 在此处对视频帧进行预处理(如调整大小、颜色空间转换等),然后进行模型推理
        processed_frame, bboxes = process_frame(frame)

        # 将边界框结果传递到前端的Web界面上进行显示(可以使用Flask的模板引擎)
        return render_template('video.html', frame=processed_frame, bboxes=bboxes)

def process_frame(frame):
    # 在此处进行预处理和模型推理,得到边界框结果
    # ...

    return processed_frame, bboxes

if __name__ == '__main__':
    app.run()

在上述示例代码中,index.html是主页面模板,video.html是用于显示视频帧和边界框的模板。在video_feed路由中,通过cap.read()逐一获取视频帧,然后调用process_frame函数进行预处理和模型推理,得到边界框结果。最后,在video.html的模板中,将处理后的视频帧和边界框结果展示在前端的Web界面上。

以上是一种基本的解决方案,具体的实现需要根据自己的项目需要进行调整。同时,如果仍然遇到问题,可以进一步检查代码逻辑是否正确、日志输出是否正常等,以便找到问题所在。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^