tello控制

pull/2/head
qiuwb 2 years ago
parent f7703b8dad
commit 9c5beaa5a0

File diff suppressed because one or more lines are too long

@ -0,0 +1,93 @@
import cv2
import socket
import threading
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
class VideoCaptureTransfer:
def __init__(self, source=0, dest_ip='127.0.0.1', dest_port=8000):
self.capture = cv2.VideoCapture(source)
self.dest_ip = dest_ip
self.dest_port = dest_port
self.frame = None
self.save_video = False
self.lock = threading.Lock()
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.thread = threading.Thread(target=self._capture_send)
self.thread.start()
def _capture_send(self):
while self.capture.isOpened():
ret, frame = self.capture.read()
if not ret:
break
frame = cv2.resize(frame, (640, 480))
if self.save_video:
self.output.write(frame)
with self.lock:
self.frame = frame.copy()
_, data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])
self.sock.sendto(data.tobytes(), (self.dest_ip, self.dest_port))
self.capture.release()
cv2.destroyAllWindows()
self.output.release()
def start_recording(self, filename="output.avi", fmt="XVID"):
fourcc = cv2.VideoWriter_fourcc(*fmt)
fps = int(self.capture.get(cv2.CAP_PROP_FPS))
frame_size = (int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
self.output = cv2.VideoWriter(filename, fourcc, fps, frame_size)
self.save_video = True
def stop_recording(self):
self.save_video = False
def read(self):
with self.lock:
return self.frame
def release(self):
self.thread.join()
self.sock.close()
if __name__ == '__main__':
vct = VideoCaptureTransfer(0,"192.168.43.18",9999)
def on_key_press(event):
if event.key == ' ':
if not vct.save_video:
vct.start_recording()
def on_key_release(event):
if event.key == ' ':
if vct.save_video:
vct.stop_recording()
fig, ax = plt.subplots()
im = ax.imshow(np.zeros((480, 640, 3), dtype=np.uint8))
def update_frame(_):
frame = vct.read()
im.set_data(frame)
return [im]
ani = animation.FuncAnimation(fig, update_frame, interval=50, blit=True)
fig.canvas.mpl_connect('key_press_event', on_key_press)
fig.canvas.mpl_connect('key_release_event', on_key_release)
plt.show()
vct.release()
Loading…
Cancel
Save