当前位置: 首页 > news >正文

ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net

系统搭建

  • 系统搭建

OpenCV的安装

cmake

sudo apt-get install cmake

其他环境以来

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev  
  • 不安装会报这个错误
OpenCV(4.6.0) /home/dell/下载/opencv-4.6.0/modules/highgui/src/window.cpp:1250: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'

error

  • E: 无法定位软件包 libjasper-dev

解决(换源重新安装)

  • http://mirrors.ustc.edu.cn/help/ubuntu.html
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
  • 由于没有公钥,无法验证下列签名: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6AC
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5 3B4FE6ACC0B21F32

下载源码

https://github.com/opencv/opencv/releases
增强模块 https://github.com/opencv/opencv_contrib/tags

安装

  • unzip opencv-4.6.0.zip
  • unzip opencv_contrib-4.6.0.zip
  • cd opencv-4.6.0/
  • sudo mkdir build
  • cd build
  • sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local
    sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH= **/opencv_contrib-4.6.0/modules/ ..
error
  • 如果报错 CMake Error: The source directory "/home/dell/下载/opencv-4.6.0/build" does not appear to contain CMakeLists.txt. 使用 sudo cmake /home/dell/下载/opencv-4.6.0/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local

在这里插入图片描述

  • sudo makesudo make -j4 j为变异是使用的核心数量,这一步非常满
  • sudo make install
-- Installing: /usr/local/share/opencv4/lbpcascades/lbpcascade_profileface.xml
-- Installing: /usr/local/share/opencv4/lbpcascades/lbpcascade_silverware.xml
-- Installing: /usr/local/bin/opencv_annotation
-- Set runtime path of "/usr/local/bin/opencv_annotation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_visualisation
-- Set runtime path of "/usr/local/bin/opencv_visualisation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_interactive-calibration
-- Set runtime path of "/usr/local/bin/opencv_interactive-calibration" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_model_diagnostics
-- Set runtime path of "/usr/local/bin/opencv_model_diagnostics" to "/usr/local/lib"

环境变量

  • sudo vim /etc/ld.so.conf.d/opencv.conf i /usr/local/lib + esc + :wq + enter
    在这里插入图片描述
  • sudo ldconfig
  • sudo vim /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
  • sudo updatedb
或者按照这种方式配置

测试

cmake_minimum_required(VERSION 3.15)
project(untitled)
set(CMAKE_CXX_STANDARD 14)MESSAGE(STATUS "Project: untitled")               #打印相关消息消息
find_package(OpenCV REQUIRED)# 通过find_package引入非官方的库(该方式只对支持cmake编译安装的库有效)
set(SOURCE_FILES main.cpp)
include_directories(${OpenCV_INCLUDE_DIRS})add_executable(untitled main.cpp)
target_link_libraries(untitled ${OpenCV_LIBS})
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main() {string path = "/home/dell/下载/a.png";Mat src = imread(path);namedWindow("img");imshow("img",src);waitKey(0);return 0;
}

在这里插入图片描述

  • 重启一下就ok了

在这里插入图片描述

  • 结果

在这里插入图片描述

onnx

效果风格转换

在这里插入图片描述

网络的论文和ONNX下载

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

  • 下载地址
    在这里插入图片描述

blobFromImages(blobFromImage) + imagesFromBlob

        处理图像到blob,[0, 255] ->[0, 1],大小,RGB->BGR和转换forward的blob到图像。

在这里插入图片描述

网络传播整体代码

cmake_minimum_required(VERSION 3.15)
project(untitled)
set(CMAKE_CXX_STANDARD 14)MESSAGE(STATUS "Project: untitled")             
find_package(OpenCV REQUIRED)
set(SOURCE_FILES main.cpp)
include_directories(${OpenCV_INCLUDE_DIRS})add_executable(untitled main.cpp)
target_link_libraries(untitled ${OpenCV_LIBS})
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <iostream>
#include <fstream>using namespace cv;
using namespace cv::dnn;
using namespace std;// 图像处理  标准化处理
void PreProcess(const Mat& image, Mat& image_blob)
{Mat input;image.copyTo(input);//数据处理 标准化std::vector<Mat> channels, channel_p;split(input, channels);Mat R, G, B;B = channels.at(0);G = channels.at(1);R = channels.at(2);B = (B / 255. - 0.406) / 0.225;G = (G / 255. - 0.456) / 0.224;R = (R / 255. - 0.485) / 0.229;channel_p.push_back(R);channel_p.push_back(G);channel_p.push_back(B);Mat outt;merge(channel_p, outt);image_blob = outt;
}String bin_model = "/home/dell/CLionProjects/untitled/mosaic-9.onnx";
int main(int argc, char** argv) {//数据处理Mat test = Mat::zeros(10,10, CV_64FC1 );Mat image1 = imread("/home/dell/下载/a.png");resize(image1, image1, Size(256, 256), INTER_AREA);image1.convertTo(image1, CV_32FC3);// convertTo()数据类型CV_32FC3PreProcess(image1, image1);vector<Mat> images;images.push_back(image1);images.push_back(image1);int w = 224;int h = 224;// 加载网络cv::dnn::Net net = cv::dnn::readNetFromONNX(bin_model);  // 加载训练好的识别模型  net = cv2.dnn.readNetFromONNX('**.onnx')net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);if (net.empty()) {printf("read onnx model data failure...\n");return -1;}Mat inputBlob = blobFromImages(images, 1.0, Size(w, h), Scalar(0, 0, 0), false, true);net.setInput(inputBlob);cv::Mat prob = net.forward();     // 推理出结果  cols,rows 矩阵的行数,列数【注意,在图像中行数对应的是高度,列数对应的是宽度】,当维数大于2时,均为-1;  std::vector<cv::Mat> predTmp;cv::dnn::imagesFromBlob(prob, predTmp);imshow("show Image", images[0]);cv::waitKey(0);imshow("Image mosaic", predTmp[0]);cv::waitKey(0);vector<double> times;double time = net.getPerfProfile(times);float ms = (time * 1000) / getTickFrequency();printf("current inference time : %.2f ms \n", ms);return 0;
}

CG

  • clion中debug不生效
    在这里插入图片描述

代码 onnx+ opdncv+vgg16

// https://blog.csdn.net/qq_44747572/article/details/121467657
// /home/dell/下载/opencv-4.6.0/samples/data/dnn/classification_classes_ILSVRC2012.txt#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <iostream>
#include <fstream>using namespace cv;
using namespace cv::dnn;
using namespace std;// 图像处理  标准化处理
void PreProcess(const Mat& image, Mat& image_blob)
{Mat input;image.copyTo(input);//数据处理 标准化std::vector<Mat> channels, channel_p;split(input, channels);Mat R, G, B;B = channels.at(0);G = channels.at(1);R = channels.at(2);B = (B / 255. - 0.406) / 0.225;G = (G / 255. - 0.456) / 0.224;R = (R / 255. - 0.485) / 0.229;channel_p.push_back(R);channel_p.push_back(G);channel_p.push_back(B);Mat outt;merge(channel_p, outt);image_blob = outt;
}std::vector<String> readClassNames(string labels_txt_file)
{std::vector<String> classNames;std::ifstream fp(labels_txt_file);if (!fp.is_open()){printf("could not open file...\n");exit(-1);}std::string name;while (!fp.eof()){std::getline(fp, name);if (name.length())classNames.push_back(name);}fp.close();return classNames;
}String bin_model = "/home/dell/下载/vgg16.onnx";
String labels_txt_file = "/home/dell/下载/opencv-4.6.0/samples/data/dnn/classification_classes_ILSVRC2012.txt";
vector<String> readClassNames();                  // string对象作为vector对象
int main(int argc, char** argv) {Mat image1 = imread("/home/dell/下载/a.png");//用于显示vector<Mat>Showimages;Showimages.push_back(image1);//处理image1resize(image1, image1, Size(256, 256), INTER_AREA);image1.convertTo(image1, CV_32FC3);PreProcess(image1, image1);         //标准化处理//将image1和image2合并到imagesvector<Mat> images;images.push_back(image1);images.push_back(image1);vector<String> labels = readClassNames(labels_txt_file);int w = 224;int h = 224;// 加载网络cv::dnn::Net net = cv::dnn::readNetFromONNX(bin_model);  // 加载训练好的识别模型if (net.empty()) {printf("read onnx model data failure...\n");return -1;}Mat inputBlob = blobFromImages(images, 1.0, Size(w, h), Scalar(0, 0, 0), false, true);// 执行图像分类net.setInput(inputBlob);cv::Mat prob = net.forward();     // 推理出结果cout << prob.cols<< endl;vector<double> times;double time = net.getPerfProfile(times);float ms = (time * 1000) / getTickFrequency();printf("current inference time : %.2f ms \n", ms);// 得到最可能分类输出for (int n = 0; n < prob.rows; n++) {Point classNumber;double classProb;Mat probMat = prob(Rect(0, n, 1000, 1)).clone();Mat result = probMat.reshape(1, 1);minMaxLoc(result, NULL, &classProb, NULL, &classNumber);int classidx = classNumber.x;printf("\n current image classification : %s, possible : %.2f\n", labels.at(classidx).c_str(), classProb);// 显示文本putText(Showimages[n], labels.at(classidx), Point(10, 20), FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 0, 255), 1, 1);imshow("Image Classification", Showimages[n]);waitKey(0);}return 0;
}

