C#调用YOLOv3算法dll动态链接库
前段时间在搞一个软件,目标是实现细胞计数的功能,当时我细胞计数的算法用到的是YOLOv3目标检测算法,所以就涉及到怎么实现模型落地的问题。当时有个同学在帮老师做项目,他比较懂,我于是向他寻求帮助,但是…可能涉及到了商业机密吧,于是我就自己研究。
我看了很多博客,感觉讲的也不是很到位,或者说没有给出一些干货,今天我来给大家带点干货,当然我是用**C#**调用的YOLOv3动态链接库,如果有需要的小伙伴就拿去吧。
yolov3编译成动态库
大家按照这个链接去GitHub下载YOLOv3的源码:https://github.com/AlexeyAB/darknet?tdsourcetag=s_pcqq_aiomsg.我是按照这个教程做的:https://zhuanlan.zhihu.com/p/97605980,这个教程还是很详细的,我就不讲了。
C#调用YOLOv3动态链接库
我已经将软件打包到GitHub上了:https://github.com/NameZth/AICounter-master.git,由于YOLOv3的权重文件和配置文件太大就没有上传,所以需要小伙伴自己训练一下模型. 当然我也是参考别人做的:https://github.com/RaminAbbaszadi/YoloWrapper-WPF,下面是文件的分布:
在***DeepLearningWrapper***这个文件中调用的YOLOv3的动态链接库:
using System;
using System.IO;
using System.Text;
using System.Linq;
using DeepLearning.Base;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace DeepLearning
{
public class DeepLearningWrapper : IDisposable
{
#region Const
public const int MAX_OBJECTS_NUMBER = 1000;
private const string DEEP_LEARNING_LIBRARY_DLL_CPU_VERSION = @"\x64\yolo_cpp_dll.dll";
private const string DEEP_LEARNING_LIBRARY_DLL_GPU_VERSION = @"\x64\yolo_cpp_gpu.dll";
#endregion
#region Fields
private static Dictionary<int, string> m_ObjectType = new Dictionary<int, string>();
private static NetConfigaration m_NetConf;
#endregion
#region Initilizing
public DeepLearningWrapper()
{
}
#endregion
#region DllImport Cpu
[DllImport(DEEP_LEARNING_LIBRARY_DLL_CPU_VERSION, EntryPoint = "init")]
public static extern int InitializeNetInCpu(string configrationFilenamr, string weightFileanme, int gpu);
[DllImport(DEEP_LEARNING_LIBRARY_DLL_CPU_VERSION, EntryPoint = "detect_image")]
internal static extern int DetectImageInCpu(string filename, ref BoundingBoxContainer container);
[DllImport(DEEP_LEARNING_LIBRARY_DLL_CPU_VERSION, EntryPoint = "detect_mat")]
internal static extern int DetectImageInCpu(IntPtr pArray, int nSize, ref BoundingBoxContainer container);
[DllImport(DEEP_LEARNING_LIBRARY_DLL_CPU_VERSION, EntryPoint = "dispose")]
internal static extern int DisposeNetInCpu();
#endregion
#region DllImport Gpu
[DllImport(DEEP_LEARNING_LIBRARY_DLL_GPU_VERSION, EntryPoint = "init")]
internal static extern int InitializeNetInGpu(string configurationFilename, string weightsFilename, int gpu);
[DllImport(DEEP_LEARNING_LIBRARY_DLL_GPU_VERSION, EntryPoint = "detect_image")]
internal static <