Ubuntu中利用Docker运行OpenPose具体使用方法
想看怎么安装Docker和Docker中安装openpose请看我另一篇文章:
Ubuntu从头开始使用Docker运行OpenPose
本文主要是介绍怎么在Docker中使用OpenPose的方法:
1. 包括怎么把数据传输给Docker
2. 怎么在python中使用ubuntu命令行
3. 怎么在系统中直接运行py文件
Docker中数据传输
Docker操作:
概念:
imagers:镜像
containers:容器
imagers(镜像)
本地镜像管理
- images:列出本地镜像
- rmi:删除本地一个或多少镜像,-f 为强制移除
- tag:标记本地镜像,将其归入某一仓库
- build:命令用于使用 Dockerfile 创建镜像
- history:查看指定镜像的创建历史
- save:将指定镜像保存成 tar 归档文件
- load:导入使用 docker save 命令导出的镜像
- import:从归档文件中创建镜像
# 查看所有镜像文件
docker images
显示为可执行的镜像文件。
容器(containers)
容器生命周期管理
- run:创建一个新的容器并运行一个命令
- start/stop/restart:启动、停止、重启容器
- kill:杀掉一个运行中的容器
- rm:删除一个或多个容器
- pause/unpause:暂停和恢复容器中所有的进程
- create:创建一个新的容器但不启动它
- exec:在运行的容器中执行命令,即没有连接容器,让容器直接执行命令。
容器操作
- ps:列出容器
- inspect:获取容器/镜像的元数据
- top:查看容器中运行的进程信息
- attach:连接到正在运行中的容器
- events:从服务器获取实时事件
- logs::获取容器的日志
- wait:阻塞运行直到容器停止,然后打印出它的退出代码
- export:将文件系统作为一个tar归档文件导出到STDOUT
- port:列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
如果要退出bash有2种操作:1)Ctrl + d 退出并停止容器;2)Ctrl + p + q 退出并在后台运行容器;
每次 执行docker run则生成一个容器(containers)
# 显示所有的容器,包括未运行的。
docker ps -a
# 启动容器mjsobrep/openpose
$ docker start a77194a1b7ed
# 连接到正在运行中的容器mjsobrep/openpose
$ docker attach a77194a1b7ed
Docker中文件使用:
Docker容器向宿主机传送文件
容器启动或关闭不影响文件传输
格式:
docker cp container_id:<docker容器内的路径> <本地保存文件的路径>
比如:
# 他会把容器中整个output文件夹拷贝到宿主机的out_data下
docker cp a77194a1b7ed:/openpose-master/output /home/zeven/PycharmProjects/qz/data
宿主机向Docker容器传送文件
格式:
docker cp 本地文件的路径 container_id:<docker容器内的路径>
比如:
docker cp /home/zeven/py/data/zp a77194a1b7ed:/openpose-master/input_data
python中执行Ubuntu命令行语言
subprocess模块
在python 中使用ubuntu的命令行
# command 为输入的命令行语句
def cmd(command):
print(command, "开始了")
subp = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
# 等待500秒不响应就推出
subp.wait(500)
if subp.poll() == 0:
print(subp.communicate()) # 输出返回的结果值
else:
print("失败")
print("结束了")
不进入docker,在容器外执行容器内的命令
# 删除openpose上次结果
sudo docker exec -it a77194a1b7ed /bin/bash -c 'rm -rf cb output/*'
# 运行openpose
sudo docker exec -it a77194a1b7ed /bin/bash -c './build/examples/openpose/openpose.bin --image_dir input_data/zp/ --write_keypoint_json output/ --no_display'
# 删除输入的数据
sudo docker exec -it a77194a1b7ed /bin/bash -c 'rm -rf cb input_data/*'
ubuntu中直接使用py文件
# cd到文件的目录
cd /home/zeven/PycharmProjects/qz
# 给执行的py文件权限
chmod a+x super_down_uphead.py
# 运行分类程序
python ./super_down_uphead.py
结果输出为json文件