实现目标识别后端与前端的视频流和识别结果同步展示

在这篇博客中,我们将探讨如何使用服务器发送事件(Server-Sent Events,SSE)技术,将目标识别后端的视频流和识别结果实时传输到前端,以实现视频和结果的同步展示。

后端代码

首先,让我们看一下后端的Python代码,它使用Flask框架来创建一个Web应用程序,将视频流和识别结果打包成JSON格式,并使用SSE向前端实时发送这些数据。

from flask import Flask, Response
import cv2
import base64
import json

app = Flask(__name__)

# 视频文件路径
video_path = '1.mp4'

# 初始化识别结果
recognition_result = "这是一个示例识别结果."

def generate_frames():
    cap = cv2.VideoCapture(video_path)
    while True:
        success, frame = cap.read()
        if not success:
            break
        ret, buffer = cv2.imencode('.jpg', frame)
        frame_bytes = buffer.tobytes()
        frame_base64 = base64.b64encode(frame_bytes).decode('utf-8')
        data = {
            "frame": frame_base64,
            "recognition_result": recognition_result
        }
        data_json = json.dumps(data)
        yield f"data: {data_json}\n\n"

@app.route('/video_feed')
def video_feed():
    return Response(generate_frames(), content_type='text/event-stream')

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

前端代码

接下来,让我们看一下前端的JavaScript代码,它使用SSE来接收从后端传输的视频流和识别结果,并将它们展示在网页上。

const eventSource = new EventSource("/video_feed");

// 监听 SSE 事件
eventSource.onmessage = (event) => {
    const eventData = JSON.parse(event.data);

    // 获取识别结果
    const recognitionResult = eventData.recognition_result;

    // 获取视频流
    const videoFrameData = eventData.frame;

    // 在页面上展示识别结果
    const resultElement = document.getElementById("recognitionResult");
    resultElement.innerHTML = recognitionResult;

    // 在页面上展示视频流
    const videoFrameElement = document.getElementById("videoFrame");
    videoFrameElement.src = `data:image/jpeg;base64, ${videoFrameData}`;
}

HTML结构

最后,这是一个简单的HTML结构,用于在页面上展示识别结果和视频流。

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>目标识别展示</title>
</head>
<body>
    <h1>目标识别结果:</h1>
    <p id="recognitionResult"></p>
    <h1>视频流:</h1>
    <img id="videoFrame" src="" alt="视频流">
    <script src="your-js-file.js"></script>
</body>
</html>

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值