Skip to content

Instantly share code, notes, and snippets.

@kittinan
Last active April 30, 2024 03:37
Show Gist options
  • Save kittinan/e7ecefddda5616eab2765fdb2affed1b to your computer and use it in GitHub Desktop.
Save kittinan/e7ecefddda5616eab2765fdb2affed1b to your computer and use it in GitHub Desktop.
Python OpenCV webcam send image frame over socket
import cv2
import io
import socket
import struct
import time
import pickle
import zlib
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('192.168.1.124', 8485))
connection = client_socket.makefile('wb')
cam = cv2.VideoCapture(0)
cam.set(3, 320);
cam.set(4, 240);
img_counter = 0
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
while True:
ret, frame = cam.read()
result, frame = cv2.imencode('.jpg', frame, encode_param)
# data = zlib.compress(pickle.dumps(frame, 0))
data = pickle.dumps(frame, 0)
size = len(data)
print("{}: {}".format(img_counter, size))
client_socket.sendall(struct.pack(">L", size) + data)
img_counter += 1
cam.release()
import socket
import sys
import cv2
import pickle
import numpy as np
import struct ## new
import zlib
HOST=''
PORT=8485
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()
data = b""
payload_size = struct.calcsize(">L")
print("payload_size: {}".format(payload_size))
while True:
while len(data) < payload_size:
print("Recv: {}".format(len(data)))
data += conn.recv(4096)
print("Done Recv: {}".format(len(data)))
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack(">L", packed_msg_size)[0]
print("msg_size: {}".format(msg_size))
while len(data) < msg_size:
data += conn.recv(4096)
frame_data = data[:msg_size]
data = data[msg_size:]
frame=pickle.loads(frame_data, fix_imports=True, encoding="bytes")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
cv2.imshow('ImageWindow',frame)
cv2.waitKey(1)
@QiangZiBro
Copy link

It works for me, but the speed is slow, anyone has suggestions?

@Spedley2142
Copy link

Amazing code and really helpfull. It makes so much difference when learning if you can start from code that is functional!

Thanks. :)

@AayushBajaj2000
Copy link

Hello, the Server side code gives an syntax error on line 34 over Jetson Nano. But on my Windows PC run very well. What is the difference, Do you have an idea. both system use Python 3.7.

Thanks in advance

Hey did you figure anything out for this? Im trying to do the same.

@fischer7
Copy link

This is working, while chat gpt didn't the job.
So, good job ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment