[英]How to sync client and server socket python Docker
我有以下從客戶端向 docker 容器內的服務器發送幀。 當我運行以下代碼時,客戶端不會等待服務器並發送啟動數據。 非常感謝有關如何解決此問題的幫助。
流光.py
context = zmq.Context()
footage_socket = context.socket(zmq.PUB)
footage_socket.connect('tcp://192.168.56.103:5555')
videoFile = "D:/testing.mp4"
camera = cv2.VideoCapture(videoFile)
while True:
grabbed, frame = camera.read()
frame = cv2.resize(frame, (224, 224))
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
footage_socket.send(jpg_as_text)
查看器.py
model = VGG19( weights="imagenet" )
context = zmq.Context()
footage_socket = context.socket(zmq.SUB)
footage_socket.bind('tcp://0.0.0.0:5555')
footage_socket.setsockopt_string(zmq.SUBSCRIBE, np.unicode(''))
while True:
frame = footage_socket.recv_string()
img = base64.b64decode(frame)
npimg = np.fromstring(img, dtype=np.uint8)
source = cv2.imdecode( npimg, 1 )
frame=cv2.resize(source,(224,224)).astype("float32")
image = img_to_array( source)
image = image.reshape( (1, image.shape[0], image.shape[1],
image.shape[2]) )
image = preprocess_input( image )
preds = model.predict(image)
代碼工作正常我能夠接收完整的幀,但最后我收到以下錯誤。 錯誤
frame = cv2.resize(frame, (224, 224)) # resize the frame
cv2.error: OpenCV(4.2.0) C:\projects\opencv-
python\opencv\modules\imgproc\src\resize.cpp:4045: error: (-215:Assertion
failed) !ssize.empty() in function 'cv::resize'
謝謝,非常感謝幫助
如果.read()
為空,您不會關閉 while 循環。 所以你必須在這里添加一個if
語句:
context = zmq.Context()
footage_socket = context.socket(zmq.PUB)
footage_socket.connect('tcp://192.168.56.103:5555')
videoFile = "D:/testing.mp4"
camera = cv2.VideoCapture(videoFile)
while True:
grabbed, frame = camera.read()
if not grabbed:
break
frame = cv2.resize(frame, (224, 224))
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
footage_socket.send(jpg_as_text)
實際上,我沒有您提供的測試數據,因此您可能必須檢查框架是否為空。 如果是真的,您必須中斷 while 循環以避免在錯誤中運行。
處理此問題的另一種可能方法是使用 try 和 except 語句捕獲錯誤:
context = zmq.Context()
footage_socket = context.socket(zmq.PUB)
footage_socket.connect('tcp://192.168.56.103:5555')
videoFile = "D:/testing.mp4"
camera = cv2.VideoCapture(videoFile)
while True:
grabbed, frame = camera.read()
try:
frame = cv2.resize(frame, (224, 224))
except cv2.error:
break
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
footage_socket.send(jpg_as_text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.