1
- using UnityEngine ;
2
- using UnityEngine . EventSystems ;
3
- using UnityEngine . SceneManagement ;
4
- using System . Collections . Generic ;
5
- using OpenCVForUnity . TrackingModule ;
6
- using OpenCVForUnity . CoreModule ;
1
+ using OpenCVForUnity . CoreModule ;
7
2
using OpenCVForUnity . ImgprocModule ;
3
+ using OpenCVForUnity . TrackingModule ;
8
4
using OpenCVForUnity . UnityUtils ;
9
5
using OpenCVForUnity . UnityUtils . Helper ;
6
+ using OpenCVForUnity . VideoModule ;
7
+ using System . Collections . Generic ;
8
+ using UnityEngine ;
9
+ using UnityEngine . EventSystems ;
10
+ using UnityEngine . SceneManagement ;
11
+ using UnityEngine . UI ;
12
+ using Rect = OpenCVForUnity . CoreModule . Rect ;
10
13
11
14
namespace OpenCVForUnityExample
12
15
{
@@ -19,24 +22,29 @@ namespace OpenCVForUnityExample
19
22
public class TrackingExample : MonoBehaviour
20
23
{
21
24
/// <summary>
22
- /// The texture .
25
+ /// The trackerKFC Toggle .
23
26
/// </summary>
24
- Texture2D texture ;
27
+ public Toggle trackerKCFToggle ;
25
28
26
29
/// <summary>
27
- /// The trackers .
30
+ /// The trackerCSRT Toggle .
28
31
/// </summary>
29
- MultiTracker trackers ;
32
+ public Toggle trackerCSRTToggle ;
30
33
31
34
/// <summary>
32
- /// The objects .
35
+ /// The trackerMIL Toggle .
33
36
/// </summary>
34
- MatOfRect2d objects ;
37
+ public Toggle trackerMILToggle ;
35
38
36
39
/// <summary>
37
- /// The tracking color list .
40
+ /// The texture .
38
41
/// </summary>
39
- List < Scalar > trackingColorList ;
42
+ Texture2D texture ;
43
+
44
+ /// <summary>
45
+ /// The trackers.
46
+ /// </summary>
47
+ List < TrackerSetting > trackers ;
40
48
41
49
/// <summary>
42
50
/// The selected point list.
@@ -108,10 +116,8 @@ public void OnVideoCaptureToMatHelperInitialized()
108
116
}
109
117
110
118
111
- trackers = MultiTracker . create ( ) ;
112
- objects = new MatOfRect2d ( ) ;
119
+ trackers = new List < TrackerSetting > ( ) ;
113
120
114
- trackingColorList = new List < Scalar > ( ) ;
115
121
selectedPointList = new List < Point > ( ) ;
116
122
}
117
123
@@ -196,42 +202,79 @@ void Update()
196
202
}
197
203
else if ( selectedPointList . Count == 2 )
198
204
{
205
+ ResetTrackers ( ) ;
206
+
199
207
using ( MatOfPoint selectedPointMat = new MatOfPoint ( selectedPointList . ToArray ( ) ) )
200
208
{
201
- // add tracker.
202
- OpenCVForUnity . CoreModule . Rect region = Imgproc . boundingRect ( selectedPointMat ) ;
203
- trackers . add ( TrackerKCF . create ( ) , rgbMat , new Rect2d ( region . x , region . y , region . width , region . height ) ) ;
209
+ Rect region = Imgproc . boundingRect ( selectedPointMat ) ;
210
+
211
+ // init trackers.
212
+ if ( trackerKCFToggle . isOn )
213
+ {
214
+ TrackerKCF trackerKCF = TrackerKCF . create ( new TrackerKCF_Params ( ) ) ;
215
+ trackerKCF . init ( rgbMat , region ) ;
216
+ trackers . Add ( new TrackerSetting ( trackerKCF , trackerKCF . GetType ( ) . Name . ToString ( ) , new Scalar ( 255 , 0 , 0 ) ) ) ;
217
+ }
218
+
219
+ if ( trackerCSRTToggle . isOn )
220
+ {
221
+ TrackerCSRT trackerCSRT = TrackerCSRT . create ( new TrackerCSRT_Params ( ) ) ;
222
+ trackerCSRT . init ( rgbMat , region ) ;
223
+ trackers . Add ( new TrackerSetting ( trackerCSRT , trackerCSRT . GetType ( ) . Name . ToString ( ) , new Scalar ( 0 , 255 , 0 ) ) ) ;
224
+ }
225
+
226
+ if ( trackerMILToggle . isOn )
227
+ {
228
+ TrackerMIL trackerMIL = TrackerMIL . create ( new TrackerMIL_Params ( ) ) ;
229
+ trackerMIL . init ( rgbMat , region ) ;
230
+ trackers . Add ( new TrackerSetting ( trackerMIL , trackerMIL . GetType ( ) . Name . ToString ( ) , new Scalar ( 0 , 0 , 255 ) ) ) ;
231
+ }
204
232
}
205
233
206
234
selectedPointList . Clear ( ) ;
207
- trackingColorList . Add ( new Scalar ( UnityEngine . Random . Range ( 0 , 255 ) , UnityEngine . Random . Range ( 0 , 255 ) , UnityEngine . Random . Range ( 0 , 255 ) ) ) ;
208
- }
209
235
236
+ if ( trackers . Count > 0 )
237
+ {
238
+ if ( fpsMonitor != null )
239
+ {
240
+ fpsMonitor . consoleText = "" ;
241
+ }
210
242
211
- trackers . update ( rgbMat , objects ) ;
243
+ trackerKCFToggle . interactable = trackerCSRTToggle . interactable = trackerMILToggle . interactable = false ;
244
+ }
245
+ }
212
246
213
- // draw tracked objects regions.
214
- Rect2d [ ] objectsArray = objects . toArray ( ) ;
215
- for ( int i = 0 ; i < objectsArray . Length ; i ++ )
247
+ // update trackers.
248
+ for ( int i = 0 ; i < trackers . Count ; i ++ )
216
249
{
217
- Imgproc . rectangle ( rgbMat , objectsArray [ i ] . tl ( ) , objectsArray [ i ] . br ( ) , trackingColorList [ i ] , 2 , 1 , 0 ) ;
218
- }
250
+ Tracker tracker = trackers [ i ] . tracker ;
251
+ string label = trackers [ i ] . label ;
252
+ Scalar lineColor = trackers [ i ] . lineColor ;
253
+ Rect boundingBox = trackers [ i ] . boundingBox ;
254
+
255
+ tracker . update ( rgbMat , boundingBox ) ;
219
256
257
+ Imgproc . rectangle ( rgbMat , boundingBox . tl ( ) , boundingBox . br ( ) , lineColor , 2 , 1 , 0 ) ;
258
+ Imgproc . putText ( rgbMat , label , new Point ( boundingBox . x , boundingBox . y - 5 ) , Imgproc . FONT_HERSHEY_SIMPLEX , 0.5 , lineColor , 1 , Imgproc . LINE_AA , false ) ;
259
+ }
220
260
221
- if ( selectedPointList . Count != 1 )
261
+ if ( trackers . Count == 0 )
222
262
{
223
- //Imgproc.putText (rgbMat, "Please touch the screen, and select tracking regions.", new Point (5, rgbMat.rows () - 10), Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar (255, 255, 255, 255), 2, Imgproc.LINE_AA, false);
224
- if ( fpsMonitor != null )
263
+ if ( selectedPointList . Count != 1 )
225
264
{
226
- fpsMonitor . consoleText = "Please touch the screen, and select tracking regions." ;
265
+ //Imgproc.putText (rgbMat, "Please touch the screen, and select tracking regions.", new Point (5, rgbMat.rows () - 10), Imgproc.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar (255, 255, 255, 255), 2, Imgproc.LINE_AA, false);
266
+ if ( fpsMonitor != null )
267
+ {
268
+ fpsMonitor . consoleText = "Please touch the screen, and select tracking regions." ;
269
+ }
227
270
}
228
- }
229
- else
230
- {
231
- //Imgproc.putText (rgbMat, "Please select the end point of the new tracking region.", new Point (5, rgbMat.rows () - 10), Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar (255, 255, 255, 255), 2, Imgproc.LINE_AA, false);
232
- if ( fpsMonitor != null )
271
+ else
233
272
{
234
- fpsMonitor . consoleText = "Please select the end point of the new tracking region." ;
273
+ //Imgproc.putText (rgbMat, "Please select the end point of the new tracking region.", new Point (5, rgbMat.rows () - 10), Imgproc.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar (255, 255, 255, 255), 2, Imgproc.LINE_AA, false);
274
+ if ( fpsMonitor != null )
275
+ {
276
+ fpsMonitor . consoleText = "Please select the end point of the new tracking region." ;
277
+ }
235
278
}
236
279
}
237
280
@@ -252,6 +295,20 @@ void Update()
252
295
}
253
296
}
254
297
298
+ private void ResetTrackers ( )
299
+ {
300
+ if ( trackers != null )
301
+ {
302
+ foreach ( var t in trackers )
303
+ {
304
+ t . Dispose ( ) ;
305
+ }
306
+ trackers . Clear ( ) ;
307
+ }
308
+
309
+ trackerKCFToggle . interactable = trackerCSRTToggle . interactable = trackerMILToggle . interactable = true ;
310
+ }
311
+
255
312
private void OnTouch ( Point touchPoint , int textureWidth = - 1 , int textureHeight = - 1 )
256
313
{
257
314
if ( selectedPointList . Count < 2 )
@@ -327,11 +384,7 @@ void OnDestroy()
327
384
if ( sourceToMatHelper != null )
328
385
sourceToMatHelper . Dispose ( ) ;
329
386
330
- if ( trackers != null )
331
- trackers . Dispose ( ) ;
332
-
333
- if ( objects != null )
334
- objects . Dispose ( ) ;
387
+ ResetTrackers ( ) ;
335
388
}
336
389
337
390
/// <summary>
@@ -343,25 +396,38 @@ public void OnBackButtonClick()
343
396
}
344
397
345
398
/// <summary>
346
- /// Raises the reset tracker button click event.
399
+ /// Raises the reset trackers button click event.
347
400
/// </summary>
348
- public void OnResetTrackerButtonClick ( )
401
+ public void OnResetTrackersButtonClick ( )
349
402
{
350
- if ( trackers != null )
403
+ ResetTrackers ( ) ;
404
+
405
+ selectedPointList . Clear ( ) ;
406
+ }
407
+
408
+ class TrackerSetting
409
+ {
410
+ public Tracker tracker ;
411
+ public string label ;
412
+ public Scalar lineColor ;
413
+ public Rect boundingBox ;
414
+
415
+ public TrackerSetting ( Tracker tracker , string label , Scalar lineColor )
351
416
{
352
- trackers . Dispose ( ) ;
353
- trackers = null ;
417
+ this . tracker = tracker ;
418
+ this . label = label ;
419
+ this . lineColor = lineColor ;
420
+ this . boundingBox = new Rect ( ) ;
354
421
}
355
- if ( objects != null )
422
+
423
+ public void Dispose ( )
356
424
{
357
- objects . Dispose ( ) ;
358
- objects = null ;
425
+ if ( tracker != null )
426
+ {
427
+ tracker . Dispose ( ) ;
428
+ tracker = null ;
429
+ }
359
430
}
360
-
361
- trackers = MultiTracker . create ( ) ;
362
- objects = new MatOfRect2d ( ) ;
363
- trackingColorList . Clear ( ) ;
364
- selectedPointList . Clear ( ) ;
365
431
}
366
432
}
367
433
}
0 commit comments