From b2c03b1615535dc717e196c560901e9e420c96d6 Mon Sep 17 00:00:00 2001
From: Tino Hager <tino.hager@nager.at>
Date: Sun, 24 Jun 2018 20:45:07 +0000
Subject: [PATCH] fix build error, add c# wrapper class
---
.gitignore | 3 +
build/darknet/YoloWrapper.cs | 83 +++++++++++++++++++++++++++++++++++++++++
src/yolo_v2_class.hpp | 10 ++--
3 files changed, 90 insertions(+), 6 deletions(-)
diff --git a/.gitignore b/.gitignore
index bbfed65..1bd67d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,7 +14,8 @@
decaf/
submission/
cfg/
-darknet
+build/darknet/*
+!build/darknet/YoloWrapper.cs
.fuse*
# OS Generated #
diff --git a/build/darknet/YoloWrapper.cs b/build/darknet/YoloWrapper.cs
new file mode 100644
index 0000000..ade0059
--- /dev/null
+++ b/build/darknet/YoloWrapper.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace Darknet
+{
+ public class YoloWrapper : IDisposable
+ {
+ private const string YoloLibraryName = "yolo_cpp_dll.dll";
+
+ [DllImport(YoloLibraryName, EntryPoint = "init")]
+ public static extern int InitializeYolo(string configurationFilename, string weightsFilename, int gpu);
+
+ [DllImport(YoloLibraryName, EntryPoint = "detect_image")]
+ public static extern int DetectImage(string filename, ref BboxContainer container);
+
+ [DllImport(YoloLibraryName, EntryPoint = "detect_mat")]
+ public static extern int DetectImage(IntPtr pArray, int nSize, ref BboxContainer container);
+
+ [DllImport(YoloLibraryName, EntryPoint = "dispose")]
+ public static extern int DisposeYolo();
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct bbox_t
+ {
+ public UInt32 x, y, w, h; // (x,y) - top-left corner, (w, h) - width & height of bounded box
+ public float prob; // confidence - probability that the object was found correctly
+ public UInt32 obj_id; // class of object - from range [0, classes-1]
+ public UInt32 track_id; // tracking id for video (0 - untracked, 1 - inf - tracked object)
+ public UInt32 frames_counter;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Size = 10)]
+ public struct BboxContainer
+ {
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
+ public bbox_t[] candidates;
+ }
+
+ public YoloWrapper(string configurationFilename, string weightsFilename, int gpu)
+ {
+ InitializeYolo(configurationFilename, weightsFilename, gpu);
+ }
+
+ public void Dispose()
+ {
+ DisposeYolo();
+ }
+
+ public bbox_t[] Detect(string filename)
+ {
+ var container = new BboxContainer();
+ var count = DetectImage(filename, ref container);
+
+ return container.candidates;
+ }
+
+ public bbox_t[] Detect(byte[] imageData)
+ {
+ var container = new BboxContainer();
+
+ var size = Marshal.SizeOf(imageData[0]) * imageData.Length;
+ var pnt = Marshal.AllocHGlobal(size);
+
+ try
+ {
+ // Copy the array to unmanaged memory.
+ Marshal.Copy(imageData, 0, pnt, imageData.Length);
+ DetectImage(pnt, imageData.Length, ref container);
+ }
+ catch (Exception exception)
+ {
+ return null;
+ }
+ finally
+ {
+ // Free the unmanaged memory.
+ Marshal.FreeHGlobal(pnt);
+ }
+
+ return container.candidates;
+ }
+ }
+}
diff --git a/src/yolo_v2_class.hpp b/src/yolo_v2_class.hpp
index 2715ce3..9875878 100644
--- a/src/yolo_v2_class.hpp
+++ b/src/yolo_v2_class.hpp
@@ -45,11 +45,11 @@
#include "opencv2/imgproc/imgproc_c.h" // C
#endif // OPENCV
-extern "C" __declspec(dllexport) int max_objects();
-extern "C" __declspec(dllexport) int init(const char *configurationFilename, const char *weightsFilename, int gpu);
-extern "C" __declspec(dllexport) int detect_image(const char *filename, bbox_t_container &container);
-extern "C" __declspec(dllexport) int detect_mat(const uint8_t* data, const size_t data_length, bbox_t_container &container);
-extern "C" __declspec(dllexport) int dispose();
+extern "C" YOLODLL_API int max_objects();
+extern "C" YOLODLL_API int init(const char *configurationFilename, const char *weightsFilename, int gpu);
+extern "C" YOLODLL_API int detect_image(const char *filename, bbox_t_container &container);
+extern "C" YOLODLL_API int detect_mat(const uint8_t* data, const size_t data_length, bbox_t_container &container);
+extern "C" YOLODLL_API int dispose();
class Detector {
std::shared_ptr<void> detector_gpu_ptr;
--
Gitblit v1.10.0