referência
Introdução ao ambiente de desenvolvimento
PC host: instalado com ubuntu22.04 (outros também podem ser consultados)
Placa de desenvolvimento: rock 5a com chip rk3588s
Instale o Docker na máquina host
O Docker tem a função de isolar o ambiente de desenvolvimento. Para facilitar a troca de ambientes de desenvolvimento e evitar danos ao ambiente estável do host durante a configuração do ambiente, optamos por utilizar o docker para trabalhos de desenvolvimento, evitando assim o caos ambiental ao desenvolver dois ou mais projetos ao mesmo tempo.
Este artigo não apresentará em detalhes os princípios específicos e o uso do Docker, ele pode ser imaginado como um software de máquina virtual, como o VMware instalado no Windows, com a imagem do sistema correspondente em execução. Acontece que a operação é mais conveniente, mais leve e mais adequada para operações de linha de comando. Para detalhes consulte: Docker
O que precisa ser observado é o conceito de containers, que são as unidades básicas de funcionamento do sistema .
- Primeiro, execute o seguinte comando no sistema Ubuntu para instalar o Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Use o seguinte comando para verificar o status do Docker. Se o resultado da execução for o seguinte, isso prova que o serviço Docker está funcionando normalmente:
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
- Se não funcionar com sucesso, você pode executar o seguinte comando para abri-lo e configurá-lo para ser executado automaticamente na inicialização.
sudo systemctl start docker
或
sudo systemctl restart docker #打开docker
sudo systemctl enable docker #设置开机自动启动Docker
- Extraia a imagem do sistema (aqui estamos extraindo a imagem da versão ubuntu20.04)
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
- Iniciar um contêiner com a imagem ubuntu20.04 pode ser imaginado como a criação de uma máquina virtual:
sudo docker run -it --name rknn -v /data:/data ubuntu:20.04 /bin/bash
Entre eles, "-name rknn" significa que o contêiner é denominado rknn. "-v /data:/data" é usado para montar o diretório /data da máquina física no diretório /data do contêiner virtual docker para realizar o sistema de arquivos das duas máquinas. Compartilhamento (para adicionar um diretório compartilhado a um docker em execução, consulte: docker adiciona mapeamento de diretório (diretório de montagem) a um contêiner iniciado ). O parâmetro "-it" indica que ele está alocado e reside no terminal de contêineres. "ubuntu:20.04" é a imagem do sistema usada pelo contêiner e "/bin/bash" é o interpretador de shell usado pelo sistema.
- Saia e entre no docker.
Após a execução bem-sucedida, você entrará no terminal do contêiner do docker. O comando executávelexit
sai do contêiner e retorna ao sistema da máquina física.
Execute o comando na máquina físicasudo docker ps
para visualizar os contêineres em execução.
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
612c918d5027 ubuntu:20.04 "/bin/bash" 3 weeks ago Up 3 weeks rknn
Se houver contêineres que não estejam em execução, você poderá sudo docker ps -a
visualizá-los por meio de comandos.
Ao entrar no contêiner do docker novamente, você não precisa executar novamente o comando docker run, mas pode usar o comando docker exec para entrar.
sudo docker exec -it 612c918d5027 /bin/bash
Entre eles, “612c918d5027” é o ID do contêiner existente. (Se houver um contêiner que não esteja em execução, você precisará executar "docker start <container id>" primeiro.)
Claro, você pode especificar o usuário e o diretório de trabalho correspondente, porque ainda não criamos o usuário e o diretório inicial correspondente, que será apresentado posteriormente.
- Configurar janela de encaixe
- 安装权限管理工具
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
Neste momento, podemos entrar no contêiner docker a partir da máquina física, especificando o nome de usuário e o diretório inicial correspondente, como segue
dengml@dengml-SER:~$ sudo docker exec -it -u dengml -w /home/dengml 612c918d5027 /bin/bash
[sudo] dengml 的密码:
dengml@612c918d5027:~$
Construir ambiente de desenvolvimento rknn
- Extraindo o código no github (realizado no docker)
Primeiro, usamos ssh para obter o código do GitHub (você também pode usar http, mas é mais lento?) O primeiro passo é configurar a chave ssh.
- Configure a chave ssh e
execute o seguinte comando localmente para gerar e obter a chave ssh.
dengml@612c918d5027:~$ ssh-keygen -t rsa -C "[email protected]"
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 [email protected]
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= [email protected]
Cole a chave obtida acima no github:
abra e faça login no site "github.com", clique no seu avatar no canto superior direito. Clique no botão de configuração conforme a seguir
e, em seguida, clique nos botões "Chaves SSH e GPG" e "Nova chave SSH".
Preencha o título e a chave que você acabou de obter na caixa pop-up e, por fim, clique no botão "Adicionar nova chave". A
adição final bem-sucedida é a seguinte:
Depois de configurar a chave ssh, você pode extrair o código e obter o armazém de desenvolvimento da Rockchip rknn através do seguinte comando.
dengml@612c918d5027:/data/ubuntu/rockpi$ git clone [email protected]: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
- Instale pacotes básicos necessários para desenvolvimento
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
Entre eles, o virtualenv é usado para isolar o ambiente python, para que vários ambientes python possam ser instalados em um sistema. Ao alternar, você só precisa executar comandos. É muito conveniente. Você pode simplesmente entendê- source <对应python环境名称>/bin/activate
lo e aprender enquanto o usa.
- Instale o ambiente python necessário, pois a documentação oficial recomenda o uso do ambiente de desenvolvimento python3.8 no sistema ubuntu20.04.Para melhorar a eficiência do desenvolvimento e evitar reinventar a roda, instalamos o ambiente de desenvolvimento python3.8.
Crie um ambiente python com o nome de ambiente “venv” para python3
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
Após a conclusão da criação, um diretório chamado "venv" será formado no diretório.
Mude para o ambiente python recém-criado.
dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ source venv/bin/activate
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$
Neste momento, haverá um prefixo (venv) na frente dele, indicando o ambiente python atual.
De acordo com a introdução oficial, as dependências necessárias para instalar o python3.8.
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ pip3 install -r doc/requirements_cp38-1.5.0.txt
Pode haver erros durante o processo de instalação, como segue:
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.
A razão provável é que, como as partes da versão coincidem, a versão no ambiente atual é muito alta e não atende aos requisitos da versão do pacote de software nos documentos oficiais. A solução é desinstalar primeiro o pacote pip correspondente e instalar o pacote correspondente que atenda aos requisitos de versão da seguinte forma:
pip3 uninstall typing-extensions
pip3 install -v typing-extensions==3.7.4
Se você encontrar falha ou lentidão na instalação do pip devido à conexão de rede, provavelmente porque a fonte do pip não está na China, basta adicionar o parâmetro -i após a instalação do pip:
pip3 install -v typing-extensions==3.7.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
Finalmente, instale o pacote de desenvolvimento oficial rknn da Rockchip correspondente ao python3.8 fornecido pela rockchip.
pip3 install ../../../packages/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
Testes ambientais
(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
Abra o result.jpg final gerado.
Em seguida, transplante o modelo para a placa de desenvolvimento e execute-o.