Odinub ARM平台OpenCV环境部署:从源码编译到性能优化全攻略
1. 项目缘起为什么要在Odinub上折腾OpenCV最近在折腾一个基于Odinub的视觉小项目核心需求是让这块小巧的开发板能“看懂”图像。无论是想做个智能门铃、小车避障还是玩点图像识别的小实验OpenCV几乎是绕不开的基石库。然而Odinub作为一款基于ARM架构的单板计算机其资源尤其是计算能力和存储空间与我们的台式机或服务器相比存在天然的差距。直接照搬在x86 Linux系统上apt install python3-opencv的“一键安装”大法往往会遇到各种依赖冲突、编译失败或者性能低下的问题。所以为Odinub“量身定制”一个稳定、高效的OpenCV环境就成了项目成功的第一步。这个过程更像是一次对嵌入式Linux系统软件生态的深度探索充满了挑战也充满了乐趣。2. 环境审视你的Odinub准备好了吗在动手之前我们必须先摸清“家底”。Odinub通常预装了基于Debian的Linux发行版但具体的版本如Raspbian、Ubuntu Server for ARM等和内核配置会直接影响后续的安装路径。2.1 系统信息确认首先通过SSH或直接连接终端执行以下命令来获取关键信息# 查看操作系统版本 cat /etc/os-release # 查看内核版本和架构 uname -a # 查看Python版本OpenCV的Python绑定是常用接口 python3 --version pip3 --version我的Odinub运行的是Raspbian 11 (bullseye)内核是5.15.84-v8架构是aarch64即ARM 64位。Python版本是3.9。确认这些信息至关重要因为后续的依赖包名称和编译选项都需要与之匹配。2.2 存储空间与交换空间检查编译OpenCV是一个资源消耗型任务特别是需要从源码构建时。Odinub的eMMC或SD卡存储空间可能有限。# 查看根目录可用空间 df -h / # 查看交换空间Swap大小 free -h如果可用空间小于2GB强烈建议先清理无用包或扩容。交换空间如果小于1GB在编译时极易因内存不足而失败。可以通过以下命令临时增加交换空间重启后失效# 创建一个1GB的交换文件 sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile注意使用SD卡作为系统盘时频繁的交换操作会显著缩短其寿命。这只应作为编译期间的临时手段。长期使用建议优化编译参数减少内存占用或使用USB 3.0移动硬盘作为交换分区。2.3 基础依赖与构建工具安装无论选择哪种安装方式一些基础工具和库是必须的。更新软件源并安装它们sudo apt update sudo apt upgrade -y # 安装编译工具链、CMake、Git等 sudo apt install -y build-essential cmake git pkg-config # 安装图像I/O库用于读取JPEG, PNG等格式 sudo apt install -y libjpeg-dev libtiff5-dev libpng-dev # 安装视频I/O库用于处理视频流和摄像头 sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt install -y libxvidcore-dev libx264-dev # 安装GTK用于OpenCV的highgui模块显示窗口如果你需要GUI sudo apt install -y libgtk-3-dev # 安装优化库如ATLAS OpenBLAS 可选但推荐用于加速矩阵运算 sudo apt install -y libatlas-base-dev gfortran # 安装Python3开发头文件 sudo apt install -y python3-dev python3-numpy安装python3-numpy是必须的因为OpenCV的Python接口极度依赖NumPy数组进行操作。至此基础战场已经打扫干净。3. 安装路径抉择APT预编译包 vs 源码编译这是为Odinub部署OpenCV时面临的第一个重大选择两种方案各有优劣直接决定了后续的体验和可控性。3.1 方案一使用APT仓库安装最快捷但限制多Debian/Ubuntu系的APT仓库里通常有预编译的OpenCV包。# 搜索可用的OpenCV相关包 apt search opencv | grep python3 # 通常可以这样安装 sudo apt install -y python3-opencv优点极其简单快速几分钟内完成。依赖关系自动处理。通常比较稳定。缺点与坑点版本陈旧官方仓库的版本往往落后于OpenCV主线数月甚至数年。你可能无法使用最新的算法和API。功能模块可能不完整为了控制包大小预编译包可能禁用了一些“非必需”功能如GPU支持在Odinub上通常无关、某些专利算法如SIFT、SURF在早期版本中或深度神经网络模块DNN。无法自定义优化无法针对Odinub的ARM CPU特性如NEON SIMD指令集进行编译优化性能可能不是最优。实操心得对于快速验证、学习或者对版本、性能要求不高的简单项目APT安装是首选。安装后可以通过Python快速验证import cv2 print(cv2.__version__)如果打印出版本号如4.5.1并且能成功读取一张图片说明基础功能可用。但如果你需要用到cv2.dnn模块或者需要contrib扩展库中的额外功能这个方案很可能无法满足。3.2 方案二从源码编译安装最灵活但耗时且复杂这是追求功能完整性、最新特性或性能优化的唯一途径。整个过程包括下载源码、配置、编译和安装。步骤详解获取源码建议使用git克隆方便后续更新。# 创建并进入一个工作目录避免弄乱系统 mkdir ~/opencv_build cd ~/opencv_build # 克隆OpenCV主仓库 git clone https://github.com/opencv/opencv.git # 克隆OpenCV贡献模块仓库包含许多额外功能 git clone https://github.com/opencv/opencv_contrib.git # 进入opencv目录并切换到某个稳定版本标签如4.8.0避免使用不稳定的开发分支 cd opencv git checkout tags/4.8.0 cd ../opencv_contrib git checkout tags/4.8.0 cd ..配置编译选项最关键的一步在opencv目录下创建一个build目录并使用cmake进行配置。这里的参数决定了最终编译出的OpenCV是什么样子。cd opencv mkdir build cd build下面是一个针对OdinubARM 64位优化的CMake配置命令示例。请务必根据你的需求调整cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_EXTRA_MODULES_PATH../../opencv_contrib/modules \ -D ENABLE_NEONON \ -D ENABLE_VFPV3ON \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ -D BUILD_EXAMPLESOFF \ -D WITH_GTKON \ -D WITH_FFMPEGON \ -D WITH_LIBV4LON \ -D INSTALL_PYTHON_EXAMPLESOFF \ -D OPENCV_ENABLE_NONFREEOFF \ -D BUILD_opencv_python3ON \ -D PYTHON3_EXECUTABLE$(which python3) \ -D PYTHON3_INCLUDE_DIR$(python3 -c from distutils.sysconfig import get_python_inc; print(get_python_inc())) \ -D PYTHON3_PACKAGES_PATH$(python3 -c from distutils.sysconfig import get_python_lib; print(get_python_lib())) \ -D PYTHON3_NUMPY_INCLUDE_DIRS$(python3 -c import numpy; print(numpy.get_include())) \ ..关键参数解析CMAKE_INSTALL_PREFIX/usr/local指定安装路径。/usr/local是本地安装软件的标准位置。OPENCV_EXTRA_MODULES_PATH指向opencv_contrib/modules这样就能编译额外的贡献模块。ENABLE_NEONON和ENABLE_VFPV3ON针对ARM架构启用NEON和VFPv3浮点运算单元加速这对Odinub的性能提升至关重要。BUILD_TESTS/OFF等关闭测试和例子编译能显著减少编译时间和磁盘占用。WITH_GTK/FFMPEG/LIBV4L启用图形界面、视频编解码和V4L2摄像头支持。OPENCV_ENABLE_NONFREEOFF禁用一些专利算法。如果需要SIFT等可以设为ON但请注意法律合规性。最后几行PYTHON3_*参数确保CMake能找到正确的Python3解释器、头文件、库路径和NumPy路径这是成功生成Python绑定的关键。执行cmake命令后仔细查看终端输出。确保在Python 3部分Interpreter、Libraries、numpy都显示为找到YES且路径正确。如果出现NO则需要检查对应的依赖是否已安装。编译与安装配置成功后开始编译。使用make -j$(nproc)可以利用Odinub的所有CPU核心进行并行编译加快速度。# 开始编译使用所有可用的CPU核心 make -j$(nproc)这个过程会非常漫长在Odinub上可能需要1-4个小时取决于型号和SD卡速度。期间CPU会满载板子可能会发热确保散热良好。编译过程中的常见问题内存不足如果编译进程被杀死Killed通常是内存RAMSwap耗尽。可以尝试减少并行任务数make -j2只用2个核心或者如前所述增加交换空间。依赖缺失如果报错找不到某个头文件如fatal error: libavcodec/avcodec.h: No such file or directory说明对应的-dev开发包没装。根据错误信息安装即可例如sudo apt install libavcodec-dev。编译成功后进行安装sudo make install sudo ldconfig # 更新动态链接库缓存验证安装安装完成后重启终端或运行source ~/.bashrc如果你修改了环境变量。然后验证# 查看C版本 pkg-config --modversion opencv4 # 在Python中验证 python3 -c import cv2; print(cv2.__version__); print(cv2.__file__)Python绑定的文件cv2.so通常会被安装到/usr/local/lib/python3.9/dist-packages/cv2/或类似路径。如果Python提示找不到模块可能是因为路径不在sys.path中。一个简单的解决方法是创建一个软链接到Python的全局site-packages目录# 找到编译生成的cv2.so文件 find /usr/local -name cv2*.so # 假设找到路径是 /usr/local/lib/python3.9/site-packages/cv2/python-3.9/cv2.cpython-39-aarch64-linux-gnu.so # 创建软链接注意实际文件名可能不同 sudo ln -s /usr/local/lib/python3.9/site-packages/cv2/python-3.9/cv2.cpython-39-aarch64-linux-gnu.so /usr/local/lib/python3.9/dist-packages/cv2.so4. 性能调优与针对性配置源码编译安装给了我们最大的控制权我们可以针对Odinub的特定场景进行优化。4.1 编译期优化CMake参数的精调除了上述基础参数还可以考虑-D CMAKE_CXX_FLAGS-O2 -mcpucortex-a72指定针对Odinub如使用Cortex-A72核心的CPU微架构进行优化。使用-O3进行更激进的优化但可能增加编译时间且不一定在所有代码上都有更好效果。-D WITH_OPENMPON启用OpenMP多线程支持对于OpenCV中一些并行化算法有加速效果。但需要确保你的应用场景是多线程友好的。-D WITH_OPENCLOFFOdinub的GPU通常不支持OpenCL可以关闭以减少依赖和编译时间。谨慎开启的功能OPENCV_ENABLE_NONFREE专利算法、BUILD_JAVA如果你不用Java、WITH_CUDAOdinub无NVIDIA GPU等关闭它们可以简化编译过程。4.2 运行期优化Python代码层面的技巧即使OpenCV库本身已优化不当的Python代码也会成为瓶颈。避免循环善用向量化操作OpenCV的Python接口底层是C单次函数调用处理整个数组NumPy数组效率极高。绝对避免在Python层用for循环遍历像素。反面教材import cv2 import numpy as np img cv2.imread(test.jpg) height, width img.shape[:2] for i in range(height): for j in range(width): # 对每个像素进行操作速度极慢 img[i, j] 255 - img[i, j] # 反色正确做法# 利用NumPy的广播机制一条语句完成整个矩阵操作 img 255 - img # 或者使用OpenCV内置函数 img cv2.bitwise_not(img)预处理与降分辨率对于实时视频流处理如果算法允许先将图像缩放到一个较小的尺寸如从1080p降到480p再进行处理计算量会呈平方级下降。frame_small cv2.resize(frame, (0,0), fx0.5, fy0.5) # 缩小到一半 # ... 在小图上进行处理 ... # 如果需要将结果映射回原图坐标选择性使用算法在资源受限的Odinub上优先选择轻量级算法。例如目标检测可以考虑MobileNet-SSD而不是YOLOv4特征点检测可以用ORB代替SIFT如果不需要尺度不变性。5. 实战验证与问题排查安装完成后最好用一个完整的流程来验证核心功能是否正常。5.1 基础功能测试脚本创建一个test_opencv.py脚本import cv2 import numpy as np print(fOpenCV Version: {cv2.__version__}) # 1. 图像读写 img np.ones((300, 400, 3), dtypenp.uint8) * 255 # 创建一张白色图片 cv2.putText(img, OpenCV on Odinub Works!, (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) cv2.imwrite(test_output.jpg, img) print(Image write test passed.) # 2. 摄像头捕获如果有USB摄像头 cap cv2.VideoCapture(0) if cap.isOpened(): ret, frame cap.read() if ret: print(Camera capture test passed.) cv2.imwrite(camera_test.jpg, frame) cap.release() else: print(No camera found, skip camera test.) # 3. 核心算法功能以边缘检测为例 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges cv2.Canny(img_gray, 100, 200) print(fEdge detection completed, edge matrix shape: {edges.shape}) # 4. DNN模块测试如果编译时包含 try: # 尝试加载一个简单的分类网络需要提前下载模型文件 # net cv2.dnn.readNetFromCaffe(deploy.prototxt, model.caffemodel) # print(DNN module test passed.) print(DNN module import successful.) except Exception as e: print(fDNN module test skipped or failed: {e}) print(All basic tests completed.)运行这个脚本观察输出和生成的图片文件。5.2 常见问题与解决方案ImportError: No module named cv2原因Python找不到cv2.so文件。解决确认编译安装的最后一步sudo make install成功执行。使用find命令定位cv2.so文件。确保该路径在Python的sys.path中。可以通过在Python中import sys; print(sys.path)查看。将cv2.so所在目录或其父目录添加到PYTHONPATH环境变量或如前所述创建软链接。摄像头无法打开cap.isOpened()返回False原因权限问题或驱动问题。解决将当前用户加入video组sudo usermod -a -G video $USER然后注销重新登录。尝试使用cv2.VideoCapture(0, cv2.CAP_V4L2)指定V4L2后端。使用v4l2-ctl --list-devices命令确认摄像头设备节点如/dev/video0。运行速度非常慢检查使用htop或top命令查看CPU占用。如果单核满载可能是代码中存在Python层循环瓶颈。参考第4.2节进行优化。检查是否在虚拟环境如venv中运行确保虚拟环境内的NumPy是使用优化库如OpenBLAS编译的或者直接使用系统全局安装的NumPy。内存使用量激增原因处理大图像或视频时中间变量没有及时释放。解决在循环中及时将不再需要的大数组赋值为None或使用del语句提示垃圾回收器。对于视频处理确保在循环结束或异常处理中调用cap.release()和cv2.destroyAllWindows()。6. 维护与升级让环境保持健康一旦系统工作起来维护就变得重要。备份你的工作环境将成功编译的build目录和CMakeCache.txt文件备份。下次如果需要重新编译例如升级系统后可以直接使用之前的配置节省大量调试时间。使用虚拟环境可选但推荐对于Python项目使用venv创建独立的虚拟环境可以避免污染系统级的Python包。但需要注意在虚拟环境中使用源码编译的OpenCV可能需要确保虚拟环境中的Python解释器路径与编译时配置的PYTHON3_EXECUTABLE一致或者将编译好的cv2.so复制到虚拟环境的site-packages目录下。升级OpenCV如果需要升级到新版本流程类似。进入opencv和opencv_contrib源码目录拉取最新代码并切换到新版本标签。清空或删除旧的build目录然后重新执行cmake和make。直接在原build目录上编译很可能因为缓存问题导致失败。安装前可以考虑先卸载旧版本sudo make uninstall在旧的build目录下执行但操作需谨慎。经过这样一番从系统准备、方案抉择、深度编译到优化验证的完整流程你得到的不仅仅是一个能在Odinub上运行的OpenCV更是一个对其底层依赖、性能特性和问题排查方法都有了深刻理解的定制化环境。这为后续任何基于计算机视觉的项目打下了最坚实、最可控的基础。记住在嵌入式平台上每一次成功的部署都是对耐心和细致的一次奖赏。

