aboutsummaryrefslogtreecommitdiff
path: root/Gem/examples/04.video/06.frame_diff_tracking.pd
blob: 3ade8da0a812bfe8a425c11b9a8854be41273226 (plain)
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
#N canvas 42 41 639 499 10;
#X obj 140 80 gemhead;
#X obj 140 271 pix_diff;
#X obj 23 397 pix_texture;
#N canvas 340 107 682 322 gemwin 0;
#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
-1 -1 0 1;
#X obj 102 161 r \$0-gemstart;
#X obj 102 182 select 1 0;
#X msg 102 214 create \, 1;
#X msg 177 215 destroy;
#X obj 102 239 t a;
#X obj 318 54 inlet;
#X obj 318 255 gemwin;
#X obj 318 100 t a a;
#X obj 318 287 outlet;
#X obj 350 128 route create destroy;
#X obj 350 150 t b;
#X msg 350 172 1;
#X obj 390 150 t b;
#X msg 390 172 0;
#X obj 350 195 t f;
#X msg 350 219 set \$1;
#X text 118 122 rendering;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 4 0;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 8 0;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 8 1 10 0;
#X connect 10 0 11 0;
#X connect 10 1 13 0;
#X connect 11 0 12 0;
#X connect 12 0 15 0;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 0 0;
#X coords 0 -1 1 1 85 40 1 100 100;
#X restore 534 15 pd gemwin;
#X obj 23 442 rectangle 4 3;
#X obj 140 198 pix_separator;
#X obj 229 198 pix_separator;
#X obj 140 134 pix_grey;
#X obj 140 109 pix_video;
#X obj 140 346 pix_blob;
#N canvas 10 40 620 460 cursor 0;
#X obj 17 14 inlet;
#X obj 89 18 inlet;
#X obj 101 346 translateXYZ;
#X text 63 148 0.64;
#X text 37 151 1;
#X obj 23 63 t f f;
#X obj 37 176 -;
#X text 62 177 X-Range;
#X text 196 176 Y-Range;
#X obj 63 240 expr (8/$f1);
#X obj 33 241 -;
#X obj 51 267 *;
#X obj 29 95 max 0;
#X obj 71 95 min 10;
#X obj 59 132 f;
#X obj 33 131 f;
#X obj 52 293 - 4;
#X text 193 146 0.64;
#X text 167 149 1;
#X obj 153 61 t f f;
#X obj 167 174 -;
#X obj 193 238 expr (8/$f1);
#X obj 163 239 -;
#X obj 181 265 *;
#X obj 159 93 max 0;
#X obj 201 93 min 10;
#X obj 189 130 f;
#X obj 163 129 f;
#X text 188 171 comment;
#X obj 154 298 expr (-1*$f1)+4;
#X obj 293 27 inlet;
#X obj 94 320 gemhead 15;
#X obj 157 509 circle 0.1;
#X obj 17 423 separator;
#X obj 87 423 separator;
#X obj 17 484 rectangle 0.2 0.01;
#X obj 157 423 separator;
#X msg 185 478 draw line;
#X obj 185 457 loadbang;
#X obj 77 386 colorRGB 1 0 0 1;
#X obj 17 462 rectangle 0.01 0.2;
#X msg 256 478 width \$1;
#X obj 296 342 int;
#X obj 275 413 + 1;
#X obj 283 63 * 100;
#X connect 0 0 5 0;
#X connect 1 0 19 0;
#X connect 2 0 39 0;
#X connect 5 0 10 0;
#X connect 5 0 12 0;
#X connect 5 1 13 0;
#X connect 6 0 9 0;
#X connect 9 0 11 1;
#X connect 10 0 11 0;
#X connect 11 0 16 0;
#X connect 12 0 15 0;
#X connect 13 0 14 0;
#X connect 14 0 6 1;
#X connect 14 0 10 1;
#X connect 14 0 13 1;
#X connect 15 0 6 0;
#X connect 15 0 12 1;
#X connect 16 0 2 1;
#X connect 19 0 22 0;
#X connect 19 0 24 0;
#X connect 19 1 25 0;
#X connect 20 0 21 0;
#X connect 21 0 23 1;
#X connect 22 0 23 0;
#X connect 23 0 29 0;
#X connect 24 0 27 0;
#X connect 25 0 26 0;
#X connect 26 0 20 1;
#X connect 26 0 22 1;
#X connect 26 0 25 1;
#X connect 27 0 20 0;
#X connect 27 0 24 1;
#X connect 29 0 2 2;
#X connect 30 0 44 0;
#X connect 31 0 2 0;
#X connect 33 0 40 0;
#X connect 34 0 35 0;
#X connect 36 0 32 0;
#X connect 37 0 32 0;
#X connect 38 0 37 0;
#X connect 39 0 33 0;
#X connect 39 0 34 0;
#X connect 39 0 36 0;
#X connect 41 0 32 0;
#X connect 42 0 43 0;
#X connect 43 0 41 0;
#X connect 44 0 32 1;
#X connect 44 0 42 0;
#X restore 154 388 pd cursor;
#X obj 23 420 translateXYZ 0 0 -0.1;
#X obj 140 316 pix_threshold;
#X obj 180 294 hsl 128 15 0 1 0 1 empty empty threshold 8 8 0 10 -262130
-1 -1 900 0;
#X obj 229 230 pix_delay 1;
#X text 28 12 This is an example of simple video tracking using the
difference between the current frame and the previous frame \, then
using blob detection.;
#X text 356 108 <-- get the video camera;
#X text 356 133 <-- convert to grey for easier tracking;
#X text 356 196 <-- make two copies of the frame;
#X obj 140 165 trigger anything anything;
#X text 356 229 <-- delay one copy by one frame;
#X text 356 305 <-- set the threshold to filter out;
#X text 381 281 difference between the two frames;
#X text 356 270 <-- find the absolute value of the;
#X text 381 316 small changes;
#X text 356 344 <-- track the (x \, y) coordinates and size;
#X text 380 357 of the "blob" of the difference;
#X text 356 384 <-- render a cursor using the (x \, y) and size;
#X text 6 460 render the video of the;
#X text 6 472 frame difference;
#X connect 0 0 8 0;
#X connect 1 0 12 0;
#X connect 2 0 11 0;
#X connect 5 0 1 0;
#X connect 6 0 14 0;
#X connect 7 0 19 0;
#X connect 8 0 7 0;
#X connect 9 1 10 0;
#X connect 9 2 10 1;
#X connect 9 3 10 2;
#X connect 11 0 4 0;
#X connect 12 0 9 0;
#X connect 12 0 2 0;
#X connect 13 0 12 1;
#X connect 14 0 1 1;
#X connect 19 0 6 0;
#X connect 19 1 5 0;