Sending live video frame over network in python opencv

后端 未结 7 1663
南旧
南旧 2020-11-28 06:39

I\'m trying to send live video frame that I catch with my camera to a server and process them. I\'m usig opencv for image processing and python for the language. Here is my

7条回答
  •  抹茶落季
    2020-11-28 06:43

    I have made it to work on my MacOS.

    I used the code from @mguijarr and changed the struct.pack from "H" to "L".

    Server.py:
    ==========
    import socket
    import sys
    import cv2
    import pickle
    import numpy as np
    import struct ## new
    
    HOST=''
    PORT=8089
    
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    print 'Socket created'
    
    s.bind((HOST,PORT))
    print 'Socket bind complete'
    s.listen(10)
    print 'Socket now listening'
    
    conn,addr=s.accept()
    
    ### new
    data = ""
    payload_size = struct.calcsize("L") 
    while True:
        while len(data) < payload_size:
            data += conn.recv(4096)
        packed_msg_size = data[:payload_size]
        data = data[payload_size:]
        msg_size = struct.unpack("L", packed_msg_size)[0]
        while len(data) < msg_size:
            data += conn.recv(4096)
        frame_data = data[:msg_size]
        data = data[msg_size:]
        ###
    
        frame=pickle.loads(frame_data)
        print frame
        cv2.imshow('frame',frame)
    
        key = cv2.waitKey(10)
        if (key == 27) or (key == 113):
            break
    
    cv2.destroyAllWindows()
    
    
    
    Client.py:
    ==========
    import cv2
    import numpy as np
    import socket
    import sys
    import pickle
    import struct ### new code
    cap=cv2.VideoCapture(0)
    clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    clientsocket.connect(('localhost',8089))
    while True:
        ret,frame=cap.read()
        data = pickle.dumps(frame) ### new code
        clientsocket.sendall(struct.pack("L", len(data))+data) ### new code
    

提交回复
热议问题