Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用摄像头或IP摄像头加快网络设备的视频播放速度_Python_Opencv_Flask_Raspberry Pi_Video Streaming - Fatal编程技术网

Python 使用摄像头或IP摄像头加快网络设备的视频播放速度

Python 使用摄像头或IP摄像头加快网络设备的视频播放速度,python,opencv,flask,raspberry-pi,video-streaming,Python,Opencv,Flask,Raspberry Pi,Video Streaming,我正在尝试使用python中的flask api从我的raspberry pi流式传输视频。以便我可以在工作站上处理单个帧。就数据传输而言,它运行良好。然而,在客户端,读取帧的过程引入了1-3秒的延迟,这在实时应用程序中是不可取的。我可以在我的web浏览器中观看视频播放,而不需要任何延迟,这证明我的raspberry pi和网络是无辜的。问题在于从字节流读取单个帧的方法。关于在这样的应用程序中消除延迟的任何想法。下面是我的客户端应用程序代码。示例应用程序的完整源代码可在以下位置找到: 主要建议:

我正在尝试使用python中的flask api从我的raspberry pi流式传输视频。以便我可以在工作站上处理单个帧。就数据传输而言,它运行良好。然而,在客户端,读取帧的过程引入了1-3秒的延迟,这在实时应用程序中是不可取的。我可以在我的web浏览器中观看视频播放,而不需要任何延迟,这证明我的raspberry pi和网络是无辜的。问题在于从字节流读取单个帧的方法。关于在这样的应用程序中消除延迟的任何想法。下面是我的客户端应用程序代码。示例应用程序的完整源代码可在以下位置找到:

主要建议:

  • 搜索结束标记,然后搜索开始标记

  • 读取更多数据(例如64kb)

  • 删除其他帧并仅显示最后一帧

我无法对其进行测试,但以下是一般代码:

import cv2
import urllib
import numpy as np

stream = urllib.urlopen('http://192.168.100.128:5000/video_feed')
bytes = ''
while True:
    buff = stream.read(64 * 1024)
    bytes += buff
    if buff.rfind(b'\xff\xd9') != -1: # buff is smaller than bytes
        endmark = bytes.rfind(b'\xff\xd9') + 2
        startmark = bytes[:endmark - 2].rfind(b'\xff\xd8')

        jpg = bytes[startmark:endmark] # please, check indexes! I could mess up with them.
        bytes = bytes[endmark:]

        img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
        cv2.imshow('Video', img)
        if cv2.waitKey(1) == 27:
            exit(0)
我找不到stream.read的行为。若他等到缓冲区满了,你们就需要减小缓冲区的大小。若他只是读取N字节直到流结束,那个么它将工作

主要建议:

  • 搜索结束标记,然后搜索开始标记

  • 读取更多数据(例如64kb)

  • 删除其他帧并仅显示最后一帧

我无法对其进行测试,但以下是一般代码:

import cv2
import urllib
import numpy as np

stream = urllib.urlopen('http://192.168.100.128:5000/video_feed')
bytes = ''
while True:
    buff = stream.read(64 * 1024)
    bytes += buff
    if buff.rfind(b'\xff\xd9') != -1: # buff is smaller than bytes
        endmark = bytes.rfind(b'\xff\xd9') + 2
        startmark = bytes[:endmark - 2].rfind(b'\xff\xd8')

        jpg = bytes[startmark:endmark] # please, check indexes! I could mess up with them.
        bytes = bytes[endmark:]

        img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
        cv2.imshow('Video', img)
        if cv2.waitKey(1) == 27:
            exit(0)

我找不到stream.read的行为。若他等到缓冲区满了,你们就需要减小缓冲区的大小。若他只是读取N字节直到流结束,那个么它将工作

让我试试这个。嘿,我已经转移到项目的其他部分,现在我的目标检测和电机驱动部分完成了,我又回到了视频流部分。我试着增加或减少缓冲区大小,但没有效果。在另一边,视频流从浏览器流畅地播放。让我试试这个。嘿,我已经转移到项目的其他部分,现在我的目标检测和电机驱动部分完成了,我又回到了视频流部分。我试着增加或减少缓冲区大小,但没有效果。另一方面,视频流从浏览器流畅地播放。