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 ;
72using OpenCVForUnity . ImgprocModule ;
3+ using OpenCVForUnity . TrackingModule ;
84using OpenCVForUnity . UnityUtils ;
95using 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 ;
1013
1114namespace OpenCVForUnityExample
1215{
@@ -19,24 +22,29 @@ namespace OpenCVForUnityExample
1922 public class TrackingExample : MonoBehaviour
2023 {
2124 /// <summary>
22- /// The texture .
25+ /// The trackerKFC Toggle .
2326 /// </summary>
24- Texture2D texture ;
27+ public Toggle trackerKCFToggle ;
2528
2629 /// <summary>
27- /// The trackers .
30+ /// The trackerCSRT Toggle .
2831 /// </summary>
29- MultiTracker trackers ;
32+ public Toggle trackerCSRTToggle ;
3033
3134 /// <summary>
32- /// The objects .
35+ /// The trackerMIL Toggle .
3336 /// </summary>
34- MatOfRect2d objects ;
37+ public Toggle trackerMILToggle ;
3538
3639 /// <summary>
37- /// The tracking color list .
40+ /// The texture .
3841 /// </summary>
39- List < Scalar > trackingColorList ;
42+ Texture2D texture ;
43+
44+ /// <summary>
45+ /// The trackers.
46+ /// </summary>
47+ List < TrackerSetting > trackers ;
4048
4149 /// <summary>
4250 /// The selected point list.
@@ -108,10 +116,8 @@ public void OnVideoCaptureToMatHelperInitialized()
108116 }
109117
110118
111- trackers = MultiTracker . create ( ) ;
112- objects = new MatOfRect2d ( ) ;
119+ trackers = new List < TrackerSetting > ( ) ;
113120
114- trackingColorList = new List < Scalar > ( ) ;
115121 selectedPointList = new List < Point > ( ) ;
116122 }
117123
@@ -196,42 +202,79 @@ void Update()
196202 }
197203 else if ( selectedPointList . Count == 2 )
198204 {
205+ ResetTrackers ( ) ;
206+
199207 using ( MatOfPoint selectedPointMat = new MatOfPoint ( selectedPointList . ToArray ( ) ) )
200208 {
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+ }
204232 }
205233
206234 selectedPointList . Clear ( ) ;
207- trackingColorList . Add ( new Scalar ( UnityEngine . Random . Range ( 0 , 255 ) , UnityEngine . Random . Range ( 0 , 255 ) , UnityEngine . Random . Range ( 0 , 255 ) ) ) ;
208- }
209235
236+ if ( trackers . Count > 0 )
237+ {
238+ if ( fpsMonitor != null )
239+ {
240+ fpsMonitor . consoleText = "" ;
241+ }
210242
211- trackers . update ( rgbMat , objects ) ;
243+ trackerKCFToggle . interactable = trackerCSRTToggle . interactable = trackerMILToggle . interactable = false ;
244+ }
245+ }
212246
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 ++ )
216249 {
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 ) ;
219256
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+ }
220260
221- if ( selectedPointList . Count != 1 )
261+ if ( trackers . Count == 0 )
222262 {
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 )
225264 {
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+ }
227270 }
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
233272 {
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+ }
235278 }
236279 }
237280
@@ -252,6 +295,20 @@ void Update()
252295 }
253296 }
254297
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+
255312 private void OnTouch ( Point touchPoint , int textureWidth = - 1 , int textureHeight = - 1 )
256313 {
257314 if ( selectedPointList . Count < 2 )
@@ -327,11 +384,7 @@ void OnDestroy()
327384 if ( sourceToMatHelper != null )
328385 sourceToMatHelper . Dispose ( ) ;
329386
330- if ( trackers != null )
331- trackers . Dispose ( ) ;
332-
333- if ( objects != null )
334- objects . Dispose ( ) ;
387+ ResetTrackers ( ) ;
335388 }
336389
337390 /// <summary>
@@ -343,25 +396,38 @@ public void OnBackButtonClick()
343396 }
344397
345398 /// <summary>
346- /// Raises the reset tracker button click event.
399+ /// Raises the reset trackers button click event.
347400 /// </summary>
348- public void OnResetTrackerButtonClick ( )
401+ public void OnResetTrackersButtonClick ( )
349402 {
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 )
351416 {
352- trackers . Dispose ( ) ;
353- trackers = null ;
417+ this . tracker = tracker ;
418+ this . label = label ;
419+ this . lineColor = lineColor ;
420+ this . boundingBox = new Rect ( ) ;
354421 }
355- if ( objects != null )
422+
423+ public void Dispose ( )
356424 {
357- objects . Dispose ( ) ;
358- objects = null ;
425+ if ( tracker != null )
426+ {
427+ tracker . Dispose ( ) ;
428+ tracker = null ;
429+ }
359430 }
360-
361- trackers = MultiTracker . create ( ) ;
362- objects = new MatOfRect2d ( ) ;
363- trackingColorList . Clear ( ) ;
364- selectedPointList . Clear ( ) ;
365431 }
366432 }
367433}
0 commit comments