python套接字pickled numpy数据未显示
我正在尝试通过套接字发送python opencv帧。我正在清除数据并取消勾选,但由于某种原因,它是空白的或没有显示任何内容 这是我运行python套接字pickled numpy数据未显示,python,sockets,opencv,python-sockets,Python,Sockets,Opencv,Python Sockets,我正在尝试通过套接字发送python opencv帧。我正在清除数据并取消勾选,但由于某种原因,它是空白的或没有显示任何内容 这是我运行client.py时的终端 new message length: b'720 ' import socket import numpy as np import cv2 import pickle HEADERSIZE = 10 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.c
client.py时的终端
new message length: b'720 '
import socket
import numpy as np
import cv2
import pickle
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1232))
while True:
full_msg = b''
new_msg = True
while True:
msg = s.recv(16)
if new_msg:
print(f'new message length: {msg[:HEADERSIZE]}')
msglen = int(msg[:HEADERSIZE])
new_msg = False
full_msg += msg
if len(full_msg)-HEADERSIZE == msglen:
print('full msg recvd')
print(full_msg[HEADERSIZE:])
d = pickle.loads(full_msg[HEADERSIZE:])
print(d)
cv2.namedWindow('Webcam', cv2.WINDOW_NORMAL)
cv2.imshow('Webcam', full_msg[HEADERSIZE:])
new_msg = True
full_msg = b''
print(full_msg)
import socket
import numpy as np
import cv2
import time
import pickle
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1232))
s.listen(5)
cap = cv2.VideoCapture(0)
while True:
clientsocket, address = s.accept()
print(f"Connection from {address} has been established!")
while True:
ret, frame = cap.read()
msg = pickle.dumps(frame)
print(frame)
msg = bytes(f'{len(frame):<{HEADERSIZE}}', "utf-8") + msg
clientsocket.send(msg)
它应该从服务器流式传输网络摄像头,但没有显示任何内容
以下是我的客户端和服务器代码:
client.py
new message length: b'720 '
import socket
import numpy as np
import cv2
import pickle
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1232))
while True:
full_msg = b''
new_msg = True
while True:
msg = s.recv(16)
if new_msg:
print(f'new message length: {msg[:HEADERSIZE]}')
msglen = int(msg[:HEADERSIZE])
new_msg = False
full_msg += msg
if len(full_msg)-HEADERSIZE == msglen:
print('full msg recvd')
print(full_msg[HEADERSIZE:])
d = pickle.loads(full_msg[HEADERSIZE:])
print(d)
cv2.namedWindow('Webcam', cv2.WINDOW_NORMAL)
cv2.imshow('Webcam', full_msg[HEADERSIZE:])
new_msg = True
full_msg = b''
print(full_msg)
import socket
import numpy as np
import cv2
import time
import pickle
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1232))
s.listen(5)
cap = cv2.VideoCapture(0)
while True:
clientsocket, address = s.accept()
print(f"Connection from {address} has been established!")
while True:
ret, frame = cap.read()
msg = pickle.dumps(frame)
print(frame)
msg = bytes(f'{len(frame):<{HEADERSIZE}}', "utf-8") + msg
clientsocket.send(msg)
server.py
new message length: b'720 '
import socket
import numpy as np
import cv2
import pickle
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1232))
while True:
full_msg = b''
new_msg = True
while True:
msg = s.recv(16)
if new_msg:
print(f'new message length: {msg[:HEADERSIZE]}')
msglen = int(msg[:HEADERSIZE])
new_msg = False
full_msg += msg
if len(full_msg)-HEADERSIZE == msglen:
print('full msg recvd')
print(full_msg[HEADERSIZE:])
d = pickle.loads(full_msg[HEADERSIZE:])
print(d)
cv2.namedWindow('Webcam', cv2.WINDOW_NORMAL)
cv2.imshow('Webcam', full_msg[HEADERSIZE:])
new_msg = True
full_msg = b''
print(full_msg)
import socket
import numpy as np
import cv2
import time
import pickle
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1232))
s.listen(5)
cap = cv2.VideoCapture(0)
while True:
clientsocket, address = s.accept()
print(f"Connection from {address} has been established!")
while True:
ret, frame = cap.read()
msg = pickle.dumps(frame)
print(frame)
msg = bytes(f'{len(frame):<{HEADERSIZE}}', "utf-8") + msg
clientsocket.send(msg)
导入套接字
将numpy作为np导入
进口cv2
导入时间
进口泡菜
来自信号输入信号、信号管道、信号单元DFL
信号(信号管、信号灯)
HEADERSIZE=10
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 绑定((socket.gethostname(),1232))
s、 听(5)
cap=cv2.视频捕获(0)
尽管如此:
clientsocket,地址=s.accept()
打印(f“已建立来自{address}的连接!”)
尽管如此:
ret,frame=cap.read()
msg=pickle.dumps(帧)
打印(帧)
msg=bytes(f'{len(frame):当您从服务器流式传输720字节的帧时,实际上是一帧接一帧地连续发送每帧730字节(长度10字节+数据720字节)。
在客户端中,每个recv()
读取16个字节。因此,如果len(full_msg)-HEADERSIZE==msglen:
的标题大小为10,则您的条件将永远不会为真,因为730不能被16整除
因此,您的程序在上无限循环,而在客户机中为True:
请尝试下面的客户端程序。我使用虚拟数据进行了测试
client.py
导入套接字
将numpy作为np导入
进口cv2
进口泡菜
HEADERSIZE=10
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 连接((socket.gethostname(),1232))
尽管如此:
msg_length=int(s.recv(HEADERSIZE))
完整消息=b''
当从服务器传输720字节的帧时,len(full_msg)实际上是一帧接一帧地连续发送每帧730字节(长度10字节+数据720字节)。
在客户端中,每个recv()
读取16个字节。因此,如果len(full_msg)-HEADERSIZE==msglen:
的标题大小为10,则您的条件将永远不会为真,因为730不能被16整除
因此,您的程序在上无限循环,而在客户机中为True:
请尝试下面的客户端程序。我使用虚拟数据进行了测试
client.py
导入套接字
将numpy作为np导入
进口cv2
进口泡菜
HEADERSIZE=10
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 连接((socket.gethostname(),1232))
尽管如此:
msg_length=int(s.recv(HEADERSIZE))
完整消息=b''
虽然len(full_msg)解决了我最初提出的问题,但现在我遇到了一个新问题。实际上,在您回复解决方案时,我重新编写了我的程序,但我没有使用pickle,而是自己进行字节转换。我到达了与您的解决方案相同的位置:回溯(最近一次调用):文件“client.py”,第21行,cv2.imshow(“网络摄像头”,完整信息)TypeError:参数“mat”应为Ptr
这解决了我最初提出的问题,但现在我有了一个新问题。实际上,在您回答您的解决方案时,我重新编写了我的程序,但我没有使用pickle,而是自己进行字节转换。我到达了与您的解决方案相同的位置:回溯(最后一次调用):cv2.imshow('Webcam',full_msg)TypeError中第21行的文件“client.py”:参数“mat”应为Ptr