aardio调用halcon的HDevEngine来进行视觉处理

By admin at 2022-04-02 • 0人收藏 • 1267人看过

以前发过帖子介绍的方法是调用halcon的com组件, 这里再介绍一种更简单的办法, 得益于aardio对dotnet库的升级, 现在我们可以直接使用HDevEngine来嵌入界面里.

好处: 可以直接使用 halcon 里面的代码文件, 不需要进行任何转换 , 也不会有tuple数据格式问题 . 

这也就意味着你只需要再halcon里调试好代码,然后保存为halcon文件,然后在aardio里直接引用这个文件执行即可.

image.png

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio工程";right=959;bottom=591)
mainForm.add(
button={cls="button";text="加载";left=13;top=526;right=180;bottom=586;db=1;dl=1;z=2};
button2={cls="button";text="执行";left=203;top=526;right=370;bottom=586;db=1;dl=1;z=3};
custom={cls="custom";text="自定义控件";left=0;top=0;right=960;bottom=518;bgcolor=12639424;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import console
console.open()

import dotNet;
import System.Drawing;
var halcondll = dotNet.load("\res\halcondotnet.dll");
var hdevenginedll = dotNet.load("\res\hdevenginedotnet.dll");
var HalconDotNet = halcondll.import("HalconDotNet");
var HalconDevEngine = hdevenginedll.import("HalconDotNet");
//创建窗口,并绑定
var hSmartWindowControl1 = HalconDotNet.HSmartWindowControl();
dotNet.setParent(hSmartWindowControl1,mainForm.custom);
//开启双击自适应
hSmartWindowControl1.HDoubleClickToFitContent = true;
//开启拖动
hSmartWindowControl1.HMoveContent = true;
//获取halcon系统目录(这里演示的示例目录)
var halconExamples = HalconDotNet.HSystem.GetSystem("example_dir");
//指定外部函数路径,S的意思是转换example路径为string字符串
ProcedurePathStr = halconExamples.S + "\hdevengine\procedures";
//指定要执行的主程序文件路径
ProgramPathString = halconExamples.S + "\hdevengine\hdevelop\fin_detection.hdev";
//创建halcon引擎
var MyEngine = HalconDevEngine.HDevEngine();
//设置外部函数路径
MyEngine.SetProcedurePath(ProcedurePathStr);
//窗口属性
Window = hSmartWindowControl1.HalconWindow;
Window.SetDraw("margin");
Window.SetLineWidth(4);
//鼠标按下事件
hSmartWindowControl1.HMouseDown = function(){
	console.log("HMouseDown")
}
//加载
mainForm.button.oncommand = function(id,event){
	//绑定所有显示窗口到主窗口
	MyHDevOperatorImpl = HalconDevEngine.HDevOpFixedWindowImpl(Window);
    MyEngine.SetHDevOperators(MyHDevOperatorImpl);
    //加载程序
    var Program = HalconDevEngine.HDevProgram(ProgramPathString);
    ProgramCall = HalconDevEngine.HDevProgramCall(Program);
    mainForm.msgbox("ok")
}
//执行
mainForm.button2.oncommand = function(id,event){
    //执行程序
    ProgramCall.Execute();
    //获取指定属性值,D的意思是转换为double类型
    var FinArea = ProgramCall.GetCtrlVarTuple("FinArea").D;
    console.log(FinArea)
    //移动文字光标到位置
    Window.SetTposition(150, 20);
    //输出文字
    Window.WriteString("Fin Area: " ++ FinArea);
}

mainForm.show();
return win.loopMessage();

上面只是简单的测试, 运行程序会发现图片特别大, 只显示了一部分, 没关系, 双击图片就会缩放到合适大小了.

当然, 也是有代码可以直接设置的, 这里只是简单的测试, 并没有深入研究.

上面基于halcon13.0 的32位版本, 当然其他的版本的32位版本应该也可以 , 因为这个只是调用dll而已.

请注意必须是32位版本, 其他问题自行研究.


完整测试工程介绍: (本贴 3 楼)

https://www.chengxu.xyz/t/21315#Post22740


3 个回复 | 最后更新于 2022-04-25
2022-04-02   #1

虽然看不懂,但是确实太神奇了这个

2022-04-12   #2

PCB缺陷检测?

2022-04-25   #3

经过多次测试总结如下:

利用hdevengine来执行hdev文件的话, 需要下面这些dll

image.png



下面详细介绍下, 这些文件都在哪里找到的:

image.png


有人如果有halcon其他版本的可以测试下, 

我这台电脑安装的就是halcon13.0 64位版本的, 按照上面调用没问题.


至于怎么修改调用示例的话, 将下面代码里的执行示例修改路径即可.

1. 找到examples路径

image.png

2. 例如 我直接修改为

//指定要执行的主程序文件路径
ProgramPathString = halconExamples.S + "\hdevelop\Filters\Arithmetic\abs_image.hdev";



完整示例如下:

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio工程";right=959;bottom=591)
mainForm.add(
button={cls="button";text="加载";left=13;top=526;right=180;bottom=586;db=1;dl=1;z=2};
custom={cls="custom";text="自定义控件";left=0;top=0;right=960;bottom=518;bgcolor=12639424;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import console
console.open()
 
import dotNet;
import System.Drawing;
var halcondll = dotNet.load("\halcondotnet.dll");
var hdevenginedll = dotNet.load("\hdevenginedotnet.dll");
var HalconDotNet = halcondll.import("HalconDotNet");
var HalconDevEngine = hdevenginedll.import("HalconDotNet");
//创建窗口,并绑定
var hSmartWindowControl1 = HalconDotNet.HSmartWindowControl();
dotNet.setParent(hSmartWindowControl1,mainForm.custom);
//开启双击自适应
hSmartWindowControl1.HDoubleClickToFitContent = true;
//开启拖动
hSmartWindowControl1.HMoveContent = true;
//获取halcon系统目录(这里演示的示例目录)
var halconExamples = HalconDotNet.HSystem.GetSystem("example_dir");
//指定外部函数路径,S的意思是转换example路径为string字符串
ProcedurePathStr = halconExamples.S + "\hdevengine\procedures";
//指定要执行的主程序文件路径
ProgramPathString = halconExamples.S + "\hdevelop\Filters\Arithmetic\abs_image.hdev";
//创建halcon引擎
var MyEngine = HalconDevEngine.HDevEngine();
//设置外部函数路径
MyEngine.SetProcedurePath(ProcedurePathStr);
//窗口属性
Window = hSmartWindowControl1.HalconWindow;
Window.SetDraw("margin");
Window.SetLineWidth(4);
//鼠标按下事件
hSmartWindowControl1.HMouseDown = function(){
    console.log("HMouseDown")
}
//加载
mainForm.button.oncommand = function(id,event){
    //绑定所有显示窗口到主窗口
    MyHDevOperatorImpl = HalconDevEngine.HDevOpFixedWindowImpl(Window);
    MyEngine.SetHDevOperators(MyHDevOperatorImpl);
    //加载程序
    var Program = HalconDevEngine.HDevProgram(ProgramPathString);
    ProgramCall = HalconDevEngine.HDevProgramCall(Program);
    ProgramCall.Execute();
    mainForm.msgbox("ok")
}

 
mainForm.show();
return win.loopMessage();

image.png


工程下载:

链接:https://pan.baidu.com/s/1a95uPk_ONi1ghyQ3djOXDQ 

提取码:ttmn


image.png

image.png



登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...