drones-internal:rpi:scripts:findaruco
All the if´s in the end, are not that clean.
- findAruco.py
import numpy as np import math import cv2 import cv2.aruco as aruco cap = cv2.VideoCapture(0) ARUCO_PARAMETERS = aruco.DetectorParameters_create() ARUCO_DICT = aruco.Dictionary_get(aruco.DICT_6X6_1000) screenWidth = int(cap.get(3)) screenHeight = int(cap.get(4)) line1start = (int(round((screenWidth/2))), 0) line1stop = (int(round((screenWidth/2))), int(round(screenHeight))) line2start = (0, int(round((screenHeight/2)))) line2stop = (int(round((screenWidth))), int(round((screenHeight/2)))) landingcirclepx = 20 while(True): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, ARUCO_DICT, parameters=ARUCO_PARAMETERS) #for corner in corners: # print('Corners: {}'.format(corner)) frame = aruco.drawDetectedMarkers(gray, corners, borderColor=(0,0,255)) frame = cv2.line(frame, line1start, line1stop, (255,255,255), 2) frame = cv2.line(frame, line2start, line2stop, (255,255,255), 2) frame = cv2.circle(frame, (int(screenWidth*0.5), int(screenHeight*0.5)), landingcirclepx, (255,255,255), 2) midpoint = (0,0) distance = 0 if corners != []: midpoint = 0.5*(corners[0][0][0]+corners[0][0][2]) midpoint = (int(midpoint[0]), int(midpoint[1])) frame = cv2.circle(frame, midpoint, 2, (0,0,255), 2) distance = math.sqrt((midpoint[0] - (screenWidth / 2))**2 + (midpoint[1] - (screenHeight / 2))**2) direction = "" #V if 0 < midpoint[1] and midpoint[1] < (screenHeight / 2 - landingcirclepx): direction += "V" #H if (screenHeight / 2 + landingcirclepx) < midpoint[1] and midpoint[1] < screenHeight: direction += "H" #R if (screenWidth / 2 + landingcirclepx) < midpoint[0] and midpoint[0] < screenWidth: direction += "R" #L if 0 < midpoint[0] and midpoint[0] < (screenWidth / 2 - landingcirclepx): direction += "L" #Mid if (screenWidth / 2 - landingcirclepx) <= midpoint[0] and midpoint[0] <= (screenWidth / 2 + landingcirclepx) and (screenHeight / 2 - landingcirclepx) <= midpoint[1] and midpoint[1] <= (screenHeight / 2 + landingcirclepx): direction = "DOWN!" if direction == "": direction = "Nothing found!" print(direction + " " + str(distance)) cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
drones-internal/rpi/scripts/findaruco.txt · Last modified: 2021/09/09 15:32 by jan001