forked from homuler/MediaPipeUnityPlugin
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmediapipe_workaround.diff
More file actions
240 lines (225 loc) · 12 KB
/
Copy pathmediapipe_workaround.diff
File metadata and controls
240 lines (225 loc) · 12 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
diff --git a/mediapipe/graphs/instant_motion_tracking/calculators/matrices_manager_calculator.cc b/mediapipe/graphs/instant_motion_tracking/calculators/matrices_manager_calculator.cc
index c003135b..edcd239f 100644
--- a/mediapipe/graphs/instant_motion_tracking/calculators/matrices_manager_calculator.cc
+++ b/mediapipe/graphs/instant_motion_tracking/calculators/matrices_manager_calculator.cc
@@ -58,7 +58,7 @@ constexpr float kInitialZ = -10.0f;
// perspective matrix]
//
// Input streams:
-// ANCHORS - Anchor data with x,y,z coordinates (x,y are in [0.0-1.0] range for
+// ANCHORS - Anchor3d data with x,y,z coordinates (x,y are in [0.0-1.0] range for
// position on the device screen, while z is the scaling factor that changes
// in proportion to the distance from the tracked region) [REQUIRED]
// IMU_ROTATION - float[9] of row-major device rotation matrix [REQUIRED]
@@ -101,7 +101,7 @@ class MatricesManagerCalculator : public CalculatorBase {
const Matrix4fCM GenerateEigenModelMatrix(
const Vector3f& translation_vector,
const Matrix3f& rotation_submatrix) const;
- const Vector3f GenerateAnchorVector(const Anchor& tracked_anchor) const;
+ const Vector3f GenerateAnchorVector(const Anchor3d& tracked_anchor) const;
DiagonalMatrix3f GetDefaultRenderScaleDiagonal(
const int render_id, const float user_scale_factor,
const float gif_aspect_ratio) const;
@@ -145,7 +145,7 @@ absl::Status MatricesManagerCalculator::GetContract(CalculatorContract* cc) {
cc->InputSidePackets().HasTag(kFOVSidePacketTag) &&
cc->InputSidePackets().HasTag(kAspectRatioSidePacketTag));
- cc->Inputs().Tag(kAnchorsTag).Set<std::vector<Anchor>>();
+ cc->Inputs().Tag(kAnchorsTag).Set<std::vector<Anchor3d>>();
cc->Inputs().Tag(kIMUMatrixTag).Set<float[]>();
cc->Inputs().Tag(kUserScalingsTag).Set<std::vector<UserScaling>>();
cc->Inputs().Tag(kUserRotationsTag).Set<std::vector<UserRotation>>();
@@ -193,8 +193,8 @@ absl::Status MatricesManagerCalculator::Process(CalculatorContext* cc) {
const std::vector<int> render_data =
cc->Inputs().Tag(kRendersTag).Get<std::vector<int>>();
- const std::vector<Anchor> anchor_data =
- cc->Inputs().Tag(kAnchorsTag).Get<std::vector<Anchor>>();
+ const std::vector<Anchor3d> anchor_data =
+ cc->Inputs().Tag(kAnchorsTag).Get<std::vector<Anchor3d>>();
if (cc->Inputs().HasTag(kGifAspectRatioTag) &&
!cc->Inputs().Tag(kGifAspectRatioTag).IsEmpty()) {
gif_aspect_ratio_ = cc->Inputs().Tag(kGifAspectRatioTag).Get<float>();
@@ -213,7 +213,7 @@ absl::Status MatricesManagerCalculator::Process(CalculatorContext* cc) {
}
int render_idx = 0;
- for (const Anchor& anchor : anchor_data) {
+ for (const Anchor3d& anchor : anchor_data) {
const int id = anchor.sticker_id;
mediapipe::TimedModelMatrixProto* model_matrix;
// Add model matrix to matrices list for defined object render ID
@@ -302,7 +302,7 @@ const Matrix3f MatricesManagerCalculator::GenerateUserRotationMatrix(
// screen Using the sticker anchor data, a translation vector can be generated
// in OpenGL coordinate space
const Vector3f MatricesManagerCalculator::GenerateAnchorVector(
- const Anchor& tracked_anchor) const {
+ const Anchor3d& tracked_anchor) const {
// Using an initial z-value in OpenGL space, generate a new base z-axis value
// to mimic scaling by distance.
const float z = kInitialZ * tracked_anchor.z;
diff --git a/mediapipe/graphs/instant_motion_tracking/calculators/sticker_manager_calculator.cc b/mediapipe/graphs/instant_motion_tracking/calculators/sticker_manager_calculator.cc
index 40210c27..c25842bd 100644
--- a/mediapipe/graphs/instant_motion_tracking/calculators/sticker_manager_calculator.cc
+++ b/mediapipe/graphs/instant_motion_tracking/calculators/sticker_manager_calculator.cc
@@ -61,7 +61,7 @@ class StickerManagerCalculator : public CalculatorBase {
cc->Outputs().HasTag(kRenderDescriptorsTag));
cc->Inputs().Tag(kProtoDataString).Set<std::string>();
- cc->Outputs().Tag(kAnchorsTag).Set<std::vector<Anchor>>();
+ cc->Outputs().Tag(kAnchorsTag).Set<std::vector<Anchor3d>>();
cc->Outputs().Tag(kUserRotationsTag).Set<std::vector<UserRotation>>();
cc->Outputs().Tag(kUserScalingsTag).Set<std::vector<UserScaling>>();
cc->Outputs().Tag(kRenderDescriptorsTag).Set<std::vector<int>>();
@@ -78,7 +78,7 @@ class StickerManagerCalculator : public CalculatorBase {
std::string sticker_proto_string =
cc->Inputs().Tag(kProtoDataString).Get<std::string>();
- std::vector<Anchor> initial_anchor_data;
+ std::vector<Anchor3d> initial_anchor_data;
std::vector<UserRotation> user_rotation_data;
std::vector<UserScaling> user_scaling_data;
std::vector<int> render_data;
@@ -91,7 +91,7 @@ class StickerManagerCalculator : public CalculatorBase {
for (int i = 0; i < sticker_roll.sticker().size(); ++i) {
// Declare empty structures for sticker data
- Anchor initial_anchor;
+ Anchor3d initial_anchor;
UserRotation user_rotation;
UserScaling user_scaling;
// Get individual Sticker object as defined by Protobuffer
@@ -116,7 +116,7 @@ class StickerManagerCalculator : public CalculatorBase {
if (cc->Outputs().HasTag(kAnchorsTag)) {
cc->Outputs()
.Tag(kAnchorsTag)
- .AddPacket(MakePacket<std::vector<Anchor>>(initial_anchor_data)
+ .AddPacket(MakePacket<std::vector<Anchor3d>>(initial_anchor_data)
.At(cc->InputTimestamp()));
}
if (cc->Outputs().HasTag(kUserRotationsTag)) {
diff --git a/mediapipe/graphs/instant_motion_tracking/calculators/tracked_anchor_manager_calculator.cc b/mediapipe/graphs/instant_motion_tracking/calculators/tracked_anchor_manager_calculator.cc
index 446aee78..3f3ebd94 100644
--- a/mediapipe/graphs/instant_motion_tracking/calculators/tracked_anchor_manager_calculator.cc
+++ b/mediapipe/graphs/instant_motion_tracking/calculators/tracked_anchor_manager_calculator.cc
@@ -68,7 +68,7 @@ constexpr float kUsToMs =
class TrackedAnchorManagerCalculator : public CalculatorBase {
private:
// Previous graph iteration anchor data
- std::vector<Anchor> previous_anchor_data_;
+ std::vector<Anchor3d> previous_anchor_data_;
public:
static absl::Status GetContract(CalculatorContract* cc) {
@@ -77,14 +77,14 @@ class TrackedAnchorManagerCalculator : public CalculatorBase {
RET_CHECK(cc->Outputs().HasTag(kAnchorsTag) &&
cc->Outputs().HasTag(kBoxesOutputTag));
- cc->Inputs().Tag(kAnchorsTag).Set<std::vector<Anchor>>();
+ cc->Inputs().Tag(kAnchorsTag).Set<std::vector<Anchor3d>>();
cc->Inputs().Tag(kSentinelTag).Set<int>();
if (cc->Inputs().HasTag(kBoxesInputTag)) {
cc->Inputs().Tag(kBoxesInputTag).Set<mediapipe::TimedBoxProtoList>();
}
- cc->Outputs().Tag(kAnchorsTag).Set<std::vector<Anchor>>();
+ cc->Outputs().Tag(kAnchorsTag).Set<std::vector<Anchor3d>>();
cc->Outputs().Tag(kBoxesOutputTag).Set<mediapipe::TimedBoxProtoList>();
if (cc->Outputs().HasTag(kCancelTag)) {
@@ -103,10 +103,10 @@ REGISTER_CALCULATOR(TrackedAnchorManagerCalculator);
absl::Status TrackedAnchorManagerCalculator::Process(CalculatorContext* cc) {
mediapipe::Timestamp timestamp = cc->InputTimestamp();
const int sticker_sentinel = cc->Inputs().Tag(kSentinelTag).Get<int>();
- std::vector<Anchor> current_anchor_data =
- cc->Inputs().Tag(kAnchorsTag).Get<std::vector<Anchor>>();
+ std::vector<Anchor3d> current_anchor_data =
+ cc->Inputs().Tag(kAnchorsTag).Get<std::vector<Anchor3d>>();
auto pos_boxes = absl::make_unique<mediapipe::TimedBoxProtoList>();
- std::vector<Anchor> tracked_scaled_anchor_data;
+ std::vector<Anchor3d> tracked_scaled_anchor_data;
// Delete any boxes being tracked without an associated anchor
for (const mediapipe::TimedBoxProto& box :
@@ -115,7 +115,7 @@ absl::Status TrackedAnchorManagerCalculator::Process(CalculatorContext* cc) {
.Get<mediapipe::TimedBoxProtoList>()
.box()) {
bool anchor_exists = false;
- for (Anchor anchor : current_anchor_data) {
+ for (Anchor3d anchor : current_anchor_data) {
if (box.id() == anchor.sticker_id) {
anchor_exists = true;
break;
@@ -129,8 +129,8 @@ absl::Status TrackedAnchorManagerCalculator::Process(CalculatorContext* cc) {
}
// Perform tracking or updating for each anchor position
- for (const Anchor& anchor : current_anchor_data) {
- Anchor output_anchor = anchor;
+ for (const Anchor3d& anchor : current_anchor_data) {
+ Anchor3d output_anchor = anchor;
// Check if anchor position is being reset by user in this graph iteration
if (sticker_sentinel == anchor.sticker_id) {
// Delete associated tracking box
@@ -150,7 +150,7 @@ absl::Status TrackedAnchorManagerCalculator::Process(CalculatorContext* cc) {
// Default value for normalized z (scale factor)
output_anchor.z = 1.0f;
} else {
- // Anchor position was not reset by user
+ // Anchor3d position was not reset by user
// Attempt to update anchor position from tracking subgraph
// (TimedBoxProto)
bool updated_from_tracker = false;
@@ -175,7 +175,7 @@ absl::Status TrackedAnchorManagerCalculator::Process(CalculatorContext* cc) {
// stickers to be tracked at approximately last location even if
// re-acquisitioning in the BoxTrackingSubgraph encounters errors
if (!updated_from_tracker) {
- for (const Anchor& prev_anchor : previous_anchor_data_) {
+ for (const Anchor3d& prev_anchor : previous_anchor_data_) {
if (anchor.sticker_id == prev_anchor.sticker_id) {
mediapipe::TimedBoxProto* box = pos_boxes->add_box();
box->set_left(prev_anchor.x - kBoxEdgeSize * 0.5f);
@@ -199,7 +199,7 @@ absl::Status TrackedAnchorManagerCalculator::Process(CalculatorContext* cc) {
cc->Outputs()
.Tag(kAnchorsTag)
- .AddPacket(MakePacket<std::vector<Anchor>>(tracked_scaled_anchor_data)
+ .AddPacket(MakePacket<std::vector<Anchor3d>>(tracked_scaled_anchor_data)
.At(cc->InputTimestamp()));
cc->Outputs()
.Tag(kBoxesOutputTag)
diff --git a/mediapipe/graphs/instant_motion_tracking/calculators/transformations.h b/mediapipe/graphs/instant_motion_tracking/calculators/transformations.h
index cbacdb71..f40cf912 100644
--- a/mediapipe/graphs/instant_motion_tracking/calculators/transformations.h
+++ b/mediapipe/graphs/instant_motion_tracking/calculators/transformations.h
@@ -30,7 +30,7 @@ struct UserScaling {
};
// The normalized anchor coordinates of a sticker
-struct Anchor {
+struct Anchor3d {
float x; // [0.0-1.0]
float y; // [0.0-1.0]
float z; // Centered around 1.0 [current_scale = z * initial_scale]
diff --git a/mediapipe/modules/objectron/calculators/BUILD b/mediapipe/modules/objectron/calculators/BUILD
index 14cea526..64bf8d27 100644
--- a/mediapipe/modules/objectron/calculators/BUILD
+++ b/mediapipe/modules/objectron/calculators/BUILD
@@ -199,6 +199,15 @@ cc_library(
hdrs = [
"tensor_util.h",
],
+ copts = select({
+ # Needed for "//mediapipe/framework/formats:tensor" compatibility on Apple
+ # platforms for Metal pulled in via the tensor.h header.
+ "//mediapipe:apple": [
+ "-x objective-c++",
+ "-fobjc-arc", # enable reference-counting
+ ],
+ "//conditions:default": [],
+ }),
deps = [
"//mediapipe/framework/formats:tensor",
"//mediapipe/framework/port:logging",
@@ -312,6 +321,15 @@ cc_library(
name = "lift_2d_frame_annotation_to_3d_calculator",
srcs = ["lift_2d_frame_annotation_to_3d_calculator.cc"],
visibility = ["//visibility:public"],
+ copts = select({
+ # Needed for "//mediapipe/framework/formats:tensor" compatibility on Apple
+ # platforms for Metal pulled in via the tensor.h header.
+ "//mediapipe:apple": [
+ "-x objective-c++",
+ "-fobjc-arc", # enable reference-counting
+ ],
+ "//conditions:default": [],
+ }),
deps = [
":annotation_cc_proto",
":decoder",