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

保姆级教程:在Ubuntu 22.04上手动编译FFmpeg+OpenCV,搞定昇腾CANN C++推理环境

昇腾NPU开发实战从零构建FFmpegOpenCV的C推理环境在昇腾NPU上进行C开发时环境配置往往是第一个拦路虎。不同于常见的x86架构昇腾平台的异构计算特性要求开发者对底层依赖有更深入的理解。本文将手把手带你完成FFmpeg和OpenCV的源码编译并确保它们与昇腾CANN工具链无缝集成。1. 环境准备构建昇腾开发基石在开始编译之前我们需要确保基础环境正确配置。昇腾NPU开发依赖于特定的驱动和工具链这是后续所有工作的前提。首先从昇腾官网下载最新版的CANN工具包。建议选择与你的操作系统版本匹配的发布包。安装过程通常只需要执行简单的脚本sudo ./Ascend-cann-toolkit_{version}_linux-{arch}.run --install安装完成后需要设置环境变量。将以下内容添加到你的~/.bashrc文件中source /usr/local/Ascend/ascend-toolkit/set_env.sh验证安装是否成功npu-smi info这个命令应该会显示NPU设备的基本信息。如果看到类似command not found的错误说明驱动没有正确安装。提示在Ubuntu 22.04上你可能需要先安装一些基础依赖sudo apt update sudo apt install -y gcc g make cmake git2. FFmpeg编译视频处理的瑞士军刀FFmpeg是多媒体处理的核心组件在昇腾开发中主要用于视频解码。我们将从源码编译确保获得最佳性能和兼容性。2.1 获取源码与依赖首先下载FFmpeg源码建议使用稳定版wget https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz tar xf ffmpeg-6.0.tar.xz cd ffmpeg-6.0安装编译依赖sudo apt install -y nasm yasm libx264-dev libx265-dev libvpx-dev libfdk-aac-dev2.2 配置与编译这是最关键的一步配置参数直接影响最终功能./configure \ --prefix/usr/local \ --enable-shared \ --enable-static \ --enable-gpl \ --enable-libx264 \ --enable-libx265 \ --enable-libvpx \ --enable-libfdk-aac \ --enable-nonfree \ --extra-cflags-I/usr/local/include \ --extra-ldflags-L/usr/local/lib配置完成后开始编译make -j$(nproc) sudo make install2.3 验证安装编译完成后验证FFmpeg是否正常工作ffmpeg -version你应该能看到类似这样的输出包含你启用的所有编解码器ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04) configuration: --prefix/usr/local --enable-shared --enable-static ... libavutil 58. 2.100 / 58. 2.100 libavcodec 60. 3.100 / 60. 3.100 libavformat 60. 3.100 / 60. 3.100 libavdevice 60. 1.100 / 60. 1.100 libavfilter 9. 3.100 / 9. 3.100 libswscale 7. 1.100 / 7. 1.100 libswresample 4. 10.100 / 4. 10.100 libpostproc 57. 1.100 / 57. 1.1003. OpenCV编译计算机视觉的核心库OpenCV是计算机视觉开发的基础我们需要编译支持FFmpeg的版本以便处理视频流。3.1 准备源码下载OpenCV和opencv_contrib源码版本需匹配wget -O opencv.zip https://github.com/opencv/opencv/archive/4.8.0.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.8.0.zip unzip opencv.zip unzip opencv_contrib.zip3.2 关键配置参数创建构建目录并进入mkdir -p build cd build执行cmake配置特别注意FFmpeg相关参数cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib-4.8.0/modules \ -D WITH_FFMPEGON \ -D FFMPEG_INCLUDE_DIR/usr/local/include \ -D FFMPEG_LIB_DIR/usr/local/lib \ -D BUILD_EXAMPLESOFF \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ -D BUILD_opencv_python3OFF \ -D WITH_CUDAOFF \ -D WITH_GTKON \ -D WITH_QTOFF \ ..注意WITH_FFMPEGON是确保OpenCV能使用我们编译的FFmpeg的关键参数。如果配置时提示找不到FFmpeg请检查FFMPEG_INCLUDE_DIR和FFMPEG_LIB_DIR路径是否正确。3.3 编译与安装开始编译这可能需要较长时间make -j$(nproc) sudo make install配置动态链接库路径sudo ldconfig验证安装pkg-config --modversion opencv44. 集成测试YOLOv10目标检测实战环境搭建完成后我们来测试一个完整的YOLOv10目标检测流程验证环境是否正常工作。4.1 模型转换首先下载YOLOv10预训练模型以yolov10m为例wget https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10m.onnx使用ATC工具转换为昇腾OM模型atc --modelyolov10m.onnx \ --framework5 \ --outputyolov10m-detect \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend910B4.2 推理代码关键点在C代码中正确处理输入输出是关键。以下是输入预处理的核心代码// 图像缩放 cv::resize(frame, frame, cv::Size(modelWidth, modelHeight)); // 颜色空间转换 cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB); // 归一化处理 frame.convertTo(frame, CV_32FC3, 1.0/255.0);输出后处理时YOLOv10的输出格式比早期版本更友好// 输出格式为[left, top, right, bottom, confidence, class] for (int i 0; i numDetections; i) { float left output[i*6 0]; float top output[i*6 1]; float right output[i*6 2]; float bottom output[i*6 3]; float confidence output[i*6 4]; int classId static_castint(output[i*6 5]); if (confidence confThreshold) { // 绘制检测框 cv::rectangle(image, cv::Point(left, top), cv::Point(right, bottom), cv::Scalar(0, 255, 0), 2); } }4.3 常见问题排查如果在运行过程中遇到问题可以检查以下几点FFmpeg链接错误ldd /usr/local/lib/libopencv_videoio.so | grep ffmpeg应该显示正确的FFmpeg库路径。NPU设备不可用 检查驱动是否加载lsmod | grep npuOpenCV无法找到FFmpeg 在代码中添加检查std::cout cv::getBuildInformation() std::endl;查看FFmpeg是否为YES。在实际项目中我发现最常出现的问题是动态库路径未正确设置。可以通过以下命令检查export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH5. 性能优化技巧环境搭建完成后还可以通过一些技巧进一步提升性能OpenCV编译优化添加-D ENABLE_AVX2ON启用AVX2指令集使用-D CPU_BASELINEAVX2指定基线指令集FFmpeg硬件加速 如果使用Intel CPU可以启用VAAPI加速--enable-vaapi \ --enable-libmfx昇腾ACL优化使用aclrtSetDevice指定设备合理设置aclrtCreateContext和aclrtCreateStream复用内存避免频繁分配释放一个典型的性能对比优化项推理时间(ms)提升幅度默认配置45.2-启用AVX238.714.4%内存复用32.129.0%批处理28.537.0%6. 容器化部署方案为了确保环境可移植性可以考虑使用Docker容器。以下是一个简单的Dockerfile示例FROM ubuntu:22.04 # 安装基础依赖 RUN apt update apt install -y \ build-essential cmake git wget \ libx264-dev libx265-dev libvpx-dev libfdk-aac-dev # 安装昇腾工具链 COPY Ascend-cann-toolkit_*.run . RUN chmod x Ascend-cann-toolkit_*.run \ ./Ascend-cann-toolkit_*.run --install \ rm Ascend-cann-toolkit_*.run # 设置环境变量 ENV LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH构建并运行容器docker build -t ascend-dev . docker run -it --device/dev/davinci0 --device/dev/davinci_manager \ --device/dev/hisi_hdc ascend-dev这种方案特别适合团队协作和CI/CD环境确保所有开发者使用完全相同的环境配置。

