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

香橙派华为昇腾CANN架构编译opencv4.9

香橙派华为升腾AI盒子

为啥要编译opencv4.9.0, 因为在4.9.0 中增加了华为昇腾CANN的外接开发库,下图为盒子外观,此次一接到这个盒子,立刻开始开箱操作,首先就是要编译opencv4.9,以前在香橙派3588 的盒子中,也是同样的操作,不过当时编译的是4.6
在这里插入图片描述

华为昇腾CANN架构的优点我也不多说,昇腾AI视频转码解决方案搭载昇腾310处理器,硬件自带编解码及AI处理能力,编解码场景性价比提升最高可达75%,为编解码场景提供高性价比算力,AI 前面一定是视频解码后进行识别,同时转编码发送出去,利用gstreamer,ffmpeg,都可以编解码,但是如何最大化利用硬件资源,需要我们探索。

升级

以下这两部可能需要一些时间,升级时会找到华为云

sudo apt update
sudo apt upgrade

过程中可能会安装一些开发包,比如下面的tbb,不过下面的命令还是执行一下,根据我观察,ffmpeg等库都会安装,需要注意的是一定要把opencv-gui的界面关闭,如果我们是一边安装升级操作,一边编译,达不到效果,因为升级改变了很多库和环境变量。

安装eigen

eigen是一个

sudo apt-get install libeigen3-dev

安装tbb开发包

TBB全称Threading Building Blocks,是Intel针对基于多核处理器进行软件开发而创建的一套C++模板库,核心作用是用来在任务处理中做多线程加速,所以一定要安装tbb,以使用多核并发能力。

sudo apt-get install libtbb-dev

写一个测试程序

#include <tbb/tbb.h>
#include <iostream>int main() {tbb::task_scheduler_init init; // 初始化TBBtbb::parallel_for(0, 10, [](int i)std::cout << "Hello from thread " << std::this_thread::get_id() << " with index " << i << std::endl;});return 0;
}

安装gstreamer 开发包

sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

安装cmake的界面版本

sudo apt-get install cmake-qt-gui

配置好以下界面

在这里插入图片描述

WITH-CANN

  重点来了,昇腾为后端的图像处理接口封装在 OpenCV 扩展包(opencv_contrib)的 cannops 模块中,包括图像矩阵的算术运算、通道拆分合并、图片裁剪、翻转、调整大小、转置等图像处理的 Python 和 C++ 接口,处理精度与 CPU 后端的计算结果相同。
在这里插入图片描述
在这里插入图片描述CANN 的勾打上以后,ascend 中的toolkit包会找到

开始编译

在这里插入图片描述

CANN c++ 示例

#include <iostream>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/cann.hpp>
#include <opencv2/cann_interface.hpp>int main(int argc, char* argv[])
{cv::CommandLineParser parser(argc, argv,"{@input|puppy.png|path to input image}""{@output|output.png|path to output image}""{help||show help}");parser.about("This is a sample for image processing with Ascend NPU. \n");if (argc != 3 || parser.has("help")){parser.printMessage();return 0;}std::string imagePath = parser.get<std::string>(0);std::string outputPath = parser.get<std::string>(1);// read input image and generate guass noise//! [input_noise]cv::Mat img = cv::imread(imagePath);// Generate gauss noise that will be added into the input imagecv::Mat gaussNoise(img.rows, img.cols, img.type());cv::RNG rng;rng.fill(gaussNoise, cv::RNG::NORMAL, 0, 25);//! [input_noise]// setup cann//! [setup]cv::cann::initAcl();cv::cann::setDevice(0);//! [setup]//! [image-process]cv::Mat output;// add gauss noise to the imagecv::cann::add(img, gaussNoise, output);// rotate the image with a certain mode (0, 1 and 2, correspond to rotation of 90, 180 and 270// degrees clockwise respectively)cv::cann::rotate(output, output, 0);// flip the image with a certain mode (0, positive and negative number, correspond to flipping// around the x-axis, y-axis and both axes respectively)cv::cann::flip(output, output, 0);//! [image-process]cv::imwrite(outputPath, output);//! [tear-down-cann]cv::cann::resetDevice();cv::cann::finalizeAcl();//! [tear-down-cann]return 0;
}

可以用下面的方式来编译
g++ pkg-config opencv --cflags test.cpp -o test pkg-config opencv --libs

其他总结

这块小盒子本身带了一些例子,不过我们最需要的是如何发挥他的关键,就是硬件资源调度,在教育、体育、安防、交通、医疗等领域中,AI检测应用发挥着至关重要的作用,比如在各种安全分析,各种体育训练时的实时人体关键点检测可以精确、实时地捕捉运动员的动作,在安防应用场景中,识别各种异常现象和异常行为或特定姿态,以达到场景安全防控的目的。

相关文章:

  • 大语言模型的工程技巧(三)——分布式计算
  • 【Python-OS】os.path.isfile()
  • 大工作量LUAD代谢重编程模型多组学(J Transl Med)
  • QT学习(20):QStyle和自定义样式
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • 再次学习History.scrollRestoration
  • 在Spring中自定义事件及发布与监听
  • 【LeetCode】438.找到字符串中所有字母异位词
  • 18 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 地表水储量变化Glads水文数据处理
  • Python 实现Word (DOC或DOCX)与TXT文本格式互转
  • 【相机标定系列】【相机模型】SLAM 中常用的相机模型畸变模型总结
  • SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测
  • Rust腐蚀怎么用服务器一键开服联机教程
  • Github 2024-05-21 开源项目日报 Top10
  • 【并发小知识】
  • 【391天】每日项目总结系列128(2018.03.03)
  • Python_OOP
  • React的组件模式
  • v-if和v-for连用出现的问题
  • 阿里研究院入选中国企业智库系统影响力榜
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 时间复杂度与空间复杂度分析
  • 实现菜单下拉伸展折叠效果demo
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用 Docker 部署 Spring Boot项目
  • 自动记录MySQL慢查询快照脚本
  • FaaS 的简单实践
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 透过事物看本质的能力怎么培养?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #1014 : Trie树
  • (11)MATLAB PCA+SVM 人脸识别
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pycharm)安装python库函数Matplotlib步骤
  • (九)One-Wire总线-DS18B20
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)shell调试方法
  • ***原理与防范
  • .Family_物联网
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net面试题4
  • .sh 的运行
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ 数据结构 - C++] AVL树原理及实现
  • [100天算法】-二叉树剪枝(day 48)
  • [12] 使用 CUDA 加速排序算法
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C#]winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法