Python 在HTML中显示视频队列缓冲区

Python 在HTML中显示视频队列缓冲区,python,html,opencv,video,queue,Python,Html,Opencv,Video,Queue,我希望能够在HTML文件中查看网络摄像头中的opencv帧队列 我有一个writer函数,它将网络摄像头帧写入python队列: def writer(): cap = cv2.VideoCapture(0) while(True): # Capture frame-by-frame ret, frame = cap.read() # If a frame is read, add new frame to queue

我希望能够在HTML文件中查看网络摄像头中的opencv帧队列

我有一个writer函数,它将网络摄像头帧写入python队列:

def writer():
    cap = cv2.VideoCapture(0)
    while(True):
        # Capture frame-by-frame
        ret, frame = cap.read()
        # If a frame is read, add new frame to queue
        if ret == True:
            q.put(frame)
        else:
            break
我的代码的主要部分如下:

q = queue.Queue()
threading.Thread(target=writer).start()

我现在有一个名为q的队列,我想在HTML文件中查看它。最好的方法是什么?

我假设您了解Python和Web开发HTML、CSS、JavaScript,因为您需要在两端创建一些东西

在HTML中,使用JavaScript不断地请求帧并显示它们;一种简单的方法是使用ajax$.get功能从jQuery获取并显示新图像,并使用JavaScript setInterval方法调用每x毫秒加载一次新图像的函数检查简单的实现,许多实现没有ajax,例如:

setInterval(function () {
var d = new Date();
    $("#myimg").attr("src", "/myimg.jpg?"+d.getTime());
}, 2000);
我建议您使用AJAX这样做的原因是,您可能希望用Python创建一个web服务器,这样您的JavaScript就可以通过使用一个简单的restapi来请求新的帧,该API为图像帧提供服务。在Python中,从头开始创建web服务器很容易,如果以后需要将其扩展为更复杂的内容,也可以使用库。根据您的描述,您所需要的只是创建一个具有一项服务的web服务器:下载图像


在没有web服务器的情况下,执行此操作的一种非常简单且缓慢的方法是使用imwrite将帧写入磁盘,并在循环中使用waitkeymissions在重写相同的图像文件之前等待。这样,您就可以使用上面的JavaScript代码重新加载此图像。

此方法是否适合每秒更新60次?因为传入的帧流将是每秒约60帧,即使是24帧,用任何简单的方法都会过于乐观。30 fps需要您使用Python构建一个流式web服务器,您可以使用套接字这样做:。但是,如果有多人需要同时观看您的视频,您可能需要查看现有的云服务。顺便说一句,如果我的答案对您有用,请将其标记为解决方案: