最近在做一个实时人脸识别项目,设备是 Jetson Xavier NX(一个手掌大小的 AI 小电脑)。
刚开始信心满满,觉得"嵌入式 AI"听起来很酷,结果一跑起来发现:慢得像幻灯片。
明明这设备宣传说"AI 性能很强",为什么我的程序跑不动?
折腾了一周,性能终于提升了 4 倍,过程中踩了不少坑。
今天分享给大家,希望你们少走弯路。
技术方案
结果
这个阶段只是跑通流程,体验很差,但至少证明了"功能可行"。

想法
既然 Haar Cascade 不行,那就换个深度学习模型吧。
我找到了一个开源的轻量模型:Ultra-Light-Fast-Generic-Face-Detector-1MB。
模型只有 1.3MB,专门为嵌入式设备优化的,看起来很合适。
实施
改了几行代码,把检测器换成 ONNX 模型:
代码块
net = cv2.dnn.readNetFromONNX('model.onnx')
复制成功
重新跑,结果:
我当时开心坏了,以为大功告成。
但是...
我后来发现,这个模型还是跑在 CPU 上,根本没用上 GPU。
Xavier NX 有个强大的 GPU,结果我白瞎了。
坑 1:环境不支持,需要重新编译 OpenCV
我想让模型跑在 GPU 上,就在代码里加了这两行:
代码块
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
复制成功
运行,报错:cv2.dnn.DNN_BACKEND_CUDA not found
一查才知道:pip 安装的 OpenCV 默认不支持 CUDA。
要用 GPU,必须自己编译一个支持 CUDA 的 OpenCV。
我当时的心情:💔
坑 2:存储空间不够
Xavier NX 的系统盘只有 14GB,系统已经占了 10GB,剩下 4GB。
编译 OpenCV 需要下载源码、依赖库、生成中间文件,至少要 10GB 空间。
我下载到一半,提示"磁盘空间不足",直接炸了。
解决方案:插了个 U 盘,把编译工作搬到 U 盘上。
坑 3:设备型号搞错了
在网上找教程时,我看到有人说"Jetson 编译 OpenCV 要用 CUDA_ARCH_BIN=5.3"。
我照着做,结果编译一直报错。
后来才发现:
我的设备是 NX,参数当然不对。
教训:AI 聊天工具的上下文如果太长,它会"忘记"你的设备型号,给出错误建议。一定要反复强调关键信息。
坑 4:依赖库没装全
开始编译后,报了一堆错误:
代码块
CMake Error: CUDA_cufft_LIBRARY NOTFOUND
CMake Error: CUDA_nppc_LIBRARY NOTFOUND
复制成功
我一脸懵,这些是啥?
后来查资料才知道,这些是 CUDA 开发库,需要单独安装:
代码块
sudo apt install libcufft-dev-11-4 libnpp-dev-11-4
复制成功
我之前安装到一半就手贱停止了,导致包不完整,排查了半天才发现。
教训:依赖安装时别手贱打断,确认完整后再继续。
坑 5:编译时间太长
即使一切顺利,编译 OpenCV 也要 2-5 个小时。
我用 -j2(同时编译 2 个文件)跑,CPU 占满,风扇狂转,等得我怀疑人生。
教训:编译嵌入式设备的大型库,一定要有心理准备,别以为几分钟就能搞定。
坑 6:下载速度慢
编译过程中要下载一些依赖,默认源在国外,速度慢到怀疑人生。
解决方案:换成国内镜像源,比如清华源:
代码块
sudo sed -i 's|ports.ubuntu.com|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
复制成功
现在正在编译中,预计还要 2 小时...
编译完成后,我会测试 GPU 加速的效果,预期:
到时候再更新结果。
在这个项目中,我大量用到了 AI 聊天工具(比如 Claude、ChatGPT)。
踩过的坑:
改进方法:
等编译完成后,我会写第二篇:
敬请期待!
如果你也在做嵌入式 AI 项目,遇到问题别慌:
踩坑是正常的,记录下来就是经验。
希望这篇文章能帮到你,少走弯路。
如果有帮助,欢迎点赞收藏!有问题也欢迎评论区讨论。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删