1. 接第一章,一切准备完后根据Halcon的算子来实现Labview代码重构。如下图Halcon所用到的算子,显示类的算子跳过就行,其实Halcon以及Python的语法我感觉和Labview都差不多,都是函数后面带参数输入输出啥的,一个是拉线一个是名称,你仔细研究你会发现也就那么回事。
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以及注册文件一起拷贝到你需要的目标,我这里放在程序目录里面。
4. 如下图点击Browse加载halcondotnet.dll。
5. 例如我们要加载下面这个算子,
*读取创建的模型文件。
read_dl_model (RetrainedModelFileName, DLModelHandle)
先打开Halcon程序,找到这个算子点右键选择帮助,
6. 然后在帮助页面你会看到这个算子的用法,因为我们是用.net接口,所以这里选择.net介绍。
7. 我们会发现这个read_dl_model在 .net格式里面是这样书写的,ReadDlModel,另外这个函数在HOperatorSet目录里面,所以我们接口书写如下。
8. 创建read_dl_model函数,先链接后点击Browse...选择搜索函数,输入你要创建的函数,这样我们就能创建Halcon的所有函数了。
9. 根据上面办法加载所以需要用到的Halcon算子,然后根据数据流向顺序链接好输入输出端口就可以了。
10. 加载模型及配置参数部分,这里大概拉了一下,配置还不完全先运行起来测试一下。
11. 图像处理部分。
12. 推理测试部分。
13. 搭建简易框架开始测试。
14. 测试效果如下,推理效果良好,因为没有图片转换方面的操作,所以基本和Halcon推理速度完全一样,客户端无需安装Halcon,直接运行DLL就行了!
希望各位一起完善,有不对的地方也请大家一起指正,希望Labview用户强大起来,也希望各位Labview工程师能够找到更好的工作,不要一听到深度学习就不敢接,其实Labview框架搭建好了并不比C#差。
需要讨论的评论区发表意见!!!