-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApriltagDetection.py
93 lines (63 loc) · 2.89 KB
/
ApriltagDetection.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from RioComms import RioComms
from pupil_apriltags import Detector
import cv2
import ast
import re
rioComms = RioComms("10.40.26.2")
tableName = "apriltags"
#Create the Apriltag Detector
# Working Parameters:
# quad_decimate=0.3
# quad_sigma=0.35
# refine_edges=1
# decode_sharpening=0.25
at_detector = Detector(
families="tag16h5",
nthreads=1,
quad_decimate=0.3,
quad_sigma=0.35,
refine_edges=1,
decode_sharpening=0.25,
debug=0
)
#Tag size in meters
tagSize = 0.1524
#cap is 640 pixels by 480 pixels
cap = cv2.VideoCapture(1)
while True:
_, img = cap.read()
imgGrayscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
apriltags = at_detector.detect(imgGrayscale)
apriltags = [x for x in apriltags if x.hamming == 0]
if len(apriltags) > 0:
print("\nApriltags:")
for i in range(len(apriltags)):
centerXY = ast.literal_eval((re.sub(" +", " ", ((str(apriltags[i].center).replace("[", "")).replace("]", "")).strip())).replace(" ", ", "))
centerXY = list(centerXY)
centerXY[0] = centerXY[0] - 320
centerXY[1] = centerXY[1] - 240
print(" Tag:", apriltags[i].tag_id, "\n X:", str(centerXY[0]), "\n Y:", str(centerXY[1]))
if (apriltags[i].tag_id >= 1 and apriltags[i].tag_id <= 3) or apriltags[i].tag_id == 5:
img = cv2.putText(img, str(apriltags[i].tag_id), (int(centerXY[0]) + 300, int(centerXY[1]) + 260), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 6, 2)
img = cv2.putText(img, str(int(centerXY[0])) + ", " + str(int(centerXY[1])), (int(centerXY[0]) + 300, int(centerXY[1]) + 300), cv2.FONT_HERSHEY_SIMPLEX, 2/3, (0, 0, 255), 3, 2)
elif (apriltags[i].tag_id >= 6 and apriltags[i].tag_id <= 8) or apriltags[i].tag_id == 4:
img = cv2.putText(img, str(apriltags[i].tag_id), (int(centerXY[0]) + 300, int(centerXY[1]) + 260), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 6, 2)
img = cv2.putText(img, str(int(centerXY[0])) + ", " + str(int(centerXY[1])), (int(centerXY[0]) + 300, int(centerXY[1]) + 300), cv2.FONT_HERSHEY_SIMPLEX, 2/3, (255, 0, 0), 3, 2)
rioComms.send("apriltags", "Tag " + str(apriltags[i].tag_id) + " X", centerXY[0])
rioComms.send("apriltags", "Tag " + str(apriltags[i].tag_id) + " Y", centerXY[1])
print(apriltags[i].corners)
cornersXYValues = list(re.sub(" +", " ", ''.join((str(apriltags[i].corners).replace("[", "").replace("]", "").strip()).splitlines())).split(" "))
tagWidth = abs(float(cornersXYValues[4]) - float(cornersXYValues[6]))
rioComms.send("apriltags", "Tag" + str(apriltags[i].tag_id) + "Width", tagWidth)
rioComms.send("apriltags", "Tags", len(apriltags))
apriltagIDs = []
for i in range(len(apriltags)):
apriltagIDs.append(apriltags[i].tag_id)
for i in range(8):
if apriltagIDs.count(i+1) > 0:
tagVisible = 1
else:
tagVisible = 0
rioComms.send("apriltags", "Tag " + str(i + 1) + " Visible", tagVisible)
cv2.imshow("Camera", img)
cv2.waitKey(5)