Aggregates all detected tags from each provided tag detector for both OpenCV and Tensorflow detection.
54 {
55
56 size_t siNumTagDetectors = vTagDetectors.size();
57
58
59 std::vector<std::vector<arucotag::ArucoTag>> vDetectedArucoTagBuffers(siNumTagDetectors);
60 std::vector<std::vector<tensorflowtag::TensorflowTag>> vDetectedTensorflowTagBuffers(siNumTagDetectors);
61
62
63 std::vector<std::future<bool>> vDetectedArucoTagsFuture;
64 std::vector<std::future<bool>> vDetectedTensorflowTagsFuture;
65
66
67 for (size_t siIdx = 0; siIdx < siNumTagDetectors; ++siIdx)
68 {
69
70 if (vTagDetectors[siIdx]->GetIsReady())
71 {
72
73 vDetectedArucoTagsFuture.emplace_back(vTagDetectors[siIdx]->RequestDetectedArucoTags(vDetectedArucoTagBuffers[siIdx]));
74
75 vDetectedTensorflowTagsFuture.emplace_back(vTagDetectors[siIdx]->RequestDetectedTensorflowTags(vDetectedTensorflowTagBuffers[siIdx]));
76 }
77 }
78
79
80
81 for (size_t siIdx = 0; siIdx < vDetectedArucoTagsFuture.size(); ++siIdx)
82 {
83
84 vDetectedArucoTagsFuture[siIdx].get();
85 vDetectedTensorflowTagsFuture[siIdx].get();
86
87
89 {
90 vDetectedArucoTags.emplace_back(tTag);
91 }
92
93
95 {
96 vDetectedTensorflowTags.emplace_back(tTag);
97 }
98 }
99
100 if (bUnique)
101 {
102
103 std::set<int> setIds;
104 size_t szIdx = 0;
105 while (szIdx < vDetectedArucoTags.size())
106 {
107
108 if (setIds.count(vDetectedArucoTags[szIdx].nID))
109 {
110 vDetectedArucoTags.erase(vDetectedArucoTags.begin() + szIdx);
111 }
112 else
113 {
114 setIds.insert(vDetectedArucoTags[szIdx].nID);
115 ++szIdx;
116 }
117 }
118 }
119 }
Represents a single ArUco tag. Stores all information about a specific tag detection.
Definition ArucoDetection.hpp:44
Represents a single ArUco tag. Stores all information about a specific tag detection.
Definition TensorflowTagDetection.hpp:43