-Erster Beitrag- Schön Sie kennenzulernen, ich bin derzeit im vierten Studienjahr. Ich entwickle eine Tracking-Funktion mit TELLO (obwohl es nicht so gut ist ...). Die Spezialität des verantwortlichen Professors ist das elektronische Schaltungssystem, und ich bin in einem Zustand der Überforderung, ohne von dem Programm zu hören. Es gibt einige Punkte, die nicht erreicht werden können, aber bitte helfen Sie.
-Entwicklungsumgebung- ---windows10 ---python
-Inhalt der Programmierung-
import socket import threading import cv2 import numpy as np
event = threading.Event()
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
X = width//2 Y = height//3
W = width//2 H = height//2
x = width//2 y = height//3
w = width//2 h = height//2
gain_vx = 3 gain_vy = 3
gain_bf = 0.0022
gain_x_1 = 0.15 gain_y_1 = 0.1
gain_x_2 = 0.0003 gain_y_2 = 0.00005
dx = X - x dy = Y - y
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) sock.bind(("", 9000))
tello_address = ("192.168.10.1", 8889)
def send_command(msg): print(msg) msg = msg.encode(encoding="utf-8") sock.sendto(msg, tello_address) event.wait() event.clear()
def recv(): while True: try: data, server = sock.recvfrom(1518) print(data.decode(encoding="utf-8")) event.set() except Exception: break recvThread = threading.Thread(target=recv) recvThread.start()
def tracking(dx,dy,vx,vy):
if 5 < dx <= 150:
print('right')
drone.right(gain_x_1*dx + gain_vx*vx)
if -150 <= dx < -5:
print('left')
drone.left(- gain_x_1*dx - gain_vx*vx)
if dx > 150:
print('right')
drone.right(gain_x_2*dx*dx + gain_vx*vx/2)
if dx < -150:
print('left')
drone.left(gain_x_2*dx*dx - gain_vx*vx/2)
if dy > 5:
print('down')
drone.down(gain_y_2*dy*dy + gain_vy*vy/2)
if dy < 5:
print('up')
drone.up(gain_y_2*dy*dy + gain_vy*vy/2)
else:
print("___ERROR___")
def main(): try: send_command("command") send_command("streamon") send_command("takeoff")
cap = cv2.VideoCapture("udp://0.0.0.0:11111")
while True:
ret, img = cap.read()
cv2.rectangle(img, (X, Y), (X+W, Y+H), color=(0,0,255),thickness= 4)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imshow('img', img)
tracking(dx,dy,vx,vy)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
except Exception as ex:
print (ex)
finally:
cap.release()
cv2.destroyAllWindows()
send_command("streamoff")
sock.close()
print("--- END ---")
if name == "main": main()
-Punkte, die nicht funktionieren- ① Wo ist es angebracht, wenn Frame-Skip enthalten ist? ➁ Ist es ein Problem, bevor der Frame überhaupt übersprungen wird?
Vielen Dank.
-Die Seite, die ich als Referenz verwendet habe- https://atsblog.org/tello_tracking_camshift/ http://totech.hateblo.jp/entry/2017/10/22/100726