Labview 调用Halcon的深度学习实现猫狗分类(第二章Labview重构Halcon代码推理)

1. 接第一章,一切准备完后根据Halcon的算子来实现Labview代码重构。如下图Halcon所用到的算子,显示类的算子跳过就行,其实Halcon以及Python的语法我感觉和Labview都差不多,都是函数后面带参数输入输出啥的,一个是拉线一个是名称,你仔细研究你会发现也就那么回事。c4b7de7a845a4066a60fe15356dd6e7a.png

2. 我们现在来看看都用到了那些Halcon算子,

我们将这些Halcon算子全部用Labview的 .net工具全部重构就行了。

读取创建的模型文件。
read_dl_model (RetrainedModelFileName, DLModelHandle)

设置批次大小。
set_dl_model_param (DLModelHandle, 'batch_size', 32)

读取设备硬件信息,主要判断是否有显卡,用第几张显卡进行推理。
query_available_dl_devices (['runtime', 'runtime'], ['gpu', 'cpu'], DLDeviceHandles)
get_dl_device_param (DLDeviceHandles, 'type', [cpu_gpu])
DLDevice := DLDeviceHandles[0]

初始化模型以进行推理。
set_dl_model_param (DLModelHandle, 'device', DLDevice)

设置CPU设备以进行推理。
set_dl_model_param (DLModelHandle, 'runtime', cpu_gpu[0])

获取用于预处理的参数。
read_dict (PreprocessParamFileName, [], [], DLPreprocessParam)

查询模型设置参数,包含图像尺寸,图像灰度。
get_dict_tuple (DLPreprocessParam, 'image_width', TupleW)
get_dict_tuple (DLPreprocessParam, 'image_height', TupleH)
get_dict_tuple (DLPreprocessParam, 'image_range_max', image_max)
get_dict_tuple (DLPreprocessParam, 'image_range_min', image_min)

读取批次的图像。
read_image (ImageBatch, Batch)

将图片缩放到网络model需求的大小

zoom_image_size (ImageBatch, ImageBatch, TupleW, TupleH, 'constant')   
     
将图像转换为32位图像
convert_image_type (ImageBatch, ImageBatch, 'real')
    
灰度值增强    
scale_image (ImageBatch, ImageBatch, image_max, image_min) 
    
创建一个新的空字典
create_dict (DLSampleBatch)
    
向字典中添加图像,将ImageBatch添加到字典DLSampleBatch中去
set_dict_object (ImageBatch, DLSampleBatch, 'image')   
   
如果图片不是三通道图,就需要将图像合成三通道图

count_channels (ImageBatch, Channel)

 if (Channel != 3)
        compose3(ImageBatch, ImageBatch, ImageBatch, ImageBatch)
endif
    
加载模型和图像开始推理
apply_dl_model (DLModelHandle, DLSampleBatch, [], DLResultBatch)

3. 根据上面结果我们可以看到基本用到了Halcon的17个算子,我们打开Labview,在程序页面点击右键选择.net链接工具,选择Constructor Node工具先加载Halcon的DLL。

DLL存放在安装目录如下路径C:\Program Files\MVTec\HALCON-23.11-Progress\bin\dotnet35

可以将这个DLL以及注册文件一起拷贝到你需要的目标,我这里放在程序目录里面。

55ea070e75ce427396c51086887a8674.png

584a3c96accf4a36a76ff3b9025050e9.png

4. 如下图点击Browse加载halcondotnet.dll。

a2ff624567104a01bfe8b0efa695b2ba.png

5. 例如我们要加载下面这个算子,

*读取创建的模型文件。
read_dl_model (RetrainedModelFileName, DLModelHandle)

先打开Halcon程序,找到这个算子点右键选择帮助,

d133a380dbf5497ab03eb19403cead53.png

6. 然后在帮助页面你会看到这个算子的用法,因为我们是用.net接口,所以这里选择.net介绍。

b58fd6734b9747778a3c64742dd71c46.png

7. 我们会发现这个read_dl_model在 .net格式里面是这样书写的,ReadDlModel,另外这个函数在HOperatorSet目录里面,所以我们接口书写如下。

8c3b8996b22e4b4a8112213358f34886.png

7240b5fcdd2047f9b976b6abd6d0a4df.png

8. 创建read_dl_model函数,先链接后点击Browse...选择搜索函数,输入你要创建的函数,这样我们就能创建Halcon的所有函数了。

80910a2722e94361a998bd8bbd5847df.pnga450cb6251fd4572aa673159e70953b5.png

d5a59fc548144cc2bf4b12150d60fe91.png

9. 根据上面办法加载所以需要用到的Halcon算子,然后根据数据流向顺序链接好输入输出端口就可以了。

