【通用视觉框架】基于Qt+Halcon开发的仿Visionmaster的通用视觉框架软件,全套源码,开箱即用

【通用视觉框架】基于Qt+Halcon开发的仿Visionmaster的通用视觉框架软件,全套源码,开箱即用

1.引言

1.1 背景

​ 本项目软件开发意图为实现对Halcon、Opencv算子及其它视觉软件的便捷使用,由于Halcon和Opencv使用相比VisionPro较为麻烦,故此本软件仿照海康VisionMaster的流程图式操作,实现对Halcon、Opencv及其它视觉软件的二次开发。

1.2 编写目的

​ 本文档编写目的是系统性介绍XVision软件的编程架构和设计思路,为后续软件维护和开发打下基础。

1.3 术语定义

术语名称术语解释
算子(Func)一种视觉/数据处理方法,实现图像或者数据处理功能(可理解为编程中的函数)
流程(Flow)算子合集,实现算子的组合运算,重合实现复杂功能。流程分为主流程和子流程两种
项目(Project)流程合集,实现流程的策略化运行;同时包含全局数据和算子、全局脚本等运行相关数据
X对象(XObject)用于算子之间交互的通用数据,实现数据在不同算子之间进行传递
消息命令(TokenMsg)一种用来传递命令的机制,发送者可以发送消息让接收者执行对应操作(可理解为TCP/IP协议)

2.系统概述

2.1 软件概述

  • 本软件使用Qt框架进行开发,实现对视觉流程的自由搭配,市场上对标海康威视的VisionMaster;

  • 本软件使用插件化开发框架,可使用提供的二次开发库自行添加新功能算子和新模块(将生成的插件放置到对应目录下即可);

2.2 功能概述:

  • 视觉流程图式编程:实现对视觉/数据处理算子的自由编程,从而实现各类复杂的视觉需求

  • 项目读取保存:将编程的视觉项目进行保存或者读取

  • 图像显示:主界面中可以显示及监控视觉算子的图像处理情况

  • 日志消息显示:显示软件运行过程中出现的日志消息

  • 多语言:可进行多种语言切换

2.3 开发平台

  • **主开发语言:**Qt(C++)

  • **C++语言标椎:**C++17

  • **开发环境:**Window/Linux(未实现)

  • **编程平台:**Qt Creator

  • 编译器:

    编译器版本
    MSVCQt 6.4.0 MSVC2019 64bit
    MingwQt 6.4.0 MinGW 64-bit
  • 视觉工具:Halcon19.11 Progress X64

3.框架结构

3.1 工程整体框架

​ 软件主要有13个项目工程和4份工程配置文件构成(如图3.1.1和3.1.2所示),后续需要根据需求进行扩展添加新的工程。其中XVision为主工程模块,XvCore/XvData/XvDisplay为重要核心模块工程,XvFuncCollection目录为算子实现工程(所有算子实现都放置到该目录下),其他工程为辅助模块工程。

3.2系统分层

3.2.1 分层概述

​ 当前对工程架构进行了分层,总共有三个层级,分别为主工程层、核心工程层和辅助工程层。下述对这三个层级进行详解。

3.2.2 主工程层

​ 主工程层结构如上图3.2.2所示,XVision为软件的可执行程序工程,该工程下包含QBreakpad(软件崩溃记录库)和SingleApplication(单例APP库)这两个库,以及软件主要界面窗口类。在开发逻辑中该层通过界面与底层核心工程模块进行数据交互。

3.2.3 核心工程层

核心工程层结构如上图3.2.3所示,共有四个工程分别为XvCore核心库、XvData公共数据库、XvDisplay图像交互库及继承于XvCore库的XvFuncSystem系统算子库。XvCore库为软件的核心模块,所有的开发逻辑都围绕着该库进行;XvData库为软件的公共数据库,定义开发中遇到的数据类型和类等;XvDisplay库实现用户和图像的交互功能,例如图像及图中文本显示、Roi绘制等功能。XvFuncSystem库为继承于XvCore的算子插件库,封装了常用的图像和数据处理算子。