相关文章:

ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net

系统搭建 系统搭建 OpenCV的安装 cmake sudo apt-get install cmake其他环境以来 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 不安装会报这个错误 OpenCV(4.6.0) /hom…...

1.十大排序算法

1.什么是排序算法&#xff1f; 在梳理十大排序算法之前&#xff0c;虽然知道排序算法是将数字或字母按增序排列的算法&#xff0c;但该理解过于片面&#xff0c;那排序算法的权威定义是什么呢。 一个排序算法&#xff08;英语&#xff1a;Sorting algorithm&#xff09;是一种…...

算法导论—SAT、NP、NPC、NP-Hard问题

算法导论—SAT、NP、NP-Hard、NPC问题SAT 问题基本定义问题复杂性P、NP、NP-Hard、NP-Complete&#xff08;NPC&#xff09;证明NP-Hard关系图NP问题的概念约化的定义NPC问题NP-Hard问题SAT 问题基本定义 SAT 问题 (Boolean satisfiability problem, 布尔可满足性问题,SAT): 给…...

linux入门---基础指令(上)

这里写目录标题前言ls指令pwd指令cd指令touch指令mkdirrmdirrmman指令cp指令mv指令前言 我们平时使用电脑主要是通过鼠标键盘以及操作系统中自带的图形来对电脑执行相应的命令&#xff0c;比如说我想打开D盘中的cctalk这个文件&#xff1a; 我就可以先用鼠标左键单击这个文件…...

大数据Kylin(一):基础概念和Kylin简介

文章目录 基础概念和Kylin简介 一、​​​​​​​OLTP与OLAP 1、​​​​​​​​​​​​​​OLTP 2、​​​​​​​​​​​​​​OLAP 3、​​​​​​​​​​​​​​OLTP与OLAP的关系 二、​​​​​​​​​​​​​​数据分析模型 1、星型模型 2、雪花模型 …...

推进行业生态发展完善,中国信通院第八批RPA评测工作正式启动

随着人工智能、云计算、大数据等新兴数字技术的高速发展&#xff0c;数字劳动力应用实践步伐加快&#xff0c;以数字生产力、数字创造力为基础的数字经济占比逐年上升。近年来&#xff0c;机器人流程自动化&#xff08;Robotic Process Automation&#xff0c;RPA&#xff09;成…...

DOM编程-获取下拉列表选中项的value

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>获取下拉列表选中项的value</title> </head> <body> <script type"text/javascript"> …...

认证服务-----技术点及亮点

大技术Nacos做注册中心把新建的微服务注册到Nacos上去两个步骤 在配置文件中配置应用名称、nacos的发现注册ip地址&#xff0c;端口号在启动类上用EnableDiscoveryClient注解开启注册功能使用Redis存验证码信息加入依赖配置地址和端口号即可直接注入StringRedisTemplate模板类用…...