相关文章:

保姆级教程:在Ubuntu 22.04上手动编译FFmpeg+OpenCV,搞定昇腾CANN C++推理环境

昇腾NPU开发实战:从零构建FFmpegOpenCV的C推理环境 在昇腾NPU上进行C开发时,环境配置往往是第一个拦路虎。不同于常见的x86架构,昇腾平台的异构计算特性要求开发者对底层依赖有更深入的理解。本文将手把手带你完成FFmpeg和OpenCV的源码编译&a…...

3大核心功能打造智能游戏体验:League-Toolkit从入门到精通指南

3大核心功能打造智能游戏体验:League-Toolkit从入门到精通指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League…...

Overleaf-Workshop:在VSCode中实现Open Overleaf项目的无缝协作与高效管理

Overleaf-Workshop:在VSCode中实现Open Overleaf项目的无缝协作与高效管理 【免费下载链接】Overleaf-Workshop Open Overleaf/ShareLaTex projects in vscode, with full collaboration support. 项目地址: https://gitcode.com/gh_mirrors/ov/Overleaf-Workshop…...

Simulink SVPWM模块输出对不上?别慌,可能是这两个参数没设对(附24V电机FOC仿真案例)

Simulink SVPWM模块输出差异排查指南:从参数配置到波形修正 引言 在电机控制系统的仿真与开发过程中,Simulink的SVPWM模块是工程师们常用的工具之一。然而,许多开发者在对比自带模块与自建模型输出时,经常会遇到令人困惑的波形不一…...

如何快速解锁网易云音乐NCM文件:ncmdumpGUI终极指南

如何快速解锁网易云音乐NCM文件:ncmdumpGUI终极指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM格式文件无法在其他…...

Ansible Playbook在JumpServer中的高级用法:自动化运维效率提升技巧

Ansible Playbook在JumpServer中的高阶实战:效率倍增的自动化运维策略 开篇:当堡垒机遇上自动化运维 想象一下这样的场景:凌晨三点,服务器突然告警,传统运维需要手动登录每台机器检查状态,而熟练使用Ansibl…...

告别重复造轮子:用快马ai一键生成arm7标准外设驱动,效率提升50%

作为一名嵌入式开发者,我经常需要和ARM7这类微控制器打交道。每次新项目启动,最头疼的就是那些重复性的外设驱动编写工作——尤其是定时器中断这种基础功能,虽然逻辑简单,但写起来特别耗时。最近发现InsCode(快马)平台的AI生成功能…...

别再为MoveIt安装发愁了!Ubuntu 20.04 + ROS Noetic 保姆级配置全流程

别再为MoveIt安装发愁了!Ubuntu 20.04 ROS Noetic 保姆级配置全流程 刚接触ROS和机械臂控制时,MoveIt的安装过程就像一道难以逾越的门槛。记得我第一次尝试配置时,整整两天都卡在依赖报错和环境变量设置上。本文将带你用最稳妥的方式&#x…...

VRCT完全指南:在VRChat中打破语言障碍的终极解决方案

