Socket通信误码测试
为检查网络通信中可能会产生误码,在原先图传程序的基础上编写了传输与回传图像的功能
客户端
from socket import *
import cv2 as cv
import numpy as np
import tkinter as tk
HOST = '192.168.2.99'
PORT = 1008
BUFSIZ =102400
ADDR = (HOST,PORT)
cam = cv.VideoCapture(0)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
encode_param = [int(cv.IMWRITE_JPEG_QUALITY), 60]
N = 0
NE = 0
while cam.isOpened():
ret, img = cam.read()
img_encode = cv.imencode('.jpg', img, encode_param)[1]
data = img_encode.tostring()
tcpCliSock.send(data)
#接收回传的图像信号并且解码
recv_data = tcpCliSock.recv(BUFSIZ)
recv_img_encode = np.fromstring(recv_data,dtype='uint8')
#对比两个array图像的区别
if not (recv_img_encode == img_encode).any():
NE = NE + 1 #统计错误图像数
N = N+1 #统计传输图像数
p = NE/N #计算错误率
print("ser:%2f sent:%d wrong:%d"%(p,N,NE))
recv_img = cv.imdecode(recv_img_encode,1)
cv.imshow('sent',img)
sig = cv.waitKey(1)
if sig is ord('q'):
break
tcpCliSock.close()
服务端
from pynq.overlays.base import BaseOverlay
from pynq.lib.video import *
import socket
import time
import cv2 as cv
import numpy as np
base = BaseOverlay("base.bit")
# monitor configuration: 640*480 @ 60Hz
Mode = VideoMode(640,480,24)
hdmi_out = base.video.hdmi_out
hdmi_out.configure(Mode,PIXEL_BGR)
hdmi_out.start()
HOST = '192.168.2.99' # host ip
PORT = 1008 #端口号
BUFSIZ = 102400 #消息的最大长度
ADDR = (HOST,PORT)
tcpSerSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(10)
while True:
print('等待连接...')
tcpCliSock, addr = tcpSerSock.accept()
print('连接到:', addr)
while True:
temp = tcpCliSock.recv(BUFSIZ)
if temp is not None:
img_code = np.fromstring(temp,dtype='uint8')
if img_code is None:
continue
img = cv.imdecode(img_code,1)
if img is None:
continue
tcpCliSock.send(temp)#回传消息
frame = cv.resize(img,(640,480))
outframe = hdmi_out.newframe()
outframe[0:480,0:640,:] = frame[0:480,0:640,:]
hdmi_out.writeframe(outframe)
tcpCliSock.close()
tcpSerSock.close()
统计结果
可以看到传了近1000张图像得到0错误的结果,说明此时的网络连接还是很稳定的。