6个常见的 PHP 安全性攻击

了解常见的PHP应用程序安全威胁&#xff0c;可以确保你的PHP应用程序不受攻击。因此&#xff0c;本文将列出 6个常见的 PHP 安全性攻击&#xff0c;欢迎大家来阅读和学习。 1、SQL注入 SQL注入是一种恶意攻击&#xff0c;用户利用在表单字段输入SQL语句的方式来影响正常的SQL执…...

三大基础排序算法——冒泡排序、选择排序、插入排序

目录前言一、排序简介二、冒泡排序三、选择排序四、插入排序五、对比References前言 在此之前&#xff0c;我们已经介绍了十大排序算法中的&#xff1a;归并排序、快速排序、堆排序&#xff08;还不知道的小伙伴们可以参考我的 「数据结构与算法」 专栏&#xff09;&#xff0…...

负载均衡上传webshell+apache换行解析漏洞

目录一、负载均衡反向代理下的webshell上传1、nginx负载均衡2、负载均衡下webshell上传的四大难点难点一&#xff1a;需要在每一台节点的相同位置上传相同内容的webshell难点二&#xff1a;无法预测下一次请求是哪一台机器去执行难点三&#xff1a;当我们需要上传一些工具时&am…...

【ESP 保姆级教程】玩转emqx数据集成篇③ ——消息重发布

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-10 ❤️❤️ 本篇更新记录 2023-02-10 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

支持分布式部署的主流方式 - Session 持久化到 Redis

1.为什么要将 Session 存储在 Redis 中如果我们不将 Session 存储在 MySQL 或者 Redis 中, 那么做出来的项目就只能支持单机部署, 不支持分布式部署. 因为之前我们只是将 Session 存储在当前电脑的内存里面. 当张三去登录的时候, 将 Session 信息存储在 A 服务器, 这个时候负载…...

计算机网络|第二章 物理层|湖科大课程|从零开始的计网学习——物理层(计网入门就看这篇!)

图片来源于胡科大计算机网络课程&#xff0c;https://www.bilibili.com/video/BV1c4411d7jb?p20&vd_sourcedeb12d86dce7e419744a73045bc66364。文章非盈利商业用途&#xff0c;供博主与大家学习参考&#xff0c;如有侵权&#xff0c;请联系我删除&#xff01;2.1物理层的基…...

【微服务】RabbitMQSpringAMQP消息队列

&#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 一.初识MQ (1) 引入 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;可以立即得到响应&#xff0c;但是你却不能跟多个人同时通话。 异…...

jenkins +docker+python接口自动化之docker下安装jenkins(一)

jenkins dockerpython接口自动化之docker下安装jenkins&#xff08;一&#xff09; 目录&#xff1a;导读 1、下载jenkins 2、启动jenkins 3、访问jenkins 4.浏览器直接访问http://ip/:8080 5.然后粘贴到输入框中,之后新手入门中先安装默认的插件即可&#xff0c;完成后出…...

SpringBoot——Banner介绍

一、什么是BannerBanner即横幅标语&#xff0c;我们在启动SpringBoot项目时会将Banner信息打印至控制台。我们可以输出一些图形、SpringBoot版本信息等内容。默认情况下是通过实现类SpringBootBanner输出的Banner内容&#xff0c;默认的输出内容如下。二、自定义Banner如果不想…...

【STL】综述

STL&#xff0c;一文即可知 文章目录一、STL基本知识概述容器二、序列式容器详述数组容器array向量容器vector双端队列容器deque链式容器list正向链容器forward_list二、关联式容器详述红黑树RB-Tree哈希表参考博客&#x1f60a;点此到文末惊喜↩︎ 一、STL基本知识 概述 STL…...

C++中编译的静态库与动态库

1.什么是库库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载…...

JS对象到原始值的转换

JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示 对象到原始值转换的三种基本算法 在解释三种算法前需要了解toString valueOf这两个方法 toString 返回对象的字符串表示Array类的toString方法会将每个元素转换为字符串&#xff0c;再使用逗号作为…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...