[Rock Pi] (2) Configuração do lado do host 3588 rknn e implantação do ambiente de desenvolvimento do docker

referência

Rockchip rknn-tookit2

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 .

  1. 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
  1. 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

  1. 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 dockersudo systemctl restart docker  #打开docker

sudo systemctl enable docker #设置开机自动启动Docker
  1. 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
  1. 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.

  1. Saia e entre no docker.
    Após a execução bem-sucedida, você entrará no terminal do contêiner do docker. O comando executável exitsai do contêiner e retorna ao sistema da máquina física.
    Execute o comando na máquina física sudo docker pspara 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 -avisualizá-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.

  1. 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

  1. 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
configuração da conta github
e, em seguida, clique nos botões "Chaves SSH e GPG" e "Nova chave SSH".
adicione a chave ssh ao github
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
adicione nova chave ssh
adição final bem-sucedida é a seguinte:
adicionar novo resultado chave
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

  1. 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/activatelo e aprender enquanto o usa.

  1. 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.
venv
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.
resultado final
Em seguida, transplante o modelo para a placa de desenvolvimento e execute-o.

Acho que você gosta

Origin blog.csdn.net/weixin_43328157/article/details/132198689
Recomendado
Clasificación