我正在尝试使用来自码头集装箱的OpenVINO。我使用来自官方网站linux.html的docker文件
FROM ubuntu:18.04
USER root
WORKDIR /
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
# Creating user openvino
RUN useradd -ms /bin/bash openvino && \
chown openvino -R /home/openvino
ARG DEPENDENCIES="autoconf \
automake \
build-essential \
cmake \
cpio \
curl \
gnupg2 \
libdrm2 \
libglib2.0-0 \
lsb-release \
libgtk-3-0 \
libtool \
udev \
unzip \
dos2unix"
RUN apt-get update && \
apt-get install -y --no-install-recommends ${DEPENDENCIES} && \
rm -rf /var/lib/apt/lists/*
WORKDIR /thirdparty
RUN sed -Ei 's/# deb-src /deb-src /' /etc/apt/sources.list && \
apt-get update && \
apt-get source ${DEPENDENCIES} && \
rm -rf /var/lib/apt/lists/*
# setup Python
ENV PYTHON python3.6
RUN apt-get update && \
apt-get install -y --no-install-recommends python3-pip python3-dev lib${PYTHON}=3.6.9-1~18.04 && \
rm -rf /var/lib/apt/lists/*
ARG package_url=ARG package_url=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz
ARG TEMP_DIR=/tmp/openvino_installer
WORKDIR ${TEMP_DIR}
ADD ${package_url} ${TEMP_DIR}
# install product by installation script
ENV INTEL_OPENVINO_DIR /opt/intel/openvino
RUN tar -xzf ${TEMP_DIR}/*.tgz --strip 1
RUN sed -i 's/decline/accept/g' silent.cfg && \
${TEMP_DIR}/install.sh -s silent.cfg && \
${INTEL_OPENVINO_DIR}/install_dependencies/install_openvino_dependencies.sh
WORKDIR /tmp
RUN rm -rf ${TEMP_DIR}
# installing dependencies for package
WORKDIR /tmp
RUN ${PYTHON} -m pip install --no-cache-dir setuptools && \
find "${INTEL_OPENVINO_DIR}/" -type f -name "*requirements*.*" -path "*/${PYTHON}/*" -exec ${PYTHON} -m pip install --no-cache-dir -r "{}" \; && \
find "${INTEL_OPENVINO_DIR}/" -type f -name "*requirements*.*" -not -path "*/post_training_optimization_toolkit/*" -not -name "*windows.txt" -not -name "*ubuntu16.txt" -not -path "*/python3*/*" -not -path "*/python2*/*" -exec ${PYTHON} -m pip install --no-cache-dir -r "{}" \;
WORKDIR ${INTEL_OPENVINO_DIR}/deployment_tools/open_model_zoo/tools/accuracy_checker
RUN source ${INTEL_OPENVINO_DIR}/bin/setupvars.sh && \
${PYTHON} -m pip install --no-cache-dir -r ${INTEL_OPENVINO_DIR}/deployment_tools/open_model_zoo/tools/accuracy_checker/requirements.in && \
${PYTHON} ${INTEL_OPENVINO_DIR}/deployment_tools/open_model_zoo/tools/accuracy_checker/setup.py install
WORKDIR ${INTEL_OPENVINO_DIR}/deployment_tools/tools/post_training_optimization_toolkit
RUN if [ -f requirements.txt ]; then \
${PYTHON} -m pip install --no-cache-dir -r ${INTEL_OPENVINO_DIR}/deployment_tools/tools/post_training_optimization_toolkit/requirements.txt && \
${PYTHON} ${INTEL_OPENVINO_DIR}/deployment_tools/tools/post_training_optimization_toolkit/setup.py install; \
fi;
# Post-installation cleanup and setting up OpenVINO environment variables
RUN if [ -f "${INTEL_OPENVINO_DIR}"/bin/setupvars.sh ]; then \
printf "\nsource \${INTEL_OPENVINO_DIR}/bin/setupvars.sh\n" >> /home/openvino/.bashrc; \
printf "\nsource \${INTEL_OPENVINO_DIR}/bin/setupvars.sh\n" >> /root/.bashrc; \
fi;
RUN find "${INTEL_OPENVINO_DIR}/" -name "*.*sh" -type f -exec dos2unix {} \;
USER openvino
WORKDIR ${INTEL_OPENVINO_DIR}
CMD ["/bin/bash"]但是,如果我尝试使用以下行启动python程序:
from openvino.inference_engine import IECore它编写ModuleNotFoundError,没有名为“openvino”的模块。我尝试用这些命令来源文件setupvars.sh,但是没有帮助。
RUN /bin/bash -c "source /opt/intel/openvino/bin/setupvars.sh"
RUN source /opt/intel/openvino/bin/setupvars.sh我应该如何使用来自docker的openvino python应用程序?
发布于 2020-06-10 00:05:50
如果您正在构建Docker映像,并且试图在docker映像之外运行OpenVINO Python应用程序,它将无法工作。您可以创建Docker映像并以交互方式运行Docker映像,以在映像中执行Python应用程序。有关https://docs.docker.com/engine/reference/run/的更多信息,请参阅docker run。
在我的环境中使用时,您的Dockerfile中注意到了几个问题。在下面的更改和步骤之后,您应该能够导入openvino模块并运行Python应用程序:
在Dockerfile第34行中:
// Before:
apt-get install -y --no-install-recommends python3-pip python3-dev lib${PYTHON}=3.6.9-1~18.04 && \
// After:
apt-get install -y --no-install-recommends python3-pip python3-dev lib${PYTHON} && \在Dockerfile第36行中:
// Before:
ARG package_url=ARG package_url=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz
// After:
ARG package_url=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz在上面的更改之后,运行docker build . -t <image-name> (即对接构建)。( -t openvino-ubuntu)建立码头形象。如果成功,您将看到Successfully built bf2280a70ffd Successfully tagged openvino-<image-name>:latest。
然后与docker run -it <image_name>交互地运行映像(即docker运行-it openvino-ubuntu)。你会看到类似于:
[setupvars.sh] OpenVINO environment initialized
openvino@ce618ea2bc47:/opt/intel/openvino_2020.2.120$要验证Python能够从openvino模块导入IECore,请使用Python解释器进行测试:
openvino@ce618ea2bc47:/opt/intel/openvino_2020.2.120$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from openvino.inference_engine import IECore
>>> 若要运行/opt/intel/openvino/deployment_tools/inference_engine/samples/python,Python应用程序,请测试/opt/intel/openvino/deployment_tools/inference_engine/samples/python,中的一个示例应用程序,例如object_detection_sample_ssd.py
openvino@ce618ea2bc47:/opt/intel/openvino_2020.2.120$ python3 /opt/intel/openvino/deployment_tools/inference_engine/samples/python/object_detection_sample_ssd/object_detection_sample_ssd.py
usage: object_detection_sample_ssd.py [-h] -m MODEL -i INPUT [INPUT ...]
[-l CPU_EXTENSION] [-d DEVICE]
[--labels LABELS] [-nt NUMBER_TOP]
object_detection_sample_ssd.py: error: the following arguments are required: -m/--model, -i/--input发布于 2022-03-14 04:44:57
setupvars.sh所做的本质上是导出环境变量,具体而言,这些变量使OpenVINO正确工作:
openvino包(所有python源代码)。.so文件都可以通过系统动态链接器找到。source /opt/intel/openvino/bin/setupvars.sh修改当前bash进程的环境变量,执行命令行,随后从同一个bash解释器调用所有子进程(继承父进程环境变量)。
但是在Dockerfile中,运行指令以不同方式执行命令,每个命令都在单独的容器中执行,并且只在命令之间保存对图像的影响,对环境变量的任何修改都会丢失。
稍后,在构建了docker映像并尝试从它启动容器并在容器内使用openvino之后,在使用openvino之前,必须在控制台中运行source /opt/intel/openvino/bin/setupvars.sh。
但是,您可以通过将此命令放入docker映像中的/root/.bashrc中来避免这种繁琐的步骤,因此从容器调用的bash将自动执行它。这也是大多数openvino dockerfile所做的事情:
RUN echo "source /opt/intel/openvino/bin/setupvars.sh" >> /root/.bashrc顺便说一句,一个python包通常不应该依赖于为它正确工作所需的脚本,标准python包会将python源代码复制到标准位置,并且所有共享对象文件都使用RPATH/RUN_PATH来解决动态链接问题(w/o将这样的文件安装到/usr/lib中)。例如,如果您通过pip安装openvino,则不需要此步骤。
https://stackoverflow.com/questions/62277098
复制相似问题