新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenPose 在 Nvidia Jetson TX1 上的安装实战:JetPack 3.1 定制内核、OpenCV 源码编译与 CUDA 架构适配

发布时间:2026/9/19 21:07:45来源:尧图网络
OpenPose 在 Nvidia Jetson TX1 上的安装实战:JetPack 3.1 定制内核、OpenCV 源码编译与 CUDA 架构适配
OpenPose 在 Nvidia Jetson TX1 上的安装实战JetPack 3.1 定制内核、OpenCV 源码编译与 CUDA 架构适配【免费下载链接】openposeOpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation项目地址: https://gitcode.com/gh_mirrors/op/openposeOpenPose 官方并不正式支持 Jetson TX1但社区成员 dreinsdo 实测贡献了一套完整、可复现的安装流程并整理成本文所依据的 installation_jetson_tx1.md 文档。本指南将完整还原这条从零开始的 TX1 安装路线刷写 JetPack 3.1、把文件系统迁移到大容量 SATA 盘、定制内核以驱动外接 USB 摄像头、源码编译 OpenCV 3.4.0再到修改 OpenPose 与 Caffe 的 Makefile 配置使其适配 TX1 的 CUDA 架构compute capability 5.3。读完本文你可以在 TX1 上独立完成 OpenPose 的构建并掌握在有限显存约束下通过分辨率参数调优获得可用帧率的实战方法。背景为什么 TX1 需要一套非官方安装流程OpenPose 官方文档明确表示对 TX1 不做官方支持社区成员 dreinsdo 在 issue 中共享了其在 TX1 上的完整实测过程官方仓库据此收录了本文档。整套流程之所以复杂是因为 TX1 相比桌面 GPU 平台存在四个核心障碍障碍表现应对方案eMMC 存储空间有限不足以容纳系统、工具链与模型将文件系统迁移到 SATA SSD如 120GB SSD板载摄像头无法与 OpenPose 配合采集不可用定制内核使用 USB 外接摄像头如 PS3 EyeJetPack 3.1 自带 OpenCV 缺少 OpenPose 依赖编译/运行期缺库从源码重新编译 OpenCV 3.4.0OpenPose Makefile 与 TX1 的 CUDA 架构不兼容默认 CUDA_ARCH 不含 TX1 的 compute 5.3手工改写 Makefile 配置大部分 USB 摄像头与 SATA 硬盘均可胜任上述替代方案不限定于特定型号。前置条件清单Jetson TX1 板卡 一个 SATA 硬盘 一个 USB 摄像头推荐 PS3 Eye可用的 Linux 主机用于运行 JetPack 刷机工具JetPack 3.1 环境Ubuntu 16.04L4T、CUDA 8、cuDNN 6以及系统预装的 OpenCVOpenPose 依赖Caffe 及其全部依赖、GFlagsdemo 与教程程序使用第 1 步刷写 JetPack 3.1 并迁移文件系统到 SATA 盘首先按照 JetPack 的官方安装指南为 TX1 刷写 JetPack 3.1。务必完整完成OS 刷写与CUDA / cuDNN 安装两个部分后再继续否则后续编译会因缺少驱动与库而失败。刷机完成后执行文件系统迁移参考 JetsonHacks 系列中针对 TX1 的 SATA 盘迁移文章操作将根文件系统移动到 SATA 盘。该步骤的目的是绕开 TX1 板载 eMMC 的容量限制Caffe、OpenCV 源码树、OpenPose 源码以及训练好的模型文件都需要占用数 GB 空间eMMC 很容易吃紧。第 2 步定制内核让外接 USB 摄像头可用这一步的必要性来自实测结论OpenPose 无法与 TX1 板载摄像头配合工作因此必须换用 USB 摄像头。而要让 USB 摄像头以 PS3 Eye 为例在 TX1 上工作需要在内核中启用对应驱动。整体流程综合了两篇 JetsonHacks 文章的做法Build Kernel 与 ttyACM 模块、Sony PlayStation Eye 驱动。获取 JetsonHacks 的 TX1 内核构建脚本buildJetsonTX1Kernel的 v1.0-L4T28.1 版本 zip即 JetPack 3.1 对应发行版。注意不要直接 clone master 分支——master 上是最新的内核构建文件与 JetPack 3.1 不兼容。解压后进入目录运行脚本拉取内核源码。脚本会打开内核配置界面$ cd buildJetsonTX1Kernel $ sudo ./getKernelSources.sh在内核配置界面中找到你所使用摄像头的驱动用复选框check box而非单选框 dot选中后保存并退出。如果使用 PS3 Eye需要启用对应的 ttyACM 与驱动模块换成其他型号摄像头时替换为对应驱动即可。编译内核$ sudo ./makeKernel.sh用新编译的内核镜像替换当前内核$ sudo cp /usr/src/kernel/kernel-4.4/arch/arm64/boot/Image ($PATH_TO_EMMC)/boot/Image将$PATH_TO_EMMC替换为你的 eMMC 挂载路径。即使系统运行在 SATA 盘上这一步也不能省略——Jetson 初始仍从 eMMC 启动并加载内核所以新内核必须写到 eMMC 的 boot 分区才会生效。第 3 步源码编译 OpenCV跳过 Python3 依赖JetPack 3.1 预装的 OpenCV 构建不完整缺少 OpenPose 所需的依赖因此需要从源码自行编译 OpenCV 3.4.0。参考 JK Jung 针对 Jetson TX2 的 OpenCV 3.4.0 安装步骤原样照做即可但有一处例外省略 Python3 依赖的安装即跳过下面三行$ sudo apt-get install python3-dev python3-pip python3-tk $ sudo pip3 install numpy $ sudo pip3 install matplotlib其余编译选项如 CUDA 支持、V4L 等保持原步骤不变。编译完成后确保系统能找到新装的 OpenCV再进入 OpenPose 安装环节。第 4 步安装 OpenPose三处关键修改安装的核心是修改三个文件。文档作者同时提供了修改后的文件版本可供直接替换若采用该方式需将两份 Makefile 配置统一改名为Makefile.config.Ubuntu16_cuda8_JetsonTX2。下面按逐文件修改的方式展开。4.1 克隆源码$ git clone https://gitcode.com/gh_mirrors/op/openpose $ cd openpose4.2 修改 OpenPose 的 Makefile 配置CUDA 架构是重点用编辑器打开仓库中的 Makefile.config.Ubuntu16_cuda8_JetsonTX2$ gedit scripts/ubuntu/Makefile.config.Ubuntu16_cuda8_JetsonTX2对照当前仓库中该文件的现状第 18 行 的OPENCV_VERSION : 3处于注释状态第 33–39 行 的CUDA_ARCH仍是面向桌面 GPU 的 compute_30 至 compute_61 全集且文件内并没有USE_CUDNN定义需要做三处修改修改一启用 OpenCV 3取消注释OPENCV_VERSION一行OPENCV_VERSION : 3修改二替换全部 CUDA_ARCH 为 TX1 架构把文件中所有CUDA_ARCH :行替换为下面这一行CUDA_ARCH : -gencode archcompute_53,code[sm_53,compute_53]这是整套流程中最关键的一步。Tegra X1 集成的 GPU 基于 Maxwell 架构其 compute capability 为 5.3而仓库默认的CUDA_ARCH集合compute_30/35/50/52/60/61并不包含 5.3直接编译会因不支持的 GPU 架构失败。archcompute_53,code[sm_53,compute_53]同时生成 SASSsm_53与 PTXcompute_53两种代码兼顾运行与未来兼容。在本仓库 scripts 目录的全局检索中也确实不存在任何compute_53字样进一步印证该替换是 TX1 平台独有的必要操作。修改三追加 cuDNN 开关USE_CUDNN : 1文档作者特别注明这一项是否必需尚未完全确认未在去掉它的条件下重试过安装保留开启是更稳妥的选择。4.3 修正安装脚本中的路径调用 bug用编辑器打开 install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh$ gedit scripts/ubuntu/install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh将第 44 行的executeShInItsFolder install_openpose_JetsonTX2_JetPack3.1.sh ./scripts/ubuntu/ ./替换为executeShInItsFolder ./scripts/ubuntu/install_openpose_JetsonTX2_JetPack3.1.sh ./ ./从仓库中该脚本的实现第 22–34 行可以看出executeShInItsFolder的工作方式cd $2进入脚本所在目录 →bash ./$1执行脚本 →cd $3回到工作目录。TX1 文档指出的问题在于原写法把脚本所在目录与执行脚本时的当前工作目录混在一起install_openpose_JetsonTX2_JetPack3.1.sh内部依赖从仓库根目录执行需要cp scripts/ubuntu/Makefile.example Makefile若工作目录落在./scripts/ubuntu/下就会出错。对比同仓库 JetPack 3.3 版本的 install_caffe_and_openpose_JetsonTX2_JetPack3.3.sh其写法正是executeShInItsFolder ./scripts/ubuntu/install_openpose_JetsonTX2_JetPack3.3.sh ./ ./与文档要求的修正后写法一致可作为交叉印证。4.4 分段安装Caffe 编译前中断并同步修改其配置启动安装脚本。脚本的整体执行逻辑见 install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh是先通过git submodule update --init --recursive --remote拉取 Caffe 子模块再执行 Caffe 的安装脚本最后执行 OpenPose 的安装脚本。bash ./scripts/ubuntu/install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh脚本首次运行时会 clone Caffe 仓库并下载相关文件。当 Caffe 开始编译时立即用CTRLC中断然后修改 Caffe 仓库内的 Makefile 配置$ gedit 3rdparty/caffe/Makefile.config.Ubuntu16_cuda8_JetsonTX2对它做与 4.2 节完全相同的修改OPENCV_VERSION : 3、CUDA_ARCH替换为 compute_53。唯一差异是 Caffe 配置中的 CUDNN 开关默认已经开启无需再追加。为什么必须分两段因为 Caffe 作为 git submodule 是在脚本运行时才被拉取到本地的其 Makefile 配置只能等 Caffe 代码就位后再修改而一旦编译已经开始中途改配置不会生效所以要在编译刚开始但尚未大量产出产物的时间点中断修改再重新启动脚本让 Caffe 用新配置编译。修改完成后重新运行同一个安装脚本bash ./scripts/ubuntu/install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh这次脚本会完成全部剩余工作。OpenPose 部分由 install_openpose_JetsonTX2_JetPack3.1.sh 完成其内部行为第 45–58 行包括复制Makefile.example为Makefile复制Makefile.config.Ubuntu16_cuda8_JetsonTX2为Makefile.config即 4.2 节修改的配置在此刻生效执行make all -jnproc 全量并行编译 OpenPose调用 models/getModels.sh 下载 BODY_25、COCO、MPI、face、hand 等所需的模型文件。全部结束后build/examples/openpose/openpose.bin即为可直接运行的 demo 可执行文件。第 5 步运行与性能调优5.1 基础运行降低网络分辨率换取可用帧率TX1 的 GPU 算力与显存都很有限要获得可接受的帧率必须同时降低摄像头采集分辨率与网络推理分辨率./build/examples/openpose/openpose.bin -camera_resolution 640x480 -net_resolution 128x96camera_resolution 640x480将摄像头采集分辨率从默认的 1280x720见 include/openpose/flags.hpp 中camera_resolution的默认值说明降到 640x480减少上游输入数据量。net_resolution 128x96网络推理输入尺寸。net_resolution要求为 16 的倍数flags.hpp128x96 满足该约束在精度可接受的场景下分辨率越低推理越快这是 TX1 上获得流畅帧率的关键杠杆。默认的-1x36816:9 画面下等效 656x368对 TX1 来说负担过重。补充说明示例中camera_resolution使用单横线前缀而 face/hand 参数使用双横线前缀两种写法在 gflags 解析规则下等价OpenPose 的 demo 命令行参数均由 include/openpose/flags.hpp 定义运行openpose.bin --help可查看全部参数说明。5.2 开启人脸 / 手部检测注意显存上限在基础命令之上追加--face或--hand即可激活对应检测并将对应网络的net_resolution从默认的 368x368 调低以匹配 TX1# Body and face ./build/examples/openpose/openpose.bin --face -face_net_resolution 256x256 # Body and hands ./build/examples/openpose/openpose.bin --hand -hand_net_resolution 256x256 # All body, face, and hands ./build/examples/openpose/openpose.bin --face -face_net_resolution 256x256 --hand -hand_net_resolution 256x256face_net_resolution与hand_net_resolution同样要求为 16 的倍数且为正方形见 flags.hpp 与 flags.hpp默认值均为 368x368。务必注意文档中的显式警告face 与 hand 同时开启会触发内存不足out of memory错误——TX1 的共享内存带宽与容量无法同时支撑两个附加检测网络实际使用时应二选一。5.3 常用参数速查以下参数默认值均可在 include/openpose/flags.hpp 中查证参数默认值说明camera_resolution-1x-1等效 1280x720摄像头采集分辨率TX1 上建议 640x480net_resolution-1x368姿态网络输入分辨率须为 16 的倍数TX1 上建议 128x96face_net_resolution368x368人脸网络输入16 的倍数且为正方形TX1 上建议 256x256hand_net_resolution368x368手部网络输入约束同上facefalse是否开启人脸关键点检测handfalse是否开启手部关键点检测model_foldermodels/模型文件所在目录注意事项与延伸阅读外接摄像头是必要条件当前流程下请始终使用 USB 摄像头如 PS3 Eye不要依赖 TX1 板载摄像头。本方案由社区维护文档作者明确说明 OpenPose 对 Jetson TX1 不做官方支持本流程来自社区实测。若安装过程遇到问题可在文档对应的 issue 帖中反馈交流。脚本注释中的环境假设仓库中的安装脚本install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh在开头注明其假设刚刷写完 JetPack 3.1Ubuntu 16、CUDA 8、cuDNN 6 与 OpenCV 已安装任何一项不满足都可能失败。同系列文档TX2 平台有两条更简化的官方社区安装路径安装方式类似均为一条脚本完成 Caffe OpenPose可参考 installation_jetson_tx2_jetpack3.1.md 与 installation_jetson_tx2_jetpack3.3.md其中 JetPack 3.3 版还包含 Python 接口pyopenpose的构建说明。后续使用安装完成后完整的 demo 参数与输出格式说明可进一步查阅 doc/01_demo.md 与 doc/02_output.md。【免费下载链接】openposeOpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation项目地址: https://gitcode.com/gh_mirrors/op/openpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于STM32和微信小程序的宠物自动喂养系统设计 2026/9/19 21:52:53

基于STM32和微信小程序的宠物自动喂养系统设计

简介:设计资料围绕基于STM32的猫狗宠物喂养系统展开,面向物联网嵌入式学习者、电子设计竞赛参赛者及智能宠物硬件开发者,完整呈现从需求分析到系统落地的全流程方案。内容基于STM32F103RCT6主控,结合ESP8266 WiFi模块、28BYJ4步进…

阅读更多 →
彩灯控制器设计:NE555+CD4040+74LS138数字电路闭环实现 2026/9/19 21:52:53

彩灯控制器设计:NE555+CD4040+74LS138数字电路闭环实现

简介:本资源是一份面向电子信息类本科生的数字电子技术课程设计报告,聚焦彩灯控制器硬件系统实现,帮助学习者掌握NE555定时器、74LS138译码器与CD4040计数器的协同应用原理与工程实践方法。报告完整覆盖设计目的、总体方案、功能模块分析&…

阅读更多 →
接口编址与地址译码:嵌入式系统总线时序与外设通信要点 2026/9/19 21:52:53

接口编址与地址译码:嵌入式系统总线时序与外设通信要点

简介:《微处理器系统结构与嵌入式系统设计》第6章课件《计算机接口技术》以PPT形式系统讲解I/O接口基础、端口编址、地址译码、程序查询/中断/DMA/通道等传输方式,以及并行与串行接口的设计要点。内容涵盖独立编址与存储器映像编址的对比、带握手信号的并…

阅读更多 →
正则化全面解析:从L1/L2到软阈值与深度学习实践 2026/9/19 21:52:53

正则化全面解析:从L1/L2到软阈值与深度学习实践

1. 先从一个反直觉的结论说起:惩罚参数为什么能提升泛化能力?我第一次接触机器学习时,怎么也想不通一件事:为什么要在损失函数后面加一个"惩罚项"去主动降低模型的表现?训练模型不就是为了让损失尽量小吗&am…

阅读更多 →
高频课设实战:从谐振参数计算到仿真调参与误差闭环 2026/9/19 21:52:53

高频课设实战:从谐振参数计算到仿真调参与误差闭环

简介:《高频课设_题报告书》是一份围绕“中波电台发射与接收系统设计”的通信电子线路课程设计说明书,面向电子信息工程专业学生及高频电路学习者,完整呈现了从任务书、开题报告到系统指标分析、电路设计与仿真的全过程。压缩包内共1个文件&a…

阅读更多 →
整车厂用户运营数据链路:从埋点到CDP的精细化运营实践 2026/9/19 21:49:53

整车厂用户运营数据链路:从埋点到CDP的精细化运营实践

简介:《新时代整车厂竞争法则:打造精细化用户运营》是一份面向整车厂管理者、汽车行业市场及用户运营从业者的行业报告式PDF,系统剖析汽车市场增长放缓、疫情冲击、消费者偏好迁移等新时代困境,并结合蔚来、小鹏等新势力实践&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