TrackerNano.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using OpenCVForUnity.CoreModule;
  2. using OpenCVForUnity.UtilsModule;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Runtime.InteropServices;
  6. namespace OpenCVForUnity.VideoModule
  7. {
  8. // C++: class TrackerNano
  9. /**
  10. * the Nano tracker is a super lightweight dnn-based general object tracking.
  11. *
  12. * Nano tracker is much faster and extremely lightweight due to special model structure, the whole model size is about 1.9 MB.
  13. * Nano tracker needs two models: one for feature extraction (backbone) and the another for localization (neckhead).
  14. * Model download link: https://github.com/HonglinChu/SiamTrackers/tree/master/NanoTrack/models/nanotrackv2
  15. * Original repo is here: https://github.com/HonglinChu/NanoTrack
  16. * Author: HongLinChu, 1628464345qq.com
  17. */
  18. public class TrackerNano : Tracker
  19. {
  20. protected override void Dispose(bool disposing)
  21. {
  22. try
  23. {
  24. if (disposing)
  25. {
  26. }
  27. if (IsEnabledDispose)
  28. {
  29. if (nativeObj != IntPtr.Zero)
  30. video_TrackerNano_delete(nativeObj);
  31. nativeObj = IntPtr.Zero;
  32. }
  33. }
  34. finally
  35. {
  36. base.Dispose(disposing);
  37. }
  38. }
  39. protected internal TrackerNano(IntPtr addr) : base(addr) { }
  40. // internal usage only
  41. public static new TrackerNano __fromPtr__(IntPtr addr) { return new TrackerNano(addr); }
  42. //
  43. // C++: static Ptr_TrackerNano cv::TrackerNano::create(TrackerNano_Params parameters = TrackerNano::Params())
  44. //
  45. /**
  46. * Constructor
  47. * param parameters NanoTrack parameters TrackerNano::Params
  48. * return automatically generated
  49. */
  50. public static TrackerNano create(TrackerNano_Params parameters)
  51. {
  52. if (parameters != null) parameters.ThrowIfDisposed();
  53. return TrackerNano.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(video_TrackerNano_create_10(parameters.nativeObj)));
  54. }
  55. /**
  56. * Constructor
  57. * return automatically generated
  58. */
  59. public static TrackerNano create()
  60. {
  61. return TrackerNano.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(video_TrackerNano_create_11()));
  62. }
  63. //
  64. // C++: float cv::TrackerNano::getTrackingScore()
  65. //
  66. /**
  67. * Return tracking score
  68. * return automatically generated
  69. */
  70. public float getTrackingScore()
  71. {
  72. ThrowIfDisposed();
  73. return video_TrackerNano_getTrackingScore_10(nativeObj);
  74. }
  75. #if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
  76. const string LIBNAME = "__Internal";
  77. #else
  78. const string LIBNAME = "opencvforunity";
  79. #endif
  80. // C++: static Ptr_TrackerNano cv::TrackerNano::create(TrackerNano_Params parameters = TrackerNano::Params())
  81. [DllImport(LIBNAME)]
  82. private static extern IntPtr video_TrackerNano_create_10(IntPtr parameters_nativeObj);
  83. [DllImport(LIBNAME)]
  84. private static extern IntPtr video_TrackerNano_create_11();
  85. // C++: float cv::TrackerNano::getTrackingScore()
  86. [DllImport(LIBNAME)]
  87. private static extern float video_TrackerNano_getTrackingScore_10(IntPtr nativeObj);
  88. // native support for java finalize()
  89. [DllImport(LIBNAME)]
  90. private static extern void video_TrackerNano_delete(IntPtr nativeObj);
  91. }
  92. }