相关新闻

混合人机协作:风险感知任务分配与动态清算的统一接口设计

混合人机协作:风险感知任务分配与动态清算的统一接口设计

1. 项目概述:从任务分配到风险清算的统一接口在混合人机协作的领域里,我们常常面临一个核心矛盾:如何让人类和智能体(Agent)在一个系统里高效、安全地共事?传统的思路往往将“任务分配”和“风险管理”视为…

2026/8/19 2:45:56 阅读更多 →
基于Arduino与LDR的光控节能系统:从原理到实战部署

基于Arduino与LDR的光控节能系统:从原理到实战部署

1. 项目缘起:从“常亮灯”到“智能灯”的转变你有没有留意过,办公室里、楼道里、甚至家里的某些角落,那些24小时亮着的灯?它们可能是在白天光线充足时依然倔强地工作,也可能是在深夜空无一人的走廊里孤独地发光。这种“…

2026/8/19 2:45:56 阅读更多 →
基于ESP32与多传感器融合的饮品重量温度监控器设计与实现

基于ESP32与多传感器融合的饮品重量温度监控器设计与实现

1. 项目缘起:为什么我们需要一个饮品重量与温度监控器?几年前,我还在一个硬件创业团队里折腾,当时我们想做一个智能咖啡杯。团队里有个哥们,每天早上雷打不动要喝一杯手冲,水温、粉水比、萃取时间&#xff…

