簡體   English   中英

如何同步客戶端和服務器套接字 python Docker

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM