众所周知,Halcon的深度学习模型是可以使用C#的编程方式来调用的。
而VisionPro的Quickbuild环境,提供了一套C#的脚本环境,所以可以尝试使用使用里面的脚本编程环境,调用已经训练好的Halcon深度学习模型。
Halcon版本:23.11
VisionPro 版本 9.0
好的,下面开始配置,首先配置VisionPro需要的dll文件
调用Halcon的深度学习模型,需要用到如下dll文件
将这两个dll文件拷贝到VisionPro安装目录的bin文件夹下面
以下文件都是从Halcon安装的bin\x64-win64目录里面拷贝到bin文件目录下面,
libiomp5md.dll
halcon.dll
halcondl.dll
如下图所示:
里面的license文件需要在网上下载一下,具体方法,请参考网上的对应教程。
拷贝完成后,需要打开quickbuild,在quickbuild里面添加toolblock,然后选择C#脚本
在如图脚本选项中,选择添加/移除参考
将这两个dll添加到程序集里面。
然后编译,如果编译成功,就可以调用halcon对应的函数了。
注意:VisionPro对应图片格式是ICogImage,需要将ICogImage转换为Hobject,halcon的图片格式,转换方法为,首先将ICogImage转换为bmp格式的图片,再将bmp图片转换为HObject图片。
其转换函数如下:
public static HObject BitmapToHImage(Bitmap SrcImage)
{
HObject Hobj;
HOperatorSet.GenEmptyObj(out Hobj);
Point po = new Point(0, 0);
Size so = new Size(SrcImage.Width, SrcImage.Height);//template.Width, template.Height
Rectangle ro = new Rectangle(po, so);
Bitmap DstImage = new Bitmap(SrcImage.Width, SrcImage.Height, PixelFormat.Format8bppIndexed);
DstImage = SrcImage.Clone(ro, PixelFormat.Format8bppIndexed);
int width = DstImage.Width;
int height = DstImage.Height;
Rectangle rect = new Rectangle(0, 0, width, height);
System.Drawing.Imaging.BitmapData dstBmpData =
DstImage.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);//pImage.PixelFormat
int PixelSize = Bitmap.GetPixelFormatSize(dstBmpData.PixelFormat) / 8;
int stride = dstBmpData.Stride;
unsafe
{
int count = height * width;
byte[] data = new byte[count];
byte* bptr = (byte*) dstBmpData.Scan0;
fixed (byte* pData = data)
{
for (int i = 0; i < height; i++)
for (int j = 0; j < width; j++ )
{
data[i * width + j] = bptr[i * stride + j];
}
HOperatorSet.GenImage1(out Hobj, "byte", width, height, new IntPtr(pData));
}
}
DstImage.UnlockBits(dstBmpData);
return Hobj;
}
转换完成后,需要加载模型,我这里推荐在脚本初始化函数里面加载模型,避免运行过程中重复加载。
加载完成后,可以将结果输出到Toolblock的output终端上面,方便对结果进行分析。