move streaming to new folder + other method
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import io
|
||||
import socket
|
||||
import struct
|
||||
import time
|
||||
import picamera
|
||||
|
||||
# Connect a client socket to my_server:8000 (change my_server to the
|
||||
# hostname of your server)
|
||||
client_socket = socket.socket()
|
||||
client_socket.connect(('my_server', 8000))
|
||||
|
||||
# Make a file-like object out of the connection
|
||||
connection = client_socket.makefile('wb')
|
||||
try:
|
||||
with picamera.PiCamera() as camera:
|
||||
camera.resolution = (640, 480)
|
||||
# Start a preview and let the camera warm up for 2 seconds
|
||||
camera.start_preview()
|
||||
time.sleep(2)
|
||||
|
||||
# Note the start time and construct a stream to hold image data
|
||||
# temporarily (we could write it directly to connection but in this
|
||||
# case we want to find out the size of each capture first to keep
|
||||
# our protocol simple)
|
||||
start = time.time()
|
||||
stream = io.BytesIO()
|
||||
for foo in camera.capture_continuous(stream, 'jpeg'):
|
||||
# Write the length of the capture to the stream and flush to
|
||||
# ensure it actually gets sent
|
||||
connection.write(struct.pack('<L', stream.tell()))
|
||||
connection.flush()
|
||||
# Rewind the stream and send the image data over the wire
|
||||
stream.seek(0)
|
||||
connection.write(stream.read())
|
||||
# If we've been capturing for more than 30 seconds, quit
|
||||
if time.time() - start > 30:
|
||||
break
|
||||
# Reset the stream for the next capture
|
||||
stream.seek(0)
|
||||
stream.truncate()
|
||||
# Write a length of zero to the stream to signal we're done
|
||||
connection.write(struct.pack('<L', 0))
|
||||
finally:
|
||||
connection.close()
|
||||
client_socket.close()
|
||||
@@ -0,0 +1,47 @@
|
||||
import io
|
||||
import socket
|
||||
import struct
|
||||
import time
|
||||
import cv2
|
||||
|
||||
# Connect a client socket to my_server:8000 (change my_server to the
|
||||
# hostname of your server)
|
||||
client_socket = socket.socket()
|
||||
client_socket.connect(('192.168.1.107', 8000))
|
||||
|
||||
# Make a file-like object out of the connection
|
||||
connection = client_socket.makefile('wb')
|
||||
try:
|
||||
cap = cv2.VideoCapture("run.mp4")
|
||||
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
|
||||
if frame is None:
|
||||
break
|
||||
print(type(frame))
|
||||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||
print(type(gray))
|
||||
_, image = cv2.imencode('.jpg', gray)
|
||||
print(type(image))
|
||||
stream = image.tobytes()
|
||||
print(type(stream))
|
||||
|
||||
# Write the length of the capture to the stream and flush to
|
||||
# ensure it actually gets sent
|
||||
connection.write(struct.pack('<L', stream.tell()))
|
||||
connection.flush()
|
||||
# Rewind the stream and send the image data over the wire
|
||||
stream.seek(0)
|
||||
connection.write(stream.read())
|
||||
# If we've been capturing for more than 30 seconds, quit
|
||||
if time.time() - start > 30:
|
||||
break
|
||||
# Reset the stream for the next capture
|
||||
stream.seek(0)
|
||||
stream.truncate()
|
||||
# Write a length of zero to the stream to signal we're done
|
||||
connection.write(struct.pack('<L', 0))
|
||||
finally:
|
||||
connection.close()
|
||||
client_socket.close()
|
||||
@@ -0,0 +1,34 @@
|
||||
import io
|
||||
import socket
|
||||
import struct
|
||||
from PIL import Image
|
||||
|
||||
# Start a socket listening for connections on 0.0.0.0:8000 (0.0.0.0 means
|
||||
# all interfaces)
|
||||
server_socket = socket.socket()
|
||||
server_socket.bind(('0.0.0.0', 8000))
|
||||
server_socket.listen(0)
|
||||
|
||||
# Accept a single connection and make a file-like object out of it
|
||||
connection = server_socket.accept()[0].makefile('rb')
|
||||
try:
|
||||
while True:
|
||||
# Read the length of the image as a 32-bit unsigned int. If the
|
||||
# length is zero, quit the loop
|
||||
image_len = struct.unpack('<L', connection.read(struct.calcsize('<L')))[0]
|
||||
if not image_len:
|
||||
break
|
||||
# Construct a stream to hold the image data and read the image
|
||||
# data from the connection
|
||||
image_stream = io.BytesIO()
|
||||
image_stream.write(connection.read(image_len))
|
||||
# Rewind the stream, open it as an image with PIL and do some
|
||||
# processing on it
|
||||
image_stream.seek(0)
|
||||
image = Image.open(image_stream)
|
||||
print('Image is %dx%d' % image.size)
|
||||
image.verify()
|
||||
print('Image is verified')
|
||||
finally:
|
||||
connection.close()
|
||||
server_socket.close()
|
||||
@@ -0,0 +1,14 @@
|
||||
# run this program on each RPi to send a labelled image stream
|
||||
import socket
|
||||
import time
|
||||
from imutils.video import VideoStream
|
||||
import imagezmq
|
||||
|
||||
sender = imagezmq.ImageSender(connect_to='tcp://jeff-macbook:5555')
|
||||
|
||||
rpi_name = socket.gethostname() # send RPi hostname with each image
|
||||
picam = VideoStream(usePiCamera=True).start()
|
||||
time.sleep(2.0) # allow camera sensor to warm up
|
||||
while True: # send images as stream until Ctrl-C
|
||||
image = picam.read()
|
||||
sender.send_image(rpi_name, image)
|
||||
@@ -0,0 +1,10 @@
|
||||
import cv2
|
||||
import imagezmq
|
||||
|
||||
image_hub = imagezmq.ImageHub()
|
||||
|
||||
while True: # show streamed images until Ctrl-C
|
||||
rpi_name, image = image_hub.recv_image()
|
||||
cv2.imshow(rpi_name, image) # 1 window for each RPi
|
||||
cv2.waitKey(1)
|
||||
image_hub.send_reply(b'OK')
|
||||
Reference in New Issue
Block a user