a1f68a9a54834d4d830180704146faac.png

10. 加载模型及配置参数部分,这里大概拉了一下,配置还不完全先运行起来测试一下。

1b5243f6d88a46729d388f807e235567.png

11. 图像处理部分。

0e520d4950e24902b610436bcba9ae68.png

17ac94cdc8714ddaa699da9369fca772.png

12. 推理测试部分。

9865176478f941cb9cb54d9ac848b333.png

13. 搭建简易框架开始测试。

243c619768104c89aafe30de85152216.png

14. 测试效果如下,推理效果良好,因为没有图片转换方面的操作,所以基本和Halcon推理速度完全一样,客户端无需安装Halcon,直接运行DLL就行了!

02f54cce470f47a2a3904dcb4b53ed86.png

希望各位一起完善,有不对的地方也请大家一起指正,希望Labview用户强大起来,也希望各位Labview工程师能够找到更好的工作,不要一听到深度学习就不敢接,其实Labview框架搭建好了并不比C#差。

需要讨论的评论区发表意见!!!

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用Halcon的HDevEngine接口在LabVIEW调用Halcon深度学习功能。具体步骤如下: 1. 在LabVIEW中创建一个VI。 2. 在VI中添加一个ActiveX控件,选择Halcon的HDevEngine控件。 3. 在VI中使用LabVIEW代码调用Halcon的HDevEngine接口,可以使用HDevEngine的RunScript函数来执行Halcon深度学习代码。 4. 在Halcon深度学习代码中,可以使用Halcon的DeepLearningTrain和DeepLearningClassify函数来训练和分类图像。 需要注意的是,调用Halcon深度学习功能需要先安装Halcon并且拥有相应的许可证。此外,深度学习的算法也需要相应的硬件支持。 ### 回答2: 在LabVIEW调用Halcon深度学习的方法是通过使用Halcon的外部编程接口(API)来实现的。以下是基本的步骤: 1. 首先,将Halcon的库文件(DLL文件)添加到LabVIEW项目中。在LabVIEW中,点击“工具”->“向导”->“DLL导入”,然后选择HalconDLL文件。 2. 在LabVIEW中创建一个调用外部库函数的VI(虚拟仪器)。在VI中,使用“Call Library Function”节点来调用Halcon提供的特定函数。 3. 调用Halcon深度学习功能的函数可以根据具体需求选择。例如,可以调用Halcon提供的函数来加载训练好的深度学习网络、进行图像预处理、执行图像分类、目标检测等操作。 4. 在调用Halcon的函数之前,需要根据函数的参数和返回值类型设置“Call Library Function”节点的输入和输出参数。 5. 在LabVIEW中,可以使用其他节点来处理和显示Halcon返回的结果。例如,可以使用显示图像的节点来显示检测到的目标,或者使用文本框节点来显示分类结果。 需要注意的是,LabVIEW是一种图形化编程语言,因此可以通过将节点连接在一起来构建功能流程,而不是使用传统的代码编写方法。 此外,需要了解Halcon的使用方法和深度学习相关的知识,以便正确地使用Halcon的函数和算法。 总之,LabVIEW调用Halcon深度学习的写法涉及到添加Halcon库文件、创建调用外部库函数的VI、调用Halcon的特定函数并处理结果。这需要对LabVIEWHalcon的使用有一定的了解。 ### 回答3: 在LabVIEW调用Halcon深度学习库可以通过以下步骤进行: 1. 首先,确保已经安装了HalconLabVIEW。 2. 在LabVIEW中创建一个新的VI(Virtual Instrument)。 3. 在Block Diagram(方框图)中右键单击,选择"Import ActiveX Control"(导入ActiveX控件)。 4. 在弹出的对话框中,选择Halcon的ActiveX 控件,点击OK。 5. 这将在Block Diagram中生成一个ActiveX 控件。 6. 双击这个ActiveX控件,会打开Halcon的图像处理界面。在该界面中,可以调用Halcon深度学习的相关方法。 7. 通过使用Halcon深度学习方法,可以进行图像分类、目标检测等任务。 8. 将Halcon的图像处理结果传递给LabVIEW的其他模块或控件,以便进行后续的数据处理和显示。 需要注意的是,LabVIEWHalcon之间的数据传递可以通过LabVIEW提供的数据类型进行。例如,可以使用数组或图像数据类型作为输入和输出参数。 通过上述步骤,可以在LabVIEW调用Halcon深度学习库进行图像处理任务。这样可以充分利用Halcon强大的深度学习功能,并通过LabVIEW的可视化编程环境进行更加灵活和便捷的图像处理流程设计和数据分析。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值