赞
踩
宿主机 HostPC: 装有ubuntu22.04(其它亦可参考)
开发板:rock 5a with rk3588s 芯片
Docker具有隔离开发环境的作用,为了方便开发环境的切换,避免环境配置时破坏主机稳定的环境,我们选择使用docker来进行开发工作,这样避免了同时开发两个或者多个项目时环境的混乱。
关于Docker的具体原理及用法本文不做具体介绍,可以想象成windows上安装的VMware等虚拟机软件,上面运行对应系统的镜像。只不过操作更加便捷,更轻量化,更加适合命令行操作。具体可以参考:Docker.
需要注意的是关于容器的概念,即系统运行的基本单位。
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
使用以下命令来查看Docker的状态,如果执行结果如下,则证明Docker服务正常运行:
dengml@dengml-SER:/data/ubuntu/rockpi$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-07-27 21:26:09 CST; 1 week 6 days ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 43420 (dockerd)
Tasks: 23
Memory: 93.6M
CPU: 3min 27.381s
CGroup: /system.slice/docker.service
└─43420 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
如果未成功运行,可以执行以下命令打开,和设置开机自动运行
sudo systemctl start docker
或
sudo systemctl restart docker #打开docker
sudo systemctl enable docker #设置开机自动启动Docker
sudo docker pull ubuntu:20.04
# 查看本地镜像
$ sudo docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 14be0685b768 7 weeks ago 72.8MB
hello-world latest 9c7a54a9a43c 3 months ago 13.3kB
sudo docker run -it --name rknn -v /data:/data ubuntu:20.04 /bin/bash
其中”–name rknn“表示该容器命名为rknn,”-v /data:/data“的作用是将物理机的/data目录挂载到docker虚拟容器的/data目录上,实现两机器文件系统的共享(正在运行的docker添加共享目录可以参考: docker对已经启动的容器添加目录映射(挂载目录))。”-it“参数表示分配并驻留在容器终端。 ”ubuntu:20.04“为该容器用到的系统镜像,”/bin/bash“为系统用到的shell解释器。
执行成功后将进入该docker容器的终端。可执行exit
命令退出容器,回到物理机系统。
在物理机中执行 sudo docker ps
命令查看正在运行的容器。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
612c918d5027 ubuntu:20.04 "/bin/bash" 3 weeks ago Up 3 weeks rknn
如果有在未运行状态的容器,可以通过sudo docker ps -a
命令查看。
再次进入该docker容器的时候不需要重新执行docker run 命令,而可以采用 docker exec 命令进入
sudo docker exec -it 612c918d5027 /bin/bash
其中”612c918d5027 “为已存在的容器的id。(如果有在未运行状态的容器,需要先执行”docker start <容器的id>“)
当然可以指定用户及对应的工作目录,因为我们还没创建用户及对应家目录,放在后面介绍。
- 安装权限管理工具 apt install sudo - 添加普通用户并指定其家目录及对应的默认解释器 adduser --home /home/dengml --shell /bin/bash dengml - 修改用户密码 passwd dengml - 安装文本编辑工具vim apt install vim - 编辑/etc/sudoers文件 chmod 777 /etc/sudoers #添加编辑权限 vim /etc/sudoers #在”root ALL=(ALL:ALL) ALL“下添加”dengml ALL=(ALL:ALL) ALL“ chmod u-w /etc/sudoers // 去除可写权限 - 登陆到dengml用户 su dengml - 安装自动补全工具 apt-get install -y bash-completion apt update source /usr/share/bash-completion/completions/* - 安装网络工具 apt install iputils-ping
此时我们从物理机进入docker容器的方法可以指定用户名及对应的家目录,如下
dengml@dengml-SER:~$ sudo docker exec -it -u dengml -w /home/dengml 612c918d5027 /bin/bash
[sudo] dengml 的密码:
dengml@612c918d5027:~$
首先我们使用ssh的方式在GitHub获取代码(也可使用http方式,不过更慢?),第一步需要配置ssh-key。
dengml@612c918d5027:~$ ssh-keygen -t rsa -C "dengml1996@163.com" Generating public/private rsa key pair. Enter file in which to save the key (/home/dengml/.ssh/id_rsa): Created directory '/home/dengml/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/dengml/.ssh/id_rsa Your public key has been saved in /home/dengml/.ssh/id_rsa.pub The key fingerprint is: SHA256:OW6GGqaLjp+zD+R4hq2tKXnocEJIktnk/tNEXgNdLFg dengml1996@163.com The key's randomart image is: +---[RSA 3072]----+ | . .+Eo. | | * ..o . | |+.o . o. | |+. o . o | |..o o S | |.* . o o . | |=oB = o + | |*Xo= + o | |X*B=o | +----[SHA256]-----+ dengml@612c918d5027:~$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAA***************xP0YX0= dengml1996@163.com
配置完成ssh-key后就可以拉代码,通过以下命令获取瑞芯微rknn的开发仓库
dengml@612c918d5027:/data/ubuntu/rockpi$ git clone git@github.com:rockchip-linux/rknn-toolkit2.git Cloning into 'rknn-toolkit2'... The authenticity of host 'github.com (20.205.243.166)' can't be established. ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts. remote: Enumerating objects: 475, done. remote: Counting objects: 100% (67/67), done. remote: Compressing objects: 100% (57/57), done. remote: Total 475 (delta 6), reused 66 (delta 6), pack-reused 408 Receiving objects: 100% (475/475), 630.23 MiB | 4.97 MiB/s, done. Resolving deltas: 100% (132/132), done. Updating files: 100% (140/140), done. dengml@612c918d5027:/data/ubuntu/rockpi$ ls rknn-toolkit2
sudo apt install virtualenv
sudo apt-get install python3 python3-dev python3-pip
sudo apt-get install libxslt1-dev zlib1g zlib1g-de
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0
sudo apt-get install libsm6 libgl1-mesa-glx libprotobuf-dev gcc
其中virtualenv是用来隔绝python环境,使一个系统内可以安装多个python环境,切换时候也仅仅需要执行 source <对应python环境名称>/bin/activate
命令即可,非常方便,可以仅作了解,边用边学。
因为官方文档在ubuntu20.04系统上推荐使用python3.8的开发环境,为提高开发效率,避免重复造轮子,我们安装python3.8的开发环境。
创建python3的环境名字为”venv“的python环境
dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ virtualenv -p /usr/bin/python3 venv
created virtual environment CPython3.8.10.final.0-64 in 68ms
creator CPython3Posix(dest=/data/ubuntu/rockpi/rknn-toolkit2/dengml, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, pkg_resources=latest, via=copy, app_data_dir=/home/dengml/.local/share/virtualenv/seed-app-data/v1.0.1.debian.1)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
创建完成后会在目录下形成一个名字为”venv“的目录
切换到刚创建的python环境
dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ source venv/bin/activate
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$
此时前面会有(venv)的前缀,表示当前所处的python环境。
根据官方介绍,安装python3.8 所需要的依赖。
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ pip3 install -r doc/requirements_cp38-1.5.0.txt
安装过程可能会有报错,如下:
ERROR: tensorflow 2.6.2 has requirement six~=1.15.0, but you'll have six 1.16.0 which is incompatible.
ERROR: tensorflow 2.6.2 has requirement typing-extensions~=3.7.4, but you'll have typing-extensions 4.7.1 which is incompatible.
大概原因是因为版本部匹配,当前环境里面的版本过高,不满足官方文档中对于该软件包版本的要求。解决方法可以先卸载掉对应的pip包,并安装满足版本要求的对应的包如下
pip3 uninstall typing-extensions
pip3 install -v typing-extensions==3.7.4
如果遇到pip因网络连接安装失败或者比较慢的情况,大概因为pip源不在国内,在pip安装后面添加 -i 参数即可即:
pip3 install -v typing-extensions==3.7.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
最终安装好rockchip提供的对应python3.8的瑞芯微的rknn官方开发包
pip3 install ../../../packages/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2/examples/onnx/yolov5$ ls
bus.jpg dataset.txt test.py yolov5s.onnx
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ cd examples/onnx/yolov5/
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2/examples/onnx/yolov5$ python3 test.py
......
......
......
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2/examples/onnx/yolov5$ ls
bus.jpg check3_fuse_ops.onnx onnx_yolov5_0.npy onnx_yolov5_2.npy test.py yolov5s.rknn
check0_base_optimize.onnx dataset.txt onnx_yolov5_1.npy result.jpg yolov5s.onnx
打开最终生成的result.jpg
接下来,将模型移植到开发板上运行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。