forked from mxa/Bewegungsmelder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
07b-multi-blobtracker-IDs.pd
697 lines (697 loc) · 18 KB
/
07b-multi-blobtracker-IDs.pd
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
#N canvas 523 22 924 965 10;
#X declare -lib Gem;
#X obj 27 7 cnv 15 400 50 empty empty 7b 14 24 0 24 -175655 -66577
0;
#X obj 604 12 declare -lib Gem;
#X obj 369 683 pix_texture;
#X obj 369 710 rectangle 4 3;
#X obj 434 275 pix_gain;
#X obj 434 303 pix_levels;
#X obj 434 332 pix_curve;
#X obj 436 114 pix_video;
#X text 433 92 replace [pix_film] with;
#X text 435 134 for live video;
#X text 433 252 you may also try:;
#N canvas 845 38 402 614 init 1;
#X obj 15 31 loadbang;
#X obj 127 136 send contrast;
#X obj 114 185 send saturation;
#X msg 114 159 2.5;
#X msg 127 110 1.3;
#X obj 100 235 send low_threshold;
#X msg 100 213 0.04;
#X msg 87 260 1;
#X obj 87 282 send high_threshold;
#X obj 73 329 send threshold;
#X msg 73 307 0.15;
#X obj 60 375 send blobsize;
#X msg 60 352 0.2;
#X msg 6 539 0.15;
#N canvas 913 320 357 337 blob_lists 0;
#X obj 19 11 inlet;
#X obj 201 11 cnv 15 115 100 empty empty empty 20 12 0 14 -261234 -66577
0;
#X obj 207 18 table blob_ids;
#X obj 207 40 table blob_x;
#X obj 207 62 table blob_y;
#X msg 66 93 \; blob_ids resize 1 \; blob_ids 0 -1;
#X msg 50 148 \; blob_x resize 1 \; blob_x 0 -1;
#X msg 34 204 \; blob_y resize 1 \; blob_y 0 -1;
#X obj 207 85 table blob_times;
#X obj 82 66 s reset_time;
#X msg 19 259 \; blob_times resize 1 \; blob_times 0 -1;
#X obj 19 41 t b b b b b;
#X connect 0 0 11 0;
#X connect 11 0 10 0;
#X connect 11 1 7 0;
#X connect 11 2 6 0;
#X connect 11 3 5 0;
#X connect 11 4 9 0;
#X restore 141 83 pd blob_lists;
#X text 73 31 this thing initializes all the sliders and values;
#X obj 6 9 inlet;
#X obj 6 56 t b b b b b b b b b b b;
#X obj 46 422 send borderAreaSize;
#X obj 33 469 send maxTimeInBorderArea;
#X obj 19 515 send maxTimeAtAll;
#X obj 6 563 send maxManhattanDistance;
#X msg 19 492 3700;
#X msg 33 446 2500;
#X msg 46 399 0.75;
#X text 39 39 comment;
#X text 39 39 comment;
#X text 39 39 comment;
#X connect 0 0 17 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;
#X connect 6 0 5 0;
#X connect 7 0 8 0;
#X connect 10 0 9 0;
#X connect 12 0 11 0;
#X connect 13 0 21 0;
#X connect 16 0 17 0;
#X connect 17 0 13 0;
#X connect 17 1 22 0;
#X connect 17 2 23 0;
#X connect 17 3 24 0;
#X connect 17 4 12 0;
#X connect 17 5 10 0;
#X connect 17 6 7 0;
#X connect 17 7 6 0;
#X connect 17 8 3 0;
#X connect 17 9 4 0;
#X connect 17 10 14 0;
#X connect 22 0 20 0;
#X connect 23 0 19 0;
#X connect 24 0 18 0;
#X restore 605 59 pd init;
#X obj 32 690 pix_texture;
#X obj 32 720 rectangle 4 3;
#X obj 27 253 cnv 15 220 130 empty empty empty 20 12 0 14 -204786 -66577
0;
#X obj 32 359 pix_contrast;
#X obj 69 270 hsl 99 15 0 10 0 0 empty contrast contrast -2 -8 0 10
-262144 -1 -1 1274 1;
#X floatatom 72 289 5 0 0 0 - - -;
#X obj 104 319 hsl 99 15 0 10 0 0 empty saturation saturation -2 -8
0 10 -262144 -1 -1 2450 1;
#X floatatom 108 340 5 0 0 0 - - -;
#X obj 27 94 cnv 15 220 155 empty empty empty 20 12 0 14 -262130 -66577
0;
#X obj 54 227 send frames;
#X obj 156 135 receive frames;
#X floatatom 88 178 5 0 0 0 - - -;
#X obj 77 155 float;
#X obj 141 155 %;
#X obj 32 177 pix_film;
#N canvas 1126 98 271 209 open 0;
#X obj 16 17 inlet;
#X obj 28 94 loadbang;
#X obj 16 146 outlet;
#X obj 16 47 openpanel;
#X msg 16 67 open \$1;
#X msg 28 115 open testbed.mov;
#X connect 0 0 3 0;
#X connect 1 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 2 0;
#X restore 82 121 pd open;
#X obj 32 120 t a b;
#X text 250 93 video file playback;
#X text 248 252 video processing;
#X obj 605 95 cnv 15 220 130 empty empty empty 20 12 0 14 -261234 -66577
0;
#X msg 623 149 0 \, destroy;
#X text 610 105 window control (click this!);
#X text 433 71 suggestions:;
#X obj 142 410 cnv 15 220 125 empty empty empty 20 12 0 14 -204800
-66577 0;
#X obj 149 512 pix_movement2;
#X floatatom 192 444 5 0 0 0 - - -;
#X floatatom 232 492 5 0 0 0 - - -;
#X obj 227 473 hsl 99 15 0 1 0 0 empty high_threshold high_threshold
-2 -8 0 10 -262144 -1 -1 9800 1;
#X obj 189 426 hsl 99 15 0 1 0 0 empty low_threshold low_threshold
-2 -8 0 10 -262144 -1 -1 392 1;
#X text 371 407 movement detection;
#X text 372 421 (difference between subsequent frames);
#X text 373 450 high can't be smaller than low!;
#X obj 82 99 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X text 103 97 open video file;
#X obj 142 539 cnv 15 220 125 empty empty empty 20 12 0 14 -203904
-66577 0;
#X msg 189 572 threshold \$1;
#X msg 213 623 blobSize \$1;
#X obj 216 605 hsl 99 15 0 1 0 0 empty blobsize blobsize -2 -8 0 10
-262144 -1 -1 1960 1;
#X obj 192 554 hsl 99 15 0 1 0 0 empty threshold threshold -2 -8 0
10 -262144 -1 -1 1470 1;
#X text 367 541 blob detection;
#X text 364 555 (groups of adjacent pixels are a blob);
#X text 710 11 load Gem library;
#X text 252 73 explanation:;
#X text 31 740 the left image;
#X text 31 755 processed;
#X text 363 729 the right image;
#X text 364 748 blobs;
#X obj 54 201 unpack f f f;
#X obj 605 38 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 142 687 cnv 15 220 185 empty empty empty 20 12 0 14 -261234
-66577 0;
#X obj 195 702 hsl 128 15 0 1 0 0 empty borderAreaSize border_area_size
-2 -8 0 10 -262144 -1 -1 9525 1;
#X obj 184 754 hsl 151 15 0 15000 0 0 empty maxTimeInBorderArea max_time_in_border_area
-2 -8 0 10 -262144 -1 -1 2500 1;
#X floatatom 322 774 6 0 0 0 - - -;
#X floatatom 307 721 5 0 0 0 - - -;
#X obj 142 875 cnv 15 220 75 empty empty empty 20 12 0 14 -261234 -66577
0;
#X obj 239 891 hsl 101 15 0 1 0 0 empty maxManhattanDistance max_manhattan_dist.
-2 -8 0 10 -262144 -1 -1 1500 1;
#X floatatom 247 913 5 0 0 0 - - -;
#X obj 149 644 pix_multiblob 9;
#X obj 32 72 gemhead;
#X obj 610 196 gemwin 25;
#X obj 191 807 hsl 101 15 0 10000 0 0 empty maxTimeAtAll max_time_at_all
-2 -8 0 10 -262144 -1 -1 3700 1;
#X floatatom 288 827 6 0 0 0 - - -;
#X text 625 36 revert to initial settings;
#X text 173 389 <-- multiplying and unlinking the pixel and vertex
content;
#X msg 610 126 dimen 800 400 \, FSAA 4 \, view -4 0 4 0 \, create \,
1;
#N canvas 350 465 587 456 blob_lists 0;
#X obj 179 -15 inlet;
#X obj 48 166 until;
#X obj 48 203 f;
#X obj 48 135 t f b;
#X msg 88 167 0;
#X obj 96 203 + 1;
#X obj 67 298 sel -1;
#X obj 100 352 sel -1;
#X obj 48 235 t f f f;
#X obj 245 350 sel -1;
#N canvas 381 361 402 514 is_in_border_area 0;
#X obj 48 15 inlet;
#X obj 48 449 outlet;
#X obj 249 15 inlet;
#X floatatom 243 252 5 0 0 2 min_border - -;
#X obj 297 218 -;
#X floatatom 307 251 5 0 0 2 max_border - -;
#X obj 48 378 expr if ($f2 < $f4 || $f2 > $f5 \, $f1 \, -1) \; if ($f3
< $f4 || $f3 > $f5 \, $f1 \, -1);
#X obj 48 423 max;
#X obj 65 324 tabread blob_x;
#X obj 172 324 tabread blob_y;
#X obj 234 146 f;
#X obj 48 44 t f f f b;
#X msg 297 193 1 \$1;
#X obj 234 168 t f f;
#X connect 0 0 11 0;
#X connect 2 0 10 1;
#X connect 4 0 5 0;
#X connect 4 0 6 4;
#X connect 6 0 7 0;
#X connect 6 1 7 1;
#X connect 7 0 1 0;
#X connect 8 0 6 1;
#X connect 9 0 6 2;
#X connect 10 0 13 0;
#X connect 11 0 6 0;
#X connect 11 1 8 0;
#X connect 11 2 9 0;
#X connect 11 3 10 0;
#X connect 12 0 4 0;
#X connect 13 0 3 0;
#X connect 13 0 6 3;
#X connect 13 1 12 0;
#X restore 67 269 pd is_in_border_area;
#N canvas 982 588 212 226 remove_blob 0;
#X obj 11 8 inlet;
#X obj 11 54 sel -1;
#X msg 71 100 \; blob_ids \$1 -1 \; blob_x \$1 -1 \; blob_y \$1 -1
\; blob_times \$1 -1 \;;
#N canvas 516 326 431 658 remove_index 0;
#X obj 22 34 inlet;
#X text 21 15 index to remove:;
#X obj 41 110 until;
#X obj 41 136 f;
#X obj 90 135 + 1;
#X obj 56 373 tabread blob_ids;
#X obj 56 396 tabwrite blob_ids;
#X obj 71 321 tabread blob_x;
#X obj 86 294 tabwrite blob_y;
#X obj 71 344 tabwrite blob_x;
#X obj 86 271 tabread blob_y;
#X floatatom 182 84 5 0 0 0 - - -;
#X obj 228 196 - 1;
#X obj 22 58 t b b f;
#X obj 22 446 - 1;
#X obj 41 163 t f f f f f f;
#X msg 22 469 \; blob_ids resize \$1 \; blob_x resize \$1 \; blob_y
resize \$1 \; blob_times resize \$1;
#X obj 101 220 tabread blob_times;
#X obj 101 243 tabwrite blob_times;
#X obj 22 420 expr size("blob_ids");
#X obj 41 84 expr size("blob_ids");
#X connect 0 0 13 0;
#X connect 2 0 3 0;
#X connect 3 0 15 0;
#X connect 4 0 3 1;
#X connect 5 0 6 0;
#X connect 7 0 9 0;
#X connect 10 0 8 0;
#X connect 11 0 4 0;
#X connect 12 0 18 1;
#X connect 12 0 8 1;
#X connect 12 0 9 1;
#X connect 12 0 6 1;
#X connect 13 0 19 0;
#X connect 13 1 20 0;
#X connect 13 2 11 0;
#X connect 14 0 16 0;
#X connect 15 0 4 0;
#X connect 15 1 5 0;
#X connect 15 2 7 0;
#X connect 15 3 10 0;
#X connect 15 4 17 0;
#X connect 15 5 12 0;
#X connect 17 0 18 0;
#X connect 19 0 14 0;
#X connect 20 0 2 0;
#X restore 44 178 pd remove_index;
#X obj 11 32 index_of_blob;
#X obj 44 77 t f f;
#X connect 0 0 4 0;
#X connect 1 1 5 0;
#X connect 4 0 1 0;
#X connect 5 0 3 0;
#X connect 5 1 2 0;
#X restore 133 385 pd remove_blob;
#X obj 245 324 older_than_threshold;
#X obj 100 324 older_than_threshold;
#X obj 48 107 expr size("blob_ids");
#X floatatom 304 358 5 0 0 0 - - -;
#X obj 179 25 route borderAreaSize maxTimeInBorderArea maxTimeAtAll
;
#X obj 19 420 outlet;
#X obj 20 59 t a b;
#X connect 0 0 16 0;
#X connect 1 0 2 0;
#X connect 2 0 8 0;
#X connect 3 0 1 0;
#X connect 3 1 4 0;
#X connect 4 0 2 1;
#X connect 5 0 2 1;
#X connect 6 1 13 0;
#X connect 7 1 11 0;
#X connect 8 0 5 0;
#X connect 8 1 10 0;
#X connect 8 2 12 0;
#X connect 9 1 11 0;
#X connect 10 0 6 0;
#X connect 12 0 9 0;
#X connect 12 0 15 0;
#X connect 13 0 7 0;
#X connect 14 0 3 0;
#X connect 16 0 10 1;
#X connect 16 1 13 1;
#X connect 16 2 12 1;
#X connect 16 3 18 0;
#X connect 18 0 17 0;
#X connect 18 1 14 0;
#X restore 149 849 pd blob_lists;
#X text 75 29 Tracking multible blobs keeping their ID;
#N canvas 974 377 232 215 separation 0;
#X obj 17 20 inlet;
#X obj 18 133 pix_separator;
#X obj 118 133 pix_separator;
#X obj 17 45 t a a;
#X obj 18 113 separator;
#X obj 118 113 separator;
#X obj 18 153 outlet;
#X obj 118 153 outlet;
#X connect 0 0 3 0;
#X connect 1 0 6 0;
#X connect 2 0 7 0;
#X connect 3 0 5 0;
#X connect 3 1 4 0;
#X connect 4 0 1 0;
#X connect 5 0 2 0;
#X restore 32 389 pd separation ------;
#X msg 630 174 color 0.5 0.5 0.5 \, frame 25;
#X obj 32 666 translate -8 1 0 0;
#X text 394 910 Jakob Gomoll and Max Neupert \; GMU - Bauhaus-Universität
Weimar 2013;
#X text 75 16 Pure Data + Gem;
#X msg 193 721 borderAreaSize \$1;
#X msg 181 773 maxTimeInBorderArea \$1;
#X msg 188 827 maxTimeAtAll \$1;
#X obj 149 699 list;
#X obj 149 666 t b a;
#X obj 115 155 + 1;
#N canvas 919 321 233 399 processBlobs 0;
#X obj 11 5 inlet;
#X obj 72 79 list split 8;
#X obj 189 6 inlet;
#X obj 72 219 sel -1;
#X obj 129 155 t f f f;
#X obj 72 154 t f f f;
#X obj 45 55 t b a;
#N canvas 155 189 534 676 id_of_blob_by_pos 0;
#X obj 74 12 inlet;
#X obj 238 12 inlet;
#X obj 407 12 inlet;
#X obj 74 188 until;
#X obj 74 161 t f b;
#X msg 141 189 0;
#X obj 74 215 f;
#X obj 131 215 + 1;
#X obj 105 318 tabread blob_x;
#X obj 223 318 tabread blob_y;
#X floatatom 120 75 5 0 0 0 - - -;
#X floatatom 255 67 5 0 0 0 - - -;
#X floatatom 431 69 5 0 0 0 - - -;
#X obj 105 345 -;
#X obj 105 371 abs;
#X obj 223 345 -;
#X obj 223 371 abs;
#X obj 155 414 +;
#X msg 311 173 -1;
#X obj 74 245 t f f f f f;
#X obj 74 132 t f f;
#X obj 74 524 + 1;
#X obj 74 546 sel;
#X floatatom 15 291 5 0 0 0 - - -;
#X msg 343 173 10;
#X obj 206 274 tabread blob_ids;
#X obj 74 42 t b f b b;
#X floatatom 341 420 5 0 0 0 - - -;
#X obj 296 638 outlet;
#X floatatom 311 581 5 0 0 0 - - -;
#X obj 296 612 f;
#X obj 188 539 f;
#X obj 155 456 expr if ($f1 < $f2 && $f1 < $f3 \, $f1 \, -1) \;;
#X obj 155 487 sel -1;
#X obj 188 513 t b f;
#X floatatom 217 433 5 0 0 0 - - -;
#X obj 74 104 expr size("blob_ids");
#X connect 0 0 26 0;
#X connect 1 0 11 0;
#X connect 1 0 15 1;
#X connect 2 0 12 0;
#X connect 2 0 32 2;
#X connect 3 0 6 0;
#X connect 4 0 3 0;
#X connect 4 1 5 0;
#X connect 5 0 6 1;
#X connect 6 0 19 0;
#X connect 7 0 6 1;
#X connect 8 0 13 0;
#X connect 9 0 15 0;
#X connect 10 0 13 1;
#X connect 13 0 14 0;
#X connect 14 0 17 0;
#X connect 15 0 16 0;
#X connect 16 0 17 1;
#X connect 17 0 32 0;
#X connect 17 0 35 0;
#X connect 18 0 29 0;
#X connect 19 0 21 0;
#X connect 19 1 7 0;
#X connect 19 2 8 0;
#X connect 19 3 9 0;
#X connect 19 4 25 0;
#X connect 20 0 4 0;
#X connect 20 1 23 0;
#X connect 21 0 22 0;
#X connect 22 0 30 0;
#X connect 23 0 22 1;
#X connect 24 0 27 0;
#X connect 25 0 31 1;
#X connect 26 0 36 0;
#X connect 26 1 10 0;
#X connect 26 2 18 0;
#X connect 26 3 24 0;
#X connect 27 0 32 1;
#X connect 29 0 30 1;
#X connect 30 0 28 0;
#X connect 31 0 29 0;
#X connect 32 0 33 0;
#X connect 33 1 34 0;
#X connect 34 0 31 0;
#X connect 34 1 27 0;
#X connect 36 0 20 0;
#X restore 72 189 pd id_of_blob_by_pos;
#X obj 106 101 route list;
#X obj 72 129 unpack f f;
#N canvas 414 192 456 384 change_blob 0;
#X obj 15 29 inlet;
#X text 15 9 id:;
#X obj 119 30 inlet;
#X obj 220 31 inlet;
#X text 119 10 new x:;
#X text 220 11 new y:;
#X obj 15 95 sel -1;
#X obj 106 310 tabwrite blob_x;
#X obj 207 311 tabwrite blob_y;
#X obj 48 339 tabwrite blob_times;
#X obj 48 312 get_time;
#X obj 207 290 f;
#X obj 106 287 f;
#X obj 48 179 t b b f b f;
#X obj 15 64 index_of_blob;
#X connect 0 0 14 0;
#X connect 2 0 12 1;
#X connect 3 0 11 1;
#X connect 6 1 13 0;
#X connect 10 0 9 0;
#X connect 11 0 8 0;
#X connect 12 0 7 0;
#X connect 13 0 10 0;
#X connect 13 1 12 0;
#X connect 13 2 9 1;
#X connect 13 2 7 1;
#X connect 13 3 11 0;
#X connect 13 4 8 1;
#X connect 14 0 6 0;
#X restore 105 256 pd change_blob;
#N canvas 1077 525 450 300 draw_blobs 0;
#X obj 22 14 inlet;
#X obj 22 63 t f b;
#X obj 22 88 until;
#X obj 22 114 f;
#X msg 64 87 0;
#X obj 49 163 tabread blob_ids;
#X obj 22 139 t f f;
#X obj 64 113 + 1;
#N canvas 1166 204 450 582 draw_blob 0;
#X obj 24 14 inlet;
#X obj 148 135 tabread blob_y;
#X obj 43 135 tabread blob_x;
#X obj 148 159 * -6;
#X obj 148 183 + 3;
#X obj 24 240 translateXYZ;
#X obj 24 263 colorRGB 1 0.5 1;
#X obj 43 182 - 4;
#X obj 43 158 * 8;
#X obj 24 104 t b f f;
#X obj 24 377 colorRGB 0 1 0.5;
#X obj 38 405 loadbang;
#X msg 38 428 font Vera.ttf;
#X obj 24 472 text3d \$1;
#X obj 24 44 t f f;
#X floatatom 268 130 5 0 0 0 - - -;
#X obj 24 309 rectangle 0.01 0.6;
#X obj 24 286 rectangle 0.6 0.01;
#X msg 75 451 9;
#X obj 24 350 translateXYZ 0.2 0.4 0;
#X obj 24 73 index_of_blob;
#X obj 24 217 gemhead;
#X connect 0 0 14 0;
#X connect 1 0 3 0;
#X connect 2 0 8 0;
#X connect 3 0 4 0;
#X connect 4 0 5 2;
#X connect 5 0 6 0;
#X connect 6 0 17 0;
#X connect 7 0 5 1;
#X connect 8 0 7 0;
#X connect 9 0 21 0;
#X connect 9 1 2 0;
#X connect 9 2 1 0;
#X connect 10 0 13 0;
#X connect 11 0 12 0;
#X connect 11 0 18 0;
#X connect 12 0 13 0;
#X connect 14 0 20 0;
#X connect 14 1 15 0;
#X connect 15 0 13 0;
#X connect 16 0 19 0;
#X connect 17 0 16 0;
#X connect 18 0 13 1;
#X connect 19 0 10 0;
#X connect 20 0 9 0;
#X connect 21 0 5 0;
#X restore 88 215 pd draw_blob;
#X obj 49 186 moses 1;
#X obj 22 39 expr size("blob_ids");
#X connect 0 0 10 0;
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 3 0 6 0;
#X connect 4 0 3 1;
#X connect 5 0 9 0;
#X connect 6 0 7 0;
#X connect 6 1 5 0;
#X connect 7 0 3 1;
#X connect 9 1 8 0;
#X connect 10 0 1 0;
#X restore 45 329 pd draw_blobs;
#N canvas 754 253 687 721 add_blob 0;
#X obj 233 29 inlet;
#X obj 337 29 inlet;
#X text 337 9 pos_y:;
#X text 233 9 pos_x:;
#X obj 18 546 tabwrite blob_ids;
#X obj 11 302 + 1;
#X floatatom -1 497 5 0 0 0 - - -;
#X obj -9 29 inlet;
#X text -9 9 bang:;
#X obj -9 474 get_valid_id;
#X obj -9 56 t b b;
#X obj 218 546 tabwrite blob_x;
#X obj 322 546 tabwrite blob_y;
#X obj 102 193 sel -1;
#X msg 102 218 0;
#X msg 135 218 1;
#X obj 102 167 tabread blob_ids;
#X msg 102 140 0;
#X obj -9 522 t f f;
#X obj -9 625 outlet;
#X msg 11 328 \; blob_ids resize \$1 \; blob_x resize \$1 \; blob_y
resize \$1 \; blob_times resize \$1;
#X obj 425 523 get_time;
#X obj 425 547 tabwrite blob_times;
#X obj -9 409 t b b b b;
#X obj 322 523 f;
#X obj 218 525 f;
#X obj 102 246 t f f f f f;
#X obj 102 88 value blobIDs;
#X obj 38 302 value blobIDs;
#X obj 102 114 sel 1;
#X connect 0 0 25 1;
#X connect 1 0 24 1;
#X connect 5 0 20 0;
#X connect 5 0 28 0;
#X connect 7 0 10 0;
#X connect 9 0 6 0;
#X connect 9 0 18 0;
#X connect 10 0 23 0;
#X connect 10 1 27 0;
#X connect 13 0 14 0;
#X connect 13 1 15 0;
#X connect 14 0 26 0;
#X connect 15 0 26 0;
#X connect 16 0 13 0;
#X connect 17 0 16 0;
#X connect 18 0 19 0;
#X connect 18 1 4 0;
#X connect 21 0 22 0;
#X connect 23 0 9 0;
#X connect 23 1 25 0;
#X connect 23 2 24 0;
#X connect 23 3 21 0;
#X connect 24 0 12 0;
#X connect 25 0 11 0;
#X connect 26 0 5 0;
#X connect 26 1 4 1;
#X connect 26 2 11 1;
#X connect 26 3 12 1;
#X connect 26 4 22 1;
#X connect 27 0 29 0;
#X connect 29 0 17 0;
#X connect 29 1 26 0;
#X restore 72 283 pd add_blob;
#X obj 11 31 list split 3;
#X connect 0 0 13 0;
#X connect 1 0 9 0;
#X connect 1 1 8 0;
#X connect 2 0 7 2;
#X connect 3 0 12 0;
#X connect 3 1 10 0;
#X connect 4 0 7 1;
#X connect 4 1 12 2;
#X connect 4 2 10 2;
#X connect 5 0 7 0;
#X connect 5 1 12 1;
#X connect 5 2 10 1;
#X connect 6 0 11 0;
#X connect 6 1 1 0;
#X connect 7 0 3 0;
#X connect 8 0 1 0;
#X connect 9 0 5 0;
#X connect 9 1 4 0;
#X connect 13 1 6 0;
#X restore 149 931 pd processBlobs;
#X text 594 640 Pix_multiblob has changed after gem 0.93.3;
#X text 594 658 if you have a newer Gem version \, this patch;
#X text 595 675 will NOT work.;
#X connect 2 0 3 0;
#X connect 12 0 13 0;
#X connect 15 0 79 0;
#X connect 16 0 15 1;
#X connect 16 0 17 0;
#X connect 18 0 19 0;
#X connect 18 0 15 2;
#X connect 22 0 25 1;
#X connect 24 0 23 0;
#X connect 24 0 26 1;
#X connect 24 0 89 0;
#X connect 25 0 24 1;
#X connect 26 0 15 0;
#X connect 26 1 59 0;
#X connect 27 0 26 0;
#X connect 28 0 26 0;
#X connect 28 1 24 0;
#X connect 32 0 71 0;
#X connect 36 0 69 0;
#X connect 39 0 36 2;
#X connect 39 0 38 0;
#X connect 40 0 36 1;
#X connect 40 0 37 0;
#X connect 44 0 27 0;
#X connect 47 0 69 0;
#X connect 48 0 69 0;
#X connect 49 0 48 0;
#X connect 50 0 47 0;
#X connect 59 0 21 0;
#X connect 60 0 11 0;
#X connect 62 0 65 0;
#X connect 62 0 84 0;
#X connect 63 0 64 0;
#X connect 63 0 85 0;
#X connect 67 0 68 0;
#X connect 67 0 90 1;
#X connect 69 0 88 0;
#X connect 69 1 87 1;
#X connect 70 0 28 0;
#X connect 72 0 73 0;
#X connect 72 0 86 0;
#X connect 76 0 71 0;
#X connect 77 0 90 0;
#X connect 79 0 81 0;
#X connect 79 1 36 0;
#X connect 80 0 71 0;
#X connect 81 0 12 0;
#X connect 84 0 77 0;
#X connect 85 0 77 0;
#X connect 86 0 77 0;
#X connect 87 0 77 0;
#X connect 88 0 87 0;
#X connect 88 1 2 0;
#X connect 89 0 25 0;