VRCT完全指南:在VRChat中打破语言障碍的终极解决方案 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT VRCT(VRChat Chatbox Translator & Transcription&…...

FanControl进阶指南:从噪音诊断到智能散热系统构建

FanControl进阶指南:从噪音诊断到智能散热系统构建 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...

PX4仿真环境下的XTDrone实战:解决roslaunch常见错误的5个技巧

PX4仿真环境下的XTDrone实战:解决roslaunch常见错误的5个技巧 在无人机开发领域,PX4与ROS的结合为开发者提供了强大的仿真和测试平台。XTDrone作为基于PX4和ROS的开源无人机仿真框架,已经成为许多开发者和研究团队的首选工具。然而&#xff0…...

亿级并发下的抢票系统架构:从DDD到微服务的实战解析

1. 抢票系统的业务挑战与技术痛点 每年春运期间,12306系统都要面对全球最严苛的高并发考验。2019年春运最高峰日点击量达到1495亿次,相当于每个中国人当天点击了100多次。这种量级的并发请求,如果直接打到数据库上,就算是把阿里云…...

Kandinsky-5.0-I2V-Lite-5s多场景应用:社交头像动效、PPT动态配图、电子相册生成

Kandinsky-5.0-I2V-Lite-5s多场景应用:社交头像动效、PPT动态配图、电子相册生成 1. 认识Kandinsky-5.0-I2V-Lite-5s Kandinsky-5.0-I2V-Lite-5s是一款轻量级图生视频模型,它能将静态图片转化为动态视频。你只需要上传一张首帧图片,再补充一…...

从三角函数到雷达滤波:三角窗的DSP实现与性能测试全记录

从三角函数到雷达滤波:三角窗的DSP实现与性能测试全记录 1. 三角窗的数学本质与信号处理价值 在数字信号处理领域,窗函数就像是一位精密的调音师,能够对原始信号进行细致的修饰和调整。三角窗作为其中最基础却又最富特色的成员之一&#xff0…...

HackBar插件许可绕过实战:从旧版降级到源码修改

1. HackBar插件许可验证问题解析 最近不少安全测试同行反馈,HackBar插件突然弹出许可验证窗口,导致无法正常使用。这个问题其实从2.2.0版本开始就存在了,开发者加入了商业化验证机制。作为一个用了HackBar五年的老用户,我完全理解…...

人脸识别OOD模型在金融领域的身份验证应用

人脸识别OOD模型在金融领域的身份验证应用 1. 引言 想象一下这样的场景:一位银行客户正在通过手机APP进行大额转账,系统需要快速准确地确认他的身份。传统的人脸识别系统可能会因为光线不佳、佩戴口罩或者图像模糊而无法正常工作,甚至可能被…...

颠覆传统:智能网页捕获工具重新定义长截图体验

颠覆传统:智能网页捕获工具重新定义长截图体验 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extension …...

老生常谈:聊聊mysql幻读问题?

之前有位小伙伴美团三面,一直被追求「幻读是否被 MySQL 可重复度隔离级别彻底解决了?」之前我也提到过,MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了&#xff0…...

ESP32 CMakeLists.txt配置避坑指南:为什么加了PRIV_REQUIRES driver反而编译失败?

ESP32 CMakeLists.txt配置避坑指南:为什么加了PRIV_REQUIRES driver反而编译失败? 在ESP-IDF开发环境中,CMakeLists.txt文件的配置往往是决定项目能否顺利编译的关键。许多开发者在移植或创建新组件时,常常陷入依赖声明的误区——…...

Karp的21个NPC问题:从理论到实践的经典探索

1. Karp与NPC问题的历史背景 1971年,Stephen Cook在论文《The Complexity of Theorem Proving Procedures》中首次提出了NP完全性的概念,并证明了布尔可满足性问题(SAT)属于NP完全问题。这一突破性工作为计算复杂性理论奠定了基石…...

EcomGPT-中英文-7B电商模型实战:基于YOLOv8的商品图像识别与文案生成联动

EcomGPT-中英文-7B电商模型实战:基于YOLOv8的商品图像识别与文案生成联动 1. 引言 想象一下这个场景:你正在看一场电商直播,主播语速飞快地介绍着几十款商品。你刚对其中一款水杯产生兴趣,还没来得及问材质和容量,画…...

中小企业SEO推广应该投入多少费用

<h2>中小企业SEO推广应该投入多少费用</h2> <p>在数字化时代&#xff0c;网络已经成为企业推广和销售的重要渠道之一。特别是对于中小企业来说&#xff0c;通过优化搜索引擎&#xff08;SEO&#xff09;来提升网站的自然流量&#xff0c;是非常有效且相对经济…...

Ostrakon-VL像素UI设计细节:16色限定调色板与可访问性对比度达标

Ostrakon-VL像素UI设计细节&#xff1a;16色限定调色板与可访问性对比度达标 1. 项目背景与设计理念 1.1 从工业UI到像素艺术的转变 在零售与餐饮行业的AI应用场景中&#xff0c;传统工业级UI往往给人冰冷、复杂的印象。Ostrakon-VL扫描终端大胆采用8-bit复古像素风格&#…...

开发提效新组合:用Cursor编写核心逻辑,快马平台一键生成完整企业级项目

今天想和大家分享一个提升开发效率的实用组合&#xff1a;用Cursor编写核心业务逻辑&#xff0c;再通过InsCode(快马)平台一键生成完整项目。最近在开发一个企业内部工时管理系统时&#xff0c;这套组合拳帮我节省了大量重复劳动时间。 1. 为什么选择这个技术组合 开发企业级…...

实战向 Python 汽车推荐系统 Django框架 可视化 协同过滤算法 数据分析 大数据 机器学习(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

高效解决E-Hentai图库下载难题:实用下载工具全攻略

高效解决E-Hentai图库下载难题&#xff1a;实用下载工具全攻略 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 在数字资源管理领域&#xff0c;E-Hentai作为知名的漫画…...

万象视界灵坛实战教程:广告Banner图受众情绪倾向语义解析实践

万象视界灵坛实战教程&#xff1a;广告Banner图受众情绪倾向语义解析实践 1. 平台介绍与核心能力 万象视界灵坛是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的图像语义分析过程转化为直观的交互体验&#xff0c;特别适合需要快速理解视觉内容情感倾向的营销…...

Qwen3-4B-Thinking-GGUF开源模型:Apache-2.0协议下合规商用注意事项

Qwen3-4B-Thinking-GGUF开源模型&#xff1a;Apache-2.0协议下合规商用注意事项 1. 引言&#xff1a;当开源模型遇上商业应用 最近&#xff0c;一个名为Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF的模型在开发者圈子里引起了不小的关注。这个模型基于Qwen3-4B-Thinkin…...

C语言文件操作:从键盘输入到文件保存的完整流程(附常见错误排查)

C语言文件操作实战&#xff1a;从键盘输入到文件保存的完整指南 在C语言开发中&#xff0c;文件操作是每个程序员必须掌握的技能。无论是保存用户配置、记录日志还是处理数据&#xff0c;文件读写都扮演着关键角色。本文将带你从零开始&#xff0c;通过一个完整的案例&#xff…...

Qwen3.5-9B效果展示:中英混合输入+代码注释生成高质量输出

Qwen3.5-9B效果展示&#xff1a;中英混合输入代码注释生成高质量输出 1. 模型核心能力概览 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;在多个领域展现出卓越的能力。这个模型特别适合处理复杂的技术任务&#xff0c;尤其是那些需要同时理解自然语言和编程语言的…...