我想通过python和unity建立tcp通信发送摄像头捕获的一帧帧图片,这样unity就不用调用摄像头和python端起冲突了。但是出现了[WinError 10054] 远程主机强迫关闭了一个现有的连接。我unity的服务器端也开了,但还是报错。代码是抄的原帖:https://blog.csdn.net/zouxin_88/article/details/117325268
import os, sys, time
import socket
import cv2
import numpy
# 建立图像读取对象
capture = cv2.VideoCapture(0)
# 读取一帧图像,读取成功:ret=1 frame=读取到的一帧图像;读取失败:ret=0
ret, frame = capture.read()
# 压缩参数,后面cv2.imencode将会用到,对于jpeg来说,15代表图像质量,越高代表图像质量越好为 0-100,默认95
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 70]
def main():
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client.connect(("127.0.0.1", 49667))
except socket.error as e:
print("Address-related error connecting to server: %s" % e)
while True:
ret, frame = capture.read()
cv2.imshow("capture", frame)
if (cv2.waitKey(10) & 0XFF) == ord('q'):
client.close()
break
result, imgencode = cv2.imencode('.jpg', frame, encode_param)
# 建立矩阵
data = numpy.array(imgencode)
# 将numpy矩阵转换成字符形式,以便在网络中传输
stringData = data.tostring()
# 先发送要发送的数据的长度
# ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
print(len(stringData))
strlen = str(len(stringData)).ljust(16)
client.send(bytes(strlen, 'UTF-8'))
# 发送数据
client.send(stringData)
time.sleep(0.01)
client.close()
cv2.destroyAllWindows()
capture.release()