对于熟悉 c++ 的开发人员来说,前一篇文章将 deepstreamsamples 版容器的范例搬到本机上,再搭配 docker 路径映射方式就能轻松搭建开发环境。但这种方式只适用于 c / c++ 范例,并不适用于 deepstream 的 python 环境,因为还需要安装 gstreamer 的 gst-python 与 deepstream 的 pybinding 与两个元件。
我们可以在容器内安装这两个元件,但是前面提供的 docker 指令中使用 “--rm” 参数,一旦退出容器之后就会销毁这个调试好的环境,这对于使用来说是非常不方便的,因此必须做出调整,将调试好的环境保留下来,甚至于存成一个独立的镜像文件,就能方便日后的重复使用或移植工作。
1、将容器调整为 “后台运行” 执行:
在 ngc 官方提供的指令中使用 “--it” 与 “--rm” 是为了能快速启用容器,并且在使用完毕后删除容器以避免占用不必要的资源,现在我们来做以下调整:
将 “-it” 参数改成 “-id” 参数:这样虽然不会第一时间进入容器内执行,但是会让这个容器在后台运行,并且打印容器 id,后面在使用 “dockerexec” 指令来进入容器操作,这是个非常实用的方式,大家可以好好学习使用方法;
去除 “--rm” 参数:退出容器之后自动移除;
添加 “--name” 参数:为了便于管理,不需要去面对长达 12 码的容器编号,我们可以用这个参数去指定容器名称,方便后面的操作;
为了配合 python 的 iot 应用范例,建议选择 iot 版容器的适用性会比较高。
现在试着执行以下指令,创建一个要配置 python 开发环境的 deepstream 容器:
docker run -id --name=ds_python --net=host --runtime=nvidia -e display=$display -w /opt/nvidia/deepstream/deepstream -v /tmp/.x11-unix/:/tmp/.x11-unix -v ~/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources -v ~/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples nvcr.io/nvidia/deepstream-l4t:6.1-iot
执行之后,会发现命令终端并未进入容器里面,依旧在本机(容器外)的状态,现在执行 “docker ps” 指令,会看到如以下的状态:
这里显示有个名为 “ds_python” 的容器处于运行状态,但是我们还没有进入这个容器的操作环境中。
2、使用 docker exec 指令进入容器:
现在以 deepstream-l4t:6.1-iot 创建的 ds_python 容器已经在后台启动,我们只要使用 “docker exec” 指令就能进入容器内操作,请执行以下指令:
docker exec -it ds_python bash
这样就能进到容器里面。现在试试在容器内做些事情,例如创建一个目录、添加一个文件,然后执行 “exit” 退出容器,然后再执行前面的指令重新进入容器内,检查看看刚刚所做的修改应该还存在,这样就能确保我们为容器安装的内容可以保留。
3、重启系统之后的容器启动:
这种容器创建的方式,在系统重启之后还能保留前面的设定吗?重启一次系统就知道了,然后执行 “docker ps” 指令检查状态,发现看不到前面所创建的 ds_python 容器了,怎么办呢?
不用紧张,现在执行 “docker ps -a” 指令,就会发现这个容器依旧存在于背景资源中,只是没有启动而已,现在执行以下指令:
docker start ds_pythondocker ps
现在再重新执行下面指令,就能进入容器里:
docker exec -it ds_python bash
再检查看看前面所做的修改是否依然存在?现在就能确认这种方式能将容器的修改长期保留,是一种更加实在的用法。
4、为容器安装 python 开发环境:
现在可以在容器内按照 的 “how-to guide” 安装步骤,调试 deepstream 的 python 开发环境:
安装依赖库:
如果 jetson 的操作系统是 ubuntu 20.04(jetpack 5.0 以上),请执行以下的依赖库安装步骤:
apt install python3-gi python3-dev python3-gst-1.0 python-gi-dev git python-dev python3 python3-pip python3.8-dev cmake g++ build-essential libglib2.0-dev libglib2.0-dev-bin libgstreamer1.0-dev libtool m4 autoconf automake libgirepository1.0-dev libcairo2-dev
从 github 仓下载源码到指定目录:
cd sourcesgit clone https://github.com/nvidia-ai-iot/deepstream_python_appscd deepstream_python_appsgit submodule update --init
安装 gst-python
apt update apt-get install -y apt-transport-https ca-certificates -yupdate-ca-certificatescd 3rdparty/gst-python/./autogen.shmake && make install
安装 pybinding:
请参照如下链接:
现在就完成了 python 环境的配置。
5、测试 python 范例
要验证环境是否调试完成的最简单方法,就是执行一个最基础的 deepstream-test1 范例,请在容器内执行以下指令:
cd /opt/nvidia/deepstream/deepstream/cd sources/deepstream_python_apps/apps/deepstream-test1./deepstream_test_1.py ../../../../samples/streams/sample_720p.h26
正常运行会看到如下图的执行结果。
这样就表示 deepstream 容器的 python 开发环境已经安装成功。
6、重复使用调试好的容器:
接下来就是要将前面调试好的容器环境存储起来,以后就不需要每次调试一次环境。这部分分成三个阶段:
(1)临时性保存:
事实上前面使用 “-id” 指令之后,这个容器就会一直保留在背景中执行,即便重启系统后也是存在的,如同前面所提供的,只要执行以下指令就能重新进入这个容器:
sudo xhost +si:localuser:rootdocker start ds_python && docker exec -it ds_python bash
(2)储存成 docker 镜像:
现在需要在打开一个命令终端,使用 “docker commit ” 指令,将目前执行的容器存成一个镜像,请执行以下指令:
docker commit ds_python deepstream-l4t:6.1-python
现在执行 “docker images” 指令,可以看到多了一个 “deepstream-l4t:6.1-python” 镜像,如下图所示:
只要不重装系统或者删除这个镜像,那么这个镜像就会一直保留在系统里面,以后如果需要再次使用,只要执行以下指令即可:
sudo xhost +si:localuser:rootsudo docker run -it --rm --net=host --runtime nvidia -e display=$display -w /opt/nvidia/deepstream/deepstream -v /tmp/.x11-unix/:/tmp/.x11-unix -v ~/nvme/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources -v ~/nvme/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples deepstream-l4t:6.1-python
或者可以同时启动多个独立的 python 环境 deepstream 容器,如下指令:
sudo xhost +si:localuser:rootsudo docker run -id --name=ds_python2 --net=host --runtime nvidia -e display=$display -w /opt/nvidia/deepstream/deepstream -v /tmp/.x11-unix/:/tmp/.x11-unix -v ~/nvme/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources -v ~/nvme/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples deepstream-l4t:6.1-python
(3)导出成文件:
最保险的方式,就是将这个 deepstream-l4t:6.1-python 镜像导出成文件,自行保存好,这样即便系统重新安装后,也能直接从这个文件载入镜像,然后开启工作容器:
# 将镜像导出成文件sudo docker save deepstream-l4t:6.1-python -o jp50dp_ds61_python# 将文件载入成镜像sudo docker load -i jp50dp_ds61_python
现在,这个导出的 jp50dp_ds61_python 压缩文件,也能部署到其他 jetpack5.0 dp 所安装的 jetson 设备上使用,不需要在每台机器上重复调试 python 开发环境。
小米发布新一代笔记本,这一次有很大不同
谷歌应用程序恢复工具解决方案能够帮助用户找回丢失的文件
Stage模型深入解读
Windows注册表介绍
采集仪读取振弦传感器频率值不稳定怎么办
配置Python开发环境的DeepStream容器
广和通受邀出席2022年中国5G发展大会,携手中国电信加速赋能万物智联
带你快速了解感应式位置传感器是什么
一种新型数学方法,可遏制AI做出不道德的选择
锂离子电池作业原理及结构分析
太阳能LED街灯解决方案
二阶RC滤波器的传递函数表
键盘应用程序设计
vivo游戏嘉年华广州站收官:花样宠粉,游戏服务深入玩家
销售AGILENT16339A,AGILENT16092A,
中国工程院院士最新论文:我国海洋监测仪器&传感器仍在“卡脖子”
一文读懂C51单片机指针变量
Imagination推出面向ADAS和自动驾驶应用的多核IMG Series4 NNA
2008年绿色行动总结
vivoZ3体验 主打高性价比拍照表现算是中规中矩