Skip to content

Commit 602df1d

Browse files
committed
update 2.4.4
1 parent 5b0b48c commit 602df1d

20 files changed

+14244
-4562
lines changed

Assets/OpenCVForUnity/Examples/ContribModules/tracking/TrackingExample/TrackingExample.cs

Lines changed: 122 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
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;
72
using OpenCVForUnity.ImgprocModule;
3+
using OpenCVForUnity.TrackingModule;
84
using OpenCVForUnity.UnityUtils;
95
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;
1013

1114
namespace 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

Comments
 (0)