榆林市城乡建设规划网站,电子商务网站建设前期准备,公众号怎么运营,建站视频教程网目录 3.1.1 环境配置#xff1a;CSharp算子SDK开发环境配置方法3.1.2 算子封装#xff1a;使用C封装算子SDK的方法3.1.3 异常中断#xff1a;算子SDK软件运行报错“托管调试助手”中断的解决方法3.1.4 深度学习#xff1a;GPU运行深度学习算子引发StackOverFlow异常的方法 … 目录 3.1.1 环境配置CSharp算子SDK开发环境配置方法3.1.2 算子封装使用C封装算子SDK的方法3.1.3 异常中断算子SDK软件运行报错“托管调试助手”中断的解决方法3.1.4 深度学习GPU运行深度学习算子引发StackOverFlow异常的方法 3.1.1 环境配置CSharp算子SDK开发环境配置方法
描述 环境MVDAlgrithm SDK3.4及以上 VS2013及以上 现象WinForm下的算子SDK开发环境配置方法 解答 WinForm下进行算子SDK开发的环境配置分为三步 第一步使用VS新建一个窗体类项目 第二步为该项目添加算子的dll引用将该路径C:\Program Files (x86)\MVDAlgorithmSDK\ReferencedAssemblies\Algorithms下的所有dll文件添加到项目中将该路径C:\Program Files (x86)\MVDAlgorithmSDK\ReferencedAssemblies Common下的引用除了第一个和第二个其他全部引用都加到项目中第一个和第二个不能添加否则引用会报错。 第三步此时我们会在工具箱内看到一些封装好的控件将这些控件拉到窗体上生成并启动即可。注意所有的控件都在C:\Program Files (x86)\MVDAlgorithmSDK \ReferencedAssemblies\Control文件夹下的只有一个控件在Common文件夹下这个控件叫MvRenderActiveX.Net.dll是一个图形处理的渲染控件大家需要单独将这个控件添加到工具箱中。 第一步
第二步
第三步
问题原因 缺少引用或者缺少控件
3.1.2 算子封装使用C封装算子SDK的方法
描述 环境MVDAlgrithm SDK 3.4及以上 VS2013及以上 问题有的用户在使用算子SDK开发时为了使各个算法模块更加的统一和抽象将不同的算子工具抽象出共同的接口例如 初始化-Initialize 加载配置-LoadConfiguration 训练模型-Trian 加载模型-LoadModel 执行算法-Run。 解答 我们的算子SDK已经是封装程度比较高的了算子工具的程序调用是完全面向对象的通过操作对象的方法和属性就能实现特定的算法流程可能有些客户需要对算子做进一步的抽象将算子工具的内部属性的赋值参数的保存与加载模型的加载与保存结果的获取都抽象为共同的几个接口函数如上描述的那样。使用C是很容易做到的使用虚函数将上面提到的提到的几个接口抽象然后在具体的类中实现接口即可。我们用代码来说明如下
C
class IVisionTool
{
public:IVisionTool() default;virtual ~IVisionTool() default;//使用参数文件初始化配置virtual int Initilize(std::string paramFilePath ) 0;//导入数据数据可以是训练好的模型文件、标定文件、参数配置文件等等virtual int ImportData(int fileType,const std::string inputPath) 0;//导出数据数据可以是训练的模型文件、标定文件、参数配置文件等等virtual int ExportData(int fileType,const std::string inputPath) 0;//训练模型virtual int Train(IMVdImage image,IMvdShape* roi,IMvdShape* mask) 0;//执行算法工具
virtual int Run(IMVdImage image,IMvdShape* roi,IMvdShape* mask[],int maskCount) 0;
//获取算法工具运行结果virtual int GetResult(AlgToolResult result) 0;
};接着我们通过具体的算法工具类实现一个特定的算法工具以直线查找工具为例我们可以设计一个LineFindTool继承IVisionTool, 代码如下
C
class FindLineTool:public IVisionTool
{
public:FindLineTool();~FindLineTool();int Initilize(const std::string paramFilePath ) override;int ImportData(const int fileType,const std::string inputPath) override;int ExportData(const int fileType,const std::string inputPath) override;int Train(const IMVdImage image,IMvdShape* roi,IMvdShape* mask) override;int Run(const IMVdImage image,IMvdShape* roi,IMvdShape* mask[],int maskCount) override;int GetResult(AlgToolResult result) override;
private:ILineFindTool* pLineFindTool;
};这里篇幅所限就不将FindLineTool的所有接口全部实现罗列在这里了这里将重要的构造函数析构函数Initialize和Run方法实现罗列出来代码如下
C
//构造函数
FindLineTool::FindLineTool()
{try{int nRet CreateLineFindToolInstance(pLineFindTool);if (nRet ! 0){throw std::exception(Create FindLineTool instance failed);}}catch (IMVDException ex){throw std::exception(ex);}}
//析构函数
FindLineTool::~FindLineTool()
{if (pLineFindTool ! nullptr){DestroyLineFindToolInstance(pLineFindTool);}
}
//初始化
int FindLineTool::Initilize(const std::string paramFilePath )
{//加载参数文件unsigned char* paramBuffer new unsigned char[1024 * 100];try{FILE* pFile;errno_t err fopen_s(pFile, inputPath.c_str(), rb);fseek(pFile, 0, SEEK_END);long bytes ftell(pFile);fseek(pFile, 0, SEEK_SET);fread(paramBuffer, 1, bytes, pFile);pLineFindTool-LoadConfiguration(paramBuffer, bytes);fclose(pFile);delete[] paramBuffer;paramBuffer nullptr;return 0;}catch (IMVDExceptionex){if (paramBuffer ! nullptr)delete[] paramBuffer;return ex.GetErrorCode();}
}
//运行一次
int Run(const IMVdImage image, IMvdShape* roi, IMvdShape* mask[], int maskCount)
{try{//1.设置输入图像pLineFindTool-SetInputImage(image);//2.设置ROIpLineFindTool-SetROI(roi);//3.设置屏蔽区//设置屏蔽区之前先移除vMaskShapes所有元素pLineFindTool-ClearMasks();for (int i 0; i maskCount; i){pLineFindTool-AddMask(mask[i]);}//4.运行算子pLineFindTool-Run();return 0;}catch (IMVDExceptionex){return ex.GetErrorCode();}
}需要注意的地方算子SDK大部分输入都是指针因此一定要记得释放指针占用的内存否则会内存泄漏上面的例子中指针的释放放在了调用层由调用者负责释放因此调用的时候记得在调用结束后释放作为函数参数传入的IMvdImage*,IMvdShape*等指针所占用的内存需要显式调用DestroyImageInstance,DestroyShapeInstance等API函数。 问题根因 不了解C 中虚函数的用法 不熟悉算子SDK的常用接口函数
3.1.3 异常中断算子SDK软件运行报错“托管调试助手”中断的解决方法
描述 环境MVDAlgrithm SDK3.4及以上 VS2013及以上 现象运行算子SDK 软件Demo时Visual Studio软件出现“托管调试助手”中断。 解答 运行算子SDK 软件Demo时Visual Studio软件出现“托管调试助手”中断如下图所示。
解决办法打开异常设置取消勾选【ContextSwitchDeadlock】和【DisconnectedContext】。
问题根因 不熟悉Visual Studio软件的异常设置。
3.1.4 深度学习GPU运行深度学习算子引发StackOverFlow异常的方法
描述 环境MVDAlgrithm SDK3.4及以上 VS2013及以上 现象深度学习算子运行报StackOverFlow异常如何解决
解答 第一步深度学习算子需要在×64平台下运行检查平台是否为×64win32则需改为x64 第二步第一步修改后仍然报StackOvreFlow异常则需调大堆栈提交大小
问题根因 不熟悉内存环境配置。