3.2.4 辅助工程层

辅助工程层结构如上图3.2.4所示,共有6个工程分别为AdsDocking悬浮窗口库、XFlowGraphics流程绘制库、XLanguage多语言库、XWidget统一UI库、XConcurrent线程管理库和XLog日志库。

​ 该层在开发逻辑中作为“第三方库”进行调用,每个工程都不存在其他工程依赖,全工程都可以引用。该层较少开发,只需要在第一次编译工程的时候,使用图中CMakeLists加载该层所有库进行编译(如图所示使用"ON"加载工程),编译完成后会将动态库的生成在XVision\CommonUsing\Lib(Release模式)或者XVision\CommonUsing\LibD(Debug模式)目录中供其他层级的工程调用。生成库后便可以使用"OFF"卸载工程,减少整体编译时间。

3.3 模块详解

3.3.1 XVision

3.3.2 XvCore

3.3.3 XvData

3.3.4 XvDisplay

3.3.5 XvTokenMsg

4.核心类详解

4.1 算子基类XvFunc

基本属性

属性名类型描述
funcIdQString算子唯一ID号(算子的UID,不可重复)
funcRoleQString算子功能标识符(在开发层面上必须唯一,不可重复)
funcTypeEXvFuncType算子类型(枚举)
funcNameQString算子名称

算子状态

状态名称类型描述
runStatusEXvFuncRunStatus算子运行结果(初始化/正在运行/成功/失败/错误)
runMsgQString算子运行信息
runElapseddouble算子运行耗时

算子数据

数据名称类型描述
lstFatherFuncQList<XvFunc*>父连接算子列表
lstSonFuncQList<XvFunc*>子连接算子列表
mapParamSubscribeQMap<QString,SubscribeInfo>参数订阅连接映射

接口详情

接口名称参数返回功能
getParamXvBaseParam*获取算子输入参数
getResultXvBaseResult*获取算子输出结果
updataParamconst QString &paramName,XObject* objectbool更新参数
paramSubscribeconst QString &paramName,XvFunc* target,const QString &resultNamebool参数进行订阅
paramUnSubscribeconst QString &paramNamebool参数取消订阅
runXvFuncEXvFuncRunStatus算子运行接口(外部)
runEXvFuncRunStatus算子运行接口(内部)
onShowFunc算子显示界面

4.2 流程类XvFlow

基本属性

属性名类型描述
flowIdQString流程唯一ID号(算子的UID,不可重复)
flowNameQString流程名称

流程状态

状态名称类型描述
runStatusEXvFlowRunStatus流程运行结果(初始化/正在运行/成功/失败/错误)
runCodeRetXv(int)运行代码
runMsgQString流程运行信息
runElapseddouble流程运行耗时
lastErrorMsgQString最后错误信息

流程数据

数据名称类型描述
mapFuncQMap<QString,XvFunc*>算子字典
runThreadXThread流程运行线程
flowConfigXvFlowConfig流程配置

接口详情

接口名称参数返回功能
runOnceRetXv(int)流程单次运行
runLoopRetXv(int)流程循环运行
stopRetXv(int)流程停止运行
waitunsigned long ms=0RetXv(int)等待流程运行结束
createXvFuncconst QString &roleXvFunc*通过标识符创建算子
removeXvFuncconst QString &idbool通过ID移除算子

4.3 项目类XvProject

基本属性

属性名类型描述
projectIdQString项目唯一ID号(算子的UID,不可重复)
projectNameQString项目名称

接口详情

接口名称参数返回功能
createXvFlowconst QString &name=“Flow”XvFlow*创建流程
removeXvFlowconst QString &idbool通过ID移除流程
removeXvFlowsconst QString &nameint通过名称移除多个流程

4.4 核心管理器XvCoreManager

接口详情

接口名称参数返回功能
initbool初始化
uninitbool反初始化
getXvProjectXvProject*获取全局唯一项目
loadXvProjectconst QString &pathbool加载项目
saveXvProjectconst QString &pathbool保存项目

