123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- #if !UNITY_WSA_10_0
- using OpenCVForUnity.CoreModule;
- using OpenCVForUnity.UtilsModule;
- using System;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
- namespace OpenCVForUnity.DnnModule
- {
- // C++: class DetectionModel
- /**
- * This class represents high-level API for object detection networks.
- *
- * DetectionModel allows to set params for preprocessing input image.
- * DetectionModel creates net from file with trained weights and config,
- * sets preprocessing input, runs forward pass and return result detections.
- * For DetectionModel SSD, Faster R-CNN, YOLO topologies are supported.
- */
- public class DetectionModel : Model
- {
- protected override void Dispose(bool disposing)
- {
- try
- {
- if (disposing)
- {
- }
- if (IsEnabledDispose)
- {
- if (nativeObj != IntPtr.Zero)
- dnn_DetectionModel_delete(nativeObj);
- nativeObj = IntPtr.Zero;
- }
- }
- finally
- {
- base.Dispose(disposing);
- }
- }
- protected internal DetectionModel(IntPtr addr) : base(addr) { }
- // internal usage only
- public static new DetectionModel __fromPtr__(IntPtr addr) { return new DetectionModel(addr); }
- //
- // C++: cv::dnn::DetectionModel::DetectionModel(String model, String config = "")
- //
- /**
- * Create detection model from network represented in one of the supported formats.
- * An order of {code model} and {code config} arguments does not matter.
- * param model Binary file contains trained weights.
- * param config Text file contains network configuration.
- */
- public DetectionModel(string model, string config) :
- base(DisposableObject.ThrowIfNullIntPtr(dnn_DetectionModel_DetectionModel_10(model, config)))
- {
- }
- /**
- * Create detection model from network represented in one of the supported formats.
- * An order of {code model} and {code config} arguments does not matter.
- * param model Binary file contains trained weights.
- */
- public DetectionModel(string model) :
- base(DisposableObject.ThrowIfNullIntPtr(dnn_DetectionModel_DetectionModel_11(model)))
- {
- }
- //
- // C++: cv::dnn::DetectionModel::DetectionModel(Net network)
- //
- /**
- * Create model from deep learning network.
- * param network Net object.
- */
- public DetectionModel(Net network) :
- base(DisposableObject.ThrowIfNullIntPtr(dnn_DetectionModel_DetectionModel_12(network.nativeObj)))
- {
- }
- //
- // C++: DetectionModel cv::dnn::DetectionModel::setNmsAcrossClasses(bool value)
- //
- /**
- * nmsAcrossClasses defaults to false,
- * such that when non max suppression is used during the detect() function, it will do so per-class.
- * This function allows you to toggle this behaviour.
- * param value The new value for nmsAcrossClasses
- * return automatically generated
- */
- public DetectionModel setNmsAcrossClasses(bool value)
- {
- ThrowIfDisposed();
- return new DetectionModel(DisposableObject.ThrowIfNullIntPtr(dnn_DetectionModel_setNmsAcrossClasses_10(nativeObj, value)));
- }
- //
- // C++: bool cv::dnn::DetectionModel::getNmsAcrossClasses()
- //
- /**
- * Getter for nmsAcrossClasses. This variable defaults to false,
- * such that when non max suppression is used during the detect() function, it will do so only per-class
- * return automatically generated
- */
- public bool getNmsAcrossClasses()
- {
- ThrowIfDisposed();
- return dnn_DetectionModel_getNmsAcrossClasses_10(nativeObj);
- }
- //
- // C++: void cv::dnn::DetectionModel::detect(Mat frame, vector_int& classIds, vector_float& confidences, vector_Rect& boxes, float confThreshold = 0.5f, float nmsThreshold = 0.0f)
- //
- /**
- * Given the {code input} frame, create input blob, run net and return result detections.
- * param classIds Class indexes in result detection.
- * param confidences A set of corresponding confidences.
- * param boxes A set of bounding boxes.
- * param confThreshold A threshold used to filter boxes by confidences.
- * param nmsThreshold A threshold used in non maximum suppression.
- * param frame automatically generated
- */
- public void detect(Mat frame, MatOfInt classIds, MatOfFloat confidences, MatOfRect boxes, float confThreshold, float nmsThreshold)
- {
- ThrowIfDisposed();
- if (frame != null) frame.ThrowIfDisposed();
- if (classIds != null) classIds.ThrowIfDisposed();
- if (confidences != null) confidences.ThrowIfDisposed();
- if (boxes != null) boxes.ThrowIfDisposed();
- Mat classIds_mat = classIds;
- Mat confidences_mat = confidences;
- Mat boxes_mat = boxes;
- dnn_DetectionModel_detect_10(nativeObj, frame.nativeObj, classIds_mat.nativeObj, confidences_mat.nativeObj, boxes_mat.nativeObj, confThreshold, nmsThreshold);
- }
- /**
- * Given the {code input} frame, create input blob, run net and return result detections.
- * param classIds Class indexes in result detection.
- * param confidences A set of corresponding confidences.
- * param boxes A set of bounding boxes.
- * param confThreshold A threshold used to filter boxes by confidences.
- * param frame automatically generated
- */
- public void detect(Mat frame, MatOfInt classIds, MatOfFloat confidences, MatOfRect boxes, float confThreshold)
- {
- ThrowIfDisposed();
- if (frame != null) frame.ThrowIfDisposed();
- if (classIds != null) classIds.ThrowIfDisposed();
- if (confidences != null) confidences.ThrowIfDisposed();
- if (boxes != null) boxes.ThrowIfDisposed();
- Mat classIds_mat = classIds;
- Mat confidences_mat = confidences;
- Mat boxes_mat = boxes;
- dnn_DetectionModel_detect_11(nativeObj, frame.nativeObj, classIds_mat.nativeObj, confidences_mat.nativeObj, boxes_mat.nativeObj, confThreshold);
- }
- /**
- * Given the {code input} frame, create input blob, run net and return result detections.
- * param classIds Class indexes in result detection.
- * param confidences A set of corresponding confidences.
- * param boxes A set of bounding boxes.
- * param frame automatically generated
- */
- public void detect(Mat frame, MatOfInt classIds, MatOfFloat confidences, MatOfRect boxes)
- {
- ThrowIfDisposed();
- if (frame != null) frame.ThrowIfDisposed();
- if (classIds != null) classIds.ThrowIfDisposed();
- if (confidences != null) confidences.ThrowIfDisposed();
- if (boxes != null) boxes.ThrowIfDisposed();
- Mat classIds_mat = classIds;
- Mat confidences_mat = confidences;
- Mat boxes_mat = boxes;
- dnn_DetectionModel_detect_12(nativeObj, frame.nativeObj, classIds_mat.nativeObj, confidences_mat.nativeObj, boxes_mat.nativeObj);
- }
- #if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
- const string LIBNAME = "__Internal";
- #else
- const string LIBNAME = "opencvforunity";
- #endif
- // C++: cv::dnn::DetectionModel::DetectionModel(String model, String config = "")
- [DllImport(LIBNAME)]
- private static extern IntPtr dnn_DetectionModel_DetectionModel_10(string model, string config);
- [DllImport(LIBNAME)]
- private static extern IntPtr dnn_DetectionModel_DetectionModel_11(string model);
- // C++: cv::dnn::DetectionModel::DetectionModel(Net network)
- [DllImport(LIBNAME)]
- private static extern IntPtr dnn_DetectionModel_DetectionModel_12(IntPtr network_nativeObj);
- // C++: DetectionModel cv::dnn::DetectionModel::setNmsAcrossClasses(bool value)
- [DllImport(LIBNAME)]
- private static extern IntPtr dnn_DetectionModel_setNmsAcrossClasses_10(IntPtr nativeObj, [MarshalAs(UnmanagedType.U1)] bool value);
- // C++: bool cv::dnn::DetectionModel::getNmsAcrossClasses()
- [DllImport(LIBNAME)]
- [return: MarshalAs(UnmanagedType.U1)]
- private static extern bool dnn_DetectionModel_getNmsAcrossClasses_10(IntPtr nativeObj);
- // C++: void cv::dnn::DetectionModel::detect(Mat frame, vector_int& classIds, vector_float& confidences, vector_Rect& boxes, float confThreshold = 0.5f, float nmsThreshold = 0.0f)
- [DllImport(LIBNAME)]
- private static extern void dnn_DetectionModel_detect_10(IntPtr nativeObj, IntPtr frame_nativeObj, IntPtr classIds_mat_nativeObj, IntPtr confidences_mat_nativeObj, IntPtr boxes_mat_nativeObj, float confThreshold, float nmsThreshold);
- [DllImport(LIBNAME)]
- private static extern void dnn_DetectionModel_detect_11(IntPtr nativeObj, IntPtr frame_nativeObj, IntPtr classIds_mat_nativeObj, IntPtr confidences_mat_nativeObj, IntPtr boxes_mat_nativeObj, float confThreshold);
- [DllImport(LIBNAME)]
- private static extern void dnn_DetectionModel_detect_12(IntPtr nativeObj, IntPtr frame_nativeObj, IntPtr classIds_mat_nativeObj, IntPtr confidences_mat_nativeObj, IntPtr boxes_mat_nativeObj);
- // native support for java finalize()
- [DllImport(LIBNAME)]
- private static extern void dnn_DetectionModel_delete(IntPtr nativeObj);
- }
- }
- #endif
|