2026/8/19 2:45:56 阅读更多 →

最新新闻

树莓派Pico通过W5500实现以太网通信:MicroPython驱动与实战指南

树莓派Pico通过W5500实现以太网通信:MicroPython驱动与实战指南

1. 项目缘起:为什么要在Pico上折腾以太网? 最近在做一个需要联网上报数据的嵌入式小项目,主控选用了性价比极高的树莓派Pico。项目本身不复杂,但有一个硬性要求:设备必须通过有线网络接入局域网,以保证通信…

2026/8/19 4:25:16 阅读更多 →
基于树莓派与E-ink屏打造个性化信息看板:从硬件连接到智能渲染

基于树莓派与E-ink屏打造个性化信息看板:从硬件连接到智能渲染

1. 项目概述:为什么我们需要一个E-ink Dashboard? 几年前,我在书桌上摆满了各种屏幕:一个用来写代码,一个用来查资料,还有一个平板电脑专门用来显示日程和待办事项。每天早上,光是唤醒这些屏幕&…

2026/8/19 4:25:16 阅读更多 →
基于STM32与光电传感器的宠物智能水位监测器设计与实现

基于STM32与光电传感器的宠物智能水位监测器设计与实现

1. 项目缘起:一个被忽视的日常痛点养过宠物的人,尤其是养猫养狗的朋友,应该都遇到过这个场景:你正忙着手头的工作,或者沉浸在追剧的快乐中,家里的毛孩子突然跑过来,用爪子扒拉你,或者…

2026/8/19 4:25:16 阅读更多 →
基于Arduino的水位监测报警器DIY:从传感器原理到智能应用

基于Arduino的水位监测报警器DIY:从传感器原理到智能应用

1. 项目概述:一个“会说话”的水碗养过宠物的人,尤其是养猫养狗的朋友,大概都经历过这样的场景:下班回家,看到毛孩子蔫蔫地趴在门口,你心疼地赶紧去给它添水,却发现水碗早就干得底朝天了。或者&…

2026/8/19 4:25:16 阅读更多 →
CUA-Suite:构建高质量计算机使用智能体数据集的核心技术与实践

CUA-Suite:构建高质量计算机使用智能体数据集的核心技术与实践

1. 项目背景与核心价值:为什么我们需要一个“计算机使用”智能体数据集?如果你关注过近两年AI领域的发展,尤其是多模态和具身智能方向,会发现一个有趣的现象:模型在理解图像、生成文本、甚至操控机械臂方面都取得了长足…

2026/8/19 4:25:16 阅读更多 →
AI Agent自动化MOF材料模拟:从核心架构到RASPA工具链实战

AI Agent自动化MOF材料模拟:从核心架构到RASPA工具链实战

1. 项目概述:当AI智能体遇上MOF材料模拟最近在材料计算和AI交叉领域,一个名为“SimMOF”的项目引起了我的注意。简单来说,它试图用AI智能体(AI Agent)来自动化完成金属-有机框架材料(MOF)的模拟…

2026/8/19 4:24:16 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →