Python 试图将视频从http地址流式传输到opencv

Python 试图将视频从http地址流式传输到opencv,python,http,opencv,raspberry-pi,video-streaming,Python,Http,Opencv,Raspberry Pi,Video Streaming,我对这方面还比较陌生,但以下是我要做的。我有一个raspberry zero连接到raspberry pi摄像头,我通过uv4l无线传输raspberry pi的视频。我使用以下命令: sudo uv4l-f-k-sched fifo-mem lock-driver raspicam-auto-video_nr-编码h264-宽度1080-高度720-启用服务器 我可以通过查看pi的ip地址在web浏览器上访问此流。现在我想做的是能够在opencv中查看视频流。这是我读过的作品,但是我遇到了以下

我对这方面还比较陌生,但以下是我要做的。我有一个raspberry zero连接到raspberry pi摄像头,我通过uv4l无线传输raspberry pi的视频。我使用以下命令:

sudo uv4l-f-k-sched fifo-mem lock-driver raspicam-auto-video_nr-编码h264-宽度1080-高度720-启用服务器

我可以通过查看pi的ip地址在web浏览器上访问此流。现在我想做的是能够在opencv中查看视频流。这是我读过的作品,但是我遇到了以下错误:

Streaming http://192.168.1.84:8080/stream
Traceback (most recent call last):
  File "videoStream.py", line 17, in <module>
    bytes+=stream.read('1024')
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 448, in read
    b = bytearray(amt)
TypeError: string argument without an encoding

我不确定如何解决此问题,或者是否有更好的方法在opencv中查看此视频流。

我无法验证您的代码,因为我没有流媒体设置。但首先,我认为stream.read'1024'应该是stream.read1024。1024是缓冲区的大小(以字节为单位),而不是1024的字符串

其次,urllib.request.openurl.read返回一个byte对象,因此当代码稍后到达行np.fromstringjpg,dtype=np.uint8时,可能会出现解码问题,因为np.fromstring希望jpg是字符串,但jpg的类型是字节。您需要将其转换为如下字符串:

np.fromstring(jpg.decode('utf-8'), dtype=np.uint8)
替换

bytes=''

试试这个。改变

bytes=''
while True:
    bytes+=stream.read('1024')
    a = bytes.find('\xff\xd8')
    b = bytes.find('\xff\xd9')

和使用

i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)

这在Python3.5,cv2版本4.0.0中对我有效,所以我尝试删除单引号,使行stream.read1024,但我得到了以下错误:文件videoStream.py,第17行,字节+=stream.read1024 TypeError:必须是str,而不是字节,因此我相信stream.read需要单引号。代码仍然没有通过这一行。还有其他建议吗?
bytes+=stream.read('1024')
bytes+=bytearray(stream.read(1024))
bytes=''
while True:
    bytes+=stream.read('1024')
    a = bytes.find('\xff\xd8')
    b = bytes.find('\xff\xd9')
bytes=b''
while True:
    bytes+=stream.read(1024)
    a = bytes.find(b'\xff\xd8')
    b = bytes.find(b'\xff\xd9')
i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)