Skip to content

Instantly share code, notes, and snippets.

@robobe
Created August 23, 2019 07:19
Show Gist options
  • Save robobe/de236a7b361830b18c0953c25febdb99 to your computer and use it in GitHub Desktop.
Save robobe/de236a7b361830b18c0953c25febdb99 to your computer and use it in GitHub Desktop.
send capture image over udp socket
import cv2
import socket
import struct
from datetime import datetime
cap = cv2.VideoCapture(1)
fps = cap.get(cv2.CAP_PROP_FPS)
font = cv2.FONT_HERSHEY_SIMPLEX
JPEG_QUALITY = 70
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), JPEG_QUALITY]
white = (255,255,255)
black = (0, 0, 0)
FONT_SCALE = 0.5
BUFFER_SIZE = 1024
ADDR = ("127.0.0.1", 5252)
HEADER_START = b"START"
def build_header(size):
size = struct.pack("@I", size)
header = HEADER_START + size
return header
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
continue
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# frame = cv2.threshold(frame, 128, 255, cv2.THRESH_BINARY)[1]
result, enc_img = cv2.imencode('.jpg', frame, encode_param)
data = enc_img.tostring()
enc_size = len(data)
#send header
header = build_header(enc_size)
sock.sendto(header, ADDR)
#send data
counter = 0
while counter < enc_size:
buf = data[counter: counter+BUFFER_SIZE]
sock.sendto(buf, ADDR)
counter += BUFFER_SIZE
cv2.putText(frame, str(enc_size), (10,15),
font, FONT_SCALE, black, 2, cv2.LINE_AA)
cv2.imshow("source", frame)
if cv2.waitKey(1)== 27:
break
cap.release()
cv2.destroyAllWindows()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment