Docker环境下OpenPose Python3安装失败及编译报错问题
解决Docker安装OpenPose时的BUILD_python/USE_OPENCV未启用及Caffe编译错误问题
我帮你梳理下遇到的两个核心问题,然后直接给出修改后的Dockerfile,再逐个解释为什么要改:
问题根源分析
- BUILD_python和USE_OPENCV未启用:你的CMake参数写错了——OpenPose的CMake变量是大写开头的,你用的
-DBUILD_python=ON和-USE_OPENCV=ON都是错误格式,导致CMake识别不到,默认设为OFF。 - Caffe编译的缩进错误:你克隆的是BVLC官方的Caffe仓库,这个版本里MKL相关代码有缩进问题,而且OpenPose本身有适配过的Caffe fork,用官方版本会出现编译警告转错误的问题。
- 另外还有几个小问题:比如
make和make -j 64的顺序搞反了,缺少Python开发依赖导致即使开启BUILD_PYTHON也可能编译失败,以及一些冗余的安装步骤。
修改后的Dockerfile
FROM ubuntu:20.04 # 指定具体版本,避免后续Ubuntu更新导致兼容性问题 LABEL maintainer="Ankit Sharma <ankit.kumar@mirrorsize.com>" # 设置时区,避免tzdata交互 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 一次性安装所有依赖,减少镜像层数 RUN apt-get update && apt-get upgrade -y && \ apt-get install -y --no-install-recommends \ tzdata \ python3 python3-pip python3-dev \ libopencv-dev \ libprotobuf-dev protobuf-compiler \ libhdf5-dev \ libgoogle-glog-dev \ git \ libboost-all-dev \ wget \ cmake \ build-essential && \ rm -rf /var/lib/apt/lists/* # 清理apt缓存,减小镜像体积 WORKDIR /src RUN git clone --depth 1 https://github.com/CMU-Perceptual-Computing-Lab/openpose.git # 浅克隆,加快速度 WORKDIR /src/openpose/3rdparty # 删除自带的caffe和pybind11,替换为OpenPose适配的版本 RUN rm -rf caffe pybind11 && \ git clone --depth 1 https://github.com/CMU-Perceptual-Computing-Lab/caffe.git && \ git clone --depth 1 https://github.com/pybind/pybind11.git WORKDIR /src/openpose/build # 修正CMake参数,启用Python和OpenCV,指定CPU模式 RUN cmake .. \ -DBUILD_CAFFE=ON \ -DBUILD_PYTHON=ON \ -DGPU_MODE=CPU_ONLY \ -DUSE_OPENCV=ON # 并行编译,用当前容器的CPU核心数,避免64核导致资源耗尽 RUN make -j$(nproc) && make install
关键修改点说明
- 指定Ubuntu版本:用
ubuntu:20.04而不是默认的latest,避免后续Ubuntu大版本更新带来的依赖兼容性问题。 - 修正CMake参数:把
BUILD_python改成BUILD_PYTHON,-USE_OPENCV=ON改成-DUSE_OPENCV=ON——CMake变量是大小写敏感的,必须严格匹配OpenPose的定义。 - 替换Caffe仓库:改用CMU官方适配的Caffe fork,这个版本已经修复了MKL相关的缩进问题,不会出现编译错误。
- 添加python3-dev:编译Python绑定需要Python的头文件,这个依赖之前缺失了。
- 优化镜像构建:把所有apt安装命令合并成一个RUN,减少镜像层数;添加
--no-install-recommends和清理apt缓存,减小镜像体积;用-j$(nproc)自动适配CPU核心数,避免硬编码64导致的资源过载。
这样修改后,你应该能看到CMake输出里BUILD_PYTHON: ON和USE_OPENCV: ON,而且Caffe编译也不会再出现缩进相关的错误了。
内容的提问来源于stack exchange,提问作者Ankit Kumar
相关产品推荐
相关产品推荐