5.界面布局

5.1 主界面展示

主界面共分为5个区域:

  • **菜单及工具栏:**标题处菜单栏及最上方的工具栏;
  • **工作Dock区:**算子列表和流程绘制区域;
  • **核心Dock区:**图像显示和数据交互区域;
  • **输出Dock区:**日志/线程监控/算子结果显示区域;
  • **状态栏:**底部软件运行状态信息显示区。

5.2 主界面各模块介绍

5.2.1 菜单及工具栏

  • 菜单栏

    • 文件:对项目文件进行操作
    • 设置:软件设置和项目配置
    • 系统:日志查看、相机管理等功能
    • 工具:标定工具和标定模板生成等功能
    • 帮助:语言选择、帮助文档等
  • 工具栏

    • 保存项目:将当前项目保存到文件中
    • 打开项目:加载文件中的项目
    • 单次运行项目:运行一次项目
    • 循环运行项目:重复运行项目
    • 停止项目运行:停止当前运行的项目
    • 项目配置:打开项目配置界面
    • 全局管理:对全局数据和全局算子进行管理
    • 全局脚本:打开脚本编辑和操作界面
    • 变量管理:对当前所有算子的输入参数和输出结果的变量进行监控

5.2.2 工作Dock区

​ 该区域包含算子列表和流程绘制区域,点击左侧算子类型合集按钮,可呼出算子进行拖动添加操作。在此界面中可添加流程和算子,实现拖拽式视觉编程。

5.2.3 核心Dock区

​ 该区域为图像和数据交互区,实现算子中图像的显示以及Roi等数据的交互。移动鼠标可以获取图像的RGB值和坐标。

5.2.4 输出Dock区

​ 该区域为软件信息的监控和输出区,共有三个子区域:

  • 日志显示:显示软件日志的信息;

  • 算子结果:显示算子的输出结果内容;

  • 线程监控:显示软件统一线程池中的线程状态;

5.2.5 状态栏

6.开发注意事项

  • Debug/Release切换:切换构建模式时,需要同步修改XVision\CommonUsing\CommonUsing.cmake中的"set(CurBuildType_IsDebug ON/OFF)",Debug模式为ON,Release为OFF,防止引用dll库错误;

  • 生成路径:所有主要工程都需要在CMake中添加"include (…/CommonCMake/CommonProjectOutputSet.cmake)",使之能生成在同一个目录中。注:当前XVision/XvCore/XvData/XvDisplay/XvUtils/XvTokenMsg已经添加无需重复添加;

  • 调用CommonUsing库:需要调用CommonUsing中的库时,需要在CMake中添加"include (…/CommonUsing/CommonUsing.cmake)",具体可参考XvCore工程中CMake的用法;

  • 维护XWidget:当在开发中需要根据需求修改XWidget库(XVision\CommonUsing\Project\XWidget),需要同步更新Gitlab上的XWidget库,保持两个工程的同步,并记录在XVision\CommonUsing\Project\XWidget\更新XWidget库注意事项.txt中;

  • Halcon等第三方库引用:当算子插件dll使用Halcon之类的第三方库,dll生成时是不会自动将Halcon生成到exe目录中的,继而引起exe无法加载插件的错误,故此需要在引用Halcon等第三方库的工程CMake添加以下代码,使之可以自动复制第三方库到exe目录中(可参考XvFuncSystem工程的CMake);

  • #此处需要将引用的halcon库复制到exe目录中,否则插件系统无法加载本dll
    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
            ${CMAKE_CURRENT_SOURCE_DIR}/${库路径}/第三方库.dll
            ${CMAKE_CURRENT_SOURCE_DIR}/${库路径}/第三方库.lib
            $<TARGET_FILE_DIR:${PROJECT_NAME}>
    )
    

运行界面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需要源码请私信或者自行下载点击即可下载

更多工业机器视觉框架软件下载请点击

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值