qt配合halcon深度学习网络环境配置

news2024/12/27 2:18:09

1.开发环境qt6,编译器MSCV2019,网络是halcon的对象检测,halcon用20.
2.建立qt项目
3.到halcon安装目录下复制include,lib这两个文件夹到qt项目中进行引用
请添加图片描述
请添加图片描述
4.引用到halcon静态库后,到halcon运行目录下找到静态库对应dll文件,还有引用深度学习的halcondl.dll跟halcondlxl.dll,hcanvas.dll
请添加图片描述
5.找齐这些文件后,把文件复制到qt软件运行目录下
请添加图片描述
6.到halcon运行目录下复制thirdparty文件夹到qt运行目录,不然软件运行时,halcon查找设备只能找到cpu,找不到gpu。
7.qt中加载halcon模型代码


void DeelLearning::ReadModel(QString path_model_,
                             QString path_proparameter_)
{
    try
    {
        _path_model="";
        _path_model_proparameter="";

        if(_exit_model==true)
        {
            HalconCpp::ClearDlModel(_dl_model_handle);
            HalconCpp::ClearHandle(_dl_device_handles);
        }

        _exit_model=false;
        /***读取模型预处理参数***/
        HalconCpp::HTuple hpath_proparameter_;
        hpath_proparameter_ = path_proparameter_.toStdString().c_str();

        HalconCpp::ReadDict(hpath_proparameter_,
                            HalconCpp::HTuple(),
                            HalconCpp::HTuple(),
                            & this->_dl_model_proparameter);

        /***读取模型***/
        HalconCpp::HTuple hpath_model_=path_model_.toStdString().c_str();

        HalconCpp::ReadDlModel(hpath_model_,&this->_dl_model_handle);

        /***读取驱动***/
        HalconCpp::HTuple gen_param_name_devices_,
            gen_param_value_devices_;
        gen_param_name_devices_[0]="runtime";
        gen_param_name_devices_[1]="runtime";
        gen_param_value_devices_[0]="gpu";
        gen_param_value_devices_[1]="cpu";
        HalconCpp::QueryAvailableDlDevices(gen_param_name_devices_,
                                           gen_param_value_devices_,
                                           &_dl_device_handles);

        int dl_device_handles_count_=_dl_device_handles.Length();

        qDebug() << "dl_device_handles_count"+QString::number(dl_device_handles_count_);

        HalconCpp::HTuple dl_device_type_="";
        HalconCpp::GetDlDeviceParam(_dl_device_handles[0],
                                    "type",
                                    &dl_device_type_);
        /***提示下当前变量***/
        qDebug() << dl_device_type_.ToString().Text();

        /***设置模型驱动***/
        HalconCpp::SetDlModelParam(_dl_model_handle,
                                    "device",
                                    _dl_device_handles[0]);
        /***设置模型批量***/
        HalconCpp::SetDlModelParam(this->_dl_model_handle,
                                    "batch_size",
                                    1);
        _exit_model=true;

        _path_model=path_model_;
        _path_model_proparameter=path_proparameter_;

    }
    catch (HalconCpp::HException ex)
    {
        qDebug()<<ex.ErrorMessage().Text();
    }
}

8.qt中推理代码


void DeelLearning::AnalyzeImage()
{
    if(_exit_image==true&&_exit_model==true)
    {
        HalconCpp::HTuple pro_image_width_,
            pro_image_height_,
            pro_image_num_channels_,
            pro_image_range_min_,
            pro_image_range_max_,
            pro_image_normalization_type_,
            pro_image_domain_handling_;

        /***获取预处理参数***/
        HalconCpp::GetDictTuple(this->_dl_model_proparameter,
                                "image_width",
                                &pro_image_width_);
        qDebug() << pro_image_width_.ToString().Text();

        HalconCpp::GetDictTuple(this->_dl_model_proparameter,
                                "image_height",
                                &pro_image_height_);
        qDebug() << pro_image_height_.ToString().Text();

        HalconCpp::GetDictTuple(this->_dl_model_proparameter,
                                "image_num_channels",
                                &pro_image_num_channels_);
        qDebug() << pro_image_num_channels_.ToString().Text();

        HalconCpp::GetDictTuple(this->_dl_model_proparameter,
                                "image_range_min",
                                &pro_image_range_min_);
        qDebug() << pro_image_range_min_.ToString().Text();

        HalconCpp::GetDictTuple(this->_dl_model_proparameter,
                                "image_range_max",
                                &pro_image_range_max_);
        qDebug() << pro_image_range_max_.ToString().Text();

        /*****预处理图片****/
        HalconCpp::HTuple dl_sample_batch_;
        HalconCpp::CreateDict(&dl_sample_batch_);

        HalconCpp::ConvertImageType(this->_image,
                                    &this->_image,
                                    "real");

        HalconCpp::ZoomImageSize(this->_image,
                                 &this->_image,
                                 pro_image_width_,
                                 pro_image_height_,
                                 "constant");

        HalconCpp::HTuple rescale_range=(pro_image_range_max_
                                           -pro_image_range_min_)/255;

        HalconCpp::ScaleImage(this->_image,
                              &this->_image,
                              rescale_range,
                              pro_image_range_min_);

        HalconCpp::SetDictObject(this->_image,
                                 dl_sample_batch_,
                                 "image");

        HalconCpp::HTuple dl_result_batch_;
        HalconCpp::ApplyDlModel(_dl_model_handle,
                                dl_sample_batch_,
                                HalconCpp::HTuple(),
                                &dl_result_batch_);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_row1",
                                &_bbox_row1);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_col1",
                                &_bbox_col1);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_row2",
                                &_bbox_row2);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_col2",
                                &_bbox_col2);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_class_id",
                                &_bbox_class_id);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_class_name",
                                &_bbox_class_name);

        HalconCpp::GetDictTuple(dl_result_batch_,
                                "bbox_confidence",
                                &_bbox_class_confidence);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器百科:网页存储篇-如何在Chrome打开localStorage窗格(五)

1.引言 在前面的章节中&#xff0c;我们详细介绍了 localStorage 的基本概念、特性及其常用方法&#xff0c;帮助开发者在网页应用中实现数据的持久化存储。为了更好地管理和调试这些存储的数据&#xff0c;了解如何打开和使用浏览器的 localStorage 窗格是非常重要的。本篇文…

js实现lua解释器,类似halcon代码编辑器一行一行解释执行

解释器 只能一行一行执行&#xff0c;不能有一行代码跨越多行&#xff0c;不支持lua的表&#xff0c;只支持for i的循环&#xff0c;支持自定义函数&#xff0c;并且可以跳到函数里面一行一行执行&#xff0c;这里的函数并不是lua的函数&#xff0c;而是由js状态控制执行函数里…

DBETX-1X/250G24-8NZ4M比例溢流阀配套HE-SP1比例放大器

0811402019|DBETX-1X/250G24-8NZ4M比例溢流阀配套HE-SP1比例放大器主要是一种电液控制技术&#xff0c;用于调节液压系统中的压力&#xff0c;通过BEUEC比例放大器电气输入信号控制阀口的开度&#xff0c;实现对系统压力的精准控制。 比例溢流阀技术的关键在于其能够将电信号转…

振动分析-26-频域分析之深入理解功率谱和功率谱密度的计算过程

1 什么是PSD(功率谱密度) 功率谱密度(Power Spectral Density),以及其与Autopower(自功率谱)的区别。 1.1 PSD的定义 PSD——Power Spectral Density是表征信号的功率能量与频率的关系的物理量。 PSD经常用来研究随机振动信号。 PSD通常根据频率分辨率做归一化。 对于振…

Qt人脸识别与分析系统

项目源码地址https://github.com/fufufu11/QT5-FacialDetection 项目概述 本项目是一款基于Qt5框架构建的人脸检测应用程序&#xff0c;支持多摄像头选择和用户友好的图形界面。系统集成了百度的人脸检测API&#xff0c;能够通过HTTPS协议POST方法安全地发送请求&#xff0c;并…

一个基于共享内存的内存数据库:2 设计

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

opencv轮廓近似,模板匹配

在图像处理领域&#xff0c;轮廓近似和模板匹配是两种非常关键的技术&#xff0c;它们广泛应用于计算机视觉、图像分析和图像识别等多个方面。本文将详细介绍如何使用OpenCV库进行轮廓近似和模板匹配&#xff0c;并给出具体的代码示例。 一、轮廓近似&#xff08;Contour Appr…

使用stripe进行在线支付、退款、订阅、取消订阅功能(uniapp+h5)

stripe官网:Stripe 登录 | 登录 Stripe 管理平台 然后在首页当中打开测试模式,使用测试的公钥跟私钥进行开发 测试卡号 4242 4242 4242 4242 1234 567 在线支付 stripe的在线支付有两种,第一种就是无代码,第二中就是使用api进行自定义,一般来说推荐第二种进行开发 无…

谁还只会用OBS?多场景录制试试这四款!

很多人在录屏的时候&#xff0c;尤其是打游戏的朋友&#xff0c;第一时间想到的都是OBS&#xff0c;其实除了这款工具&#xff0c;还有很多好用的第三方录屏工具&#xff0c;一样可以帮助我们录制出不卡顿的高清视频。今天&#xff0c;我们就来对比一下市面上四款热门的录屏软件…

echarts环形图

let dataValue[{value: 30,name: 桥梁,percent: 0.25,color: rgba(248,95,94,1),radius: [75%, 80%],center: [22%, 50%],},{value: 15,name: 隧道,percent: 0.25,color: rgba(243,185,71,1),radius: [65%, 70%],center: [22%, 50%],},{value: 18,name: 路基,percent: 0.25,col…

类似antdesign悬浮按钮上浮小动画【已验证,正常运行】

以下是基于vue2的完整代码&#xff0c;习惯用vue写了&#xff0c;如果是其他框架复制div和css就行 部分代码来自我搭建的GPT4o/Claude <template><div class"progress-container"><div class"circlenav-container"><div class"…

深度学习——引言

一、机器学习的关键因素 1.1 数据 每个数据集由一 个个样本组成&#xff0c;大多情况下&#xff0c;数据遵循独立同分布。通常每个样本由一组特征属性组成。 好的数据集 { 数据样本多 正确的数据 ( g a r b a g e i n , g a r b a g e o u t ) 好的数据集 \begin{cases} 数据…

通俗易懂理解Hive四种排序

前言 Hive的四种排序包括Sort By、Order By、Distribute By和Cluster By。有关这四种排序的区别&#xff0c;在大数据面试中可能会经常被问到&#xff0c;在我们很多人的实际应用中可能最常用的就是全局排序order by&#xff0c;因此对于其他几个排序理解并不准确&#xff0c;…

ardupilot开发 --- 炸酱面 篇

我的头可不是面头捏的 奥维互动地图ovital航点文件转Mission planner航点文件 奥维互动地图ovital航点文件转Mission planner航点文件 gcj02 转 wgs84 奥维互动地图&#xff1a;https://www.ovital.com 航线1.ovjsn 转换工具&#xff1a;https://github.com/huangyangl/geo_c…

Linux之grep命令

在文本文件中过滤&#xff0c;包含指定字符串的行 – grep [选项] 字符串 文本文件...• 常用命令选项 – -v&#xff0c;取反匹配 – -i&#xff0c;忽略大小写 ]# grep root /etc/passwd #包含root的行 ]# grep -v root /etc/passwd #不包含root ]# grep ROOT…

操作系统的功能及应用

操作系统介绍 操作系统&#xff08;Operating System, OS&#xff09;是计算机系统中不可或缺的核心软件&#xff0c;它负责管理和控制计算机硬件与软件资源&#xff0c;提供用户与计算机之间的交互界面。本文将详细探讨操作系统的功能、分类及其在现代社会中的应用。 操作系统…

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先&#xff0c;需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装&#xff1a; helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…

2024 年的 Web3 游戏:演变、趋势和市场动态

Web3 游戏行业在经历了多年的快速发展和变革之后&#xff0c;正在2024年迎来全新的阶段。这个行业从最初的边玩边赚&#xff08;Play-to-Earn, P2E&#xff09;模式出发&#xff0c;如今正在向更为平衡的“边玩边赚”模式转型。这种转型不仅解决了早期 P2E 模式下存在的可持续性…

自动驾驶真正踏出迈向“用户”的第一步:IROS24新SOTA提出个性化的实例迁移模仿学习

导读&#xff1a; 本文针对自动驾驶规划任务&#xff0c;提出了一种基于实例的迁移模仿学习方法&#xff0c;通过预先训练的微调框架从专家域迁移专业知识&#xff0c;以解决用户域数据稀缺问题。实验结果显示&#xff0c;该方法能有效捕捉用户驾驶风格并实现具有竞争力的规划性…

select、poll、epoll的原理

目录 1.IO多路复用 2.select原理 3.poll原理 4.epoll原理 5.select、poll、epoll总结 6.epoll原理详解 6.1内核收包的过程 6.2进程调度时的阻塞 6.3再来看一下内核收网络数据的过程 6.4select的原理 6.5epoll的设计原理 6.6补充 6.7总结 1.IO多路复用 IO多路复用…