terça-feira, 17 de dezembro de 2024

MILK-V - TDL - UTILIZANDO QT IDE PARA PROGRAMAR - OBJECT DETECT - RISC OU ARM


A construção (Build) de programas com C ou C++ para o dispositivo Milk-V Duo/S é bem explicada pelos exemplos. No entanto, embora o processo explicado nos exemplos seja bom para prova de conceito, eu realmente quero o conforto e a conveniência fornecidos pelo meu IDE.
(Tradução, adaptações, acertos e testes)

ABSTRACT

Esta postagem explica como você pode configurar o QtCreator para importar um aplicativo TDL C++, implantá-lo (Deploy) em um dispositivo Milk-V Duo/S

REQUISITOS

Uma máquina de desenvolvimento Linux funcional (foi utilizado WSL2 com UBUNTU 24)
Configuração de acesso ssh ou similar.

1 Baixando o SDK e Toolchain , bem como o QTcreator

Primeiro clone o SDK e TOOLCHAIN  e então compile, temos que ver como é com linha de comando.

Introdução

Cvitek fornece algoritmos de integração TDL para reduzir o tempo necessário para o desenvolvimento de aplicativos.
Essa arquitetura realiza o algoritmo exigido pelo TDL, incluindo seu pré e pós-processamento, e fornece uma interface de programação unificada e conveniente.
Atualmente, o TDL SDK inclui detecção de movimento, detecção de rosto, reconhecimento de rosto, rastreamento de rosto, detecção de pedestres, segmentação semântica, reconhecimento de placas, detecção de placas, reconhecimento ao vivo, reconhecimento ao vivo IR, detecção de bebês, detecção de choro, detecção de atitude, detecção de gestos, reconhecimento de gestos e outros algoritmos.

TDL SDK Software Development Guide
YOLO Development Guide

O programa TDL-SDK precisa ser compilado de forma cruzada no ambiente Linux do host do PC, como o sistema Ubuntu 22.04.

Atenção, colocar última IMG no seu MILK-V

Releases · milkv-duo/duo-buildroot-sdk-v2

Baixar conjunto de ferramentas e compilação

Baixe o código fonte do TDL-SDK

git clone https://github.com/milkv-duo/duo-tdl-examples.git


Prepare ambiente para compilação (Build)

cd duo-tdl-examples
source envsetup.sh

Select Product:
1. Duo (CV1800B)
2. Duo256M (SG2002) or DuoS (SG2000)



Compile sample_vi_od

cd sample_vi_od
make


Veja o código executável gerado


Instalando QT
sudo apt install -y qtcreator qtbase5-dev qt5-qmake cmake

Veja este link

2 Importe a pasta TDL para dentro do QtCreator

Inicie sempre o QtCreator desta forma

ubuntu@DESKTOP-UHGFA4M:~/duo-tdl-examples$ source envsetup.sh script_dir: /home/ubuntu/duo-tdl-examples Select Product: 1. Duo (CV1800B) 2. Duo256M (SG2002) or DuoS (SG2000) Which would you like: 2 Select Arch: 1. ARM64 2. RISCV64 Which would you like: 2 CHIP: CV181X ARCH: riscv64 ~/duo-tdl-examples ~/duo-tdl-examples ~/duo-tdl-examples Environment is ready. ubuntu@DESKTOP-UHGFA4M:~/duo-tdl-examples$ qtcreator



 





Desta forma as variáveis de ambiente ficarão memorizado pelo QT.

No Qt, selecione "File" → "New Project" → "Import Project" na barra de menu principal. Ele pode se mover entre as versões, mas você deve acabar com um diálogo semelhante à imagens abaixo:


Aponte então para 



Você terá esta imagem final.

3 Chamando Scripts de dentro do QT

Mas como compilar um programa ? Em linha de comando você entra na pasta do programa e executa make

cd sample_vi_od
make


Vamos fazer o mesmo dentro do QtCreator, vá no Menu Lateral "Projects" e então em "Build"

Altere "Build Directory" para

/home/ubuntu/duo-tdl-examples/sample_vi_od

Altere "Build Steps" para 

make -j4 in /home/ubuntu/duo-tdl-examples/sample_vi_od


Ao clicar no ícone "Build" (martelo) (abaixo, canto esquerdo), o "make" será chamado.

Abra o exemplo sample_vi_od e altere os #include para os seguintes caminhos.

#include "../../duo-tdl-examples/include/tdl/cvi_tdl.h"
#include "../../duo-tdl-examples/include/tdl/vi_vo_utils.h"
#include "../../duo-tdl-examples/include/tdl/sample_utils.h"
#include "../../duo-tdl-examples/include/tdl/middleware_utils.h"
#include "../../duo-tdl-examples/include/tdl/core/utils/vpss_helper.h"
#include "../../duo-tdl-examples/include/tdl/cvi_comm.h"
#include "../../duo-tdl-examples/include/system/rtsp.h"
#include "../../duo-tdl-examples/include/system/sample_comm.h"

Deve haver um modo mais fácil, mas vou deixar isto para você descobrir. 

Com a alteração dos caminhos das pastas no "#include", o QT poderá então fazer o AUTOCOMPLETE.


TEM-SE AGORA  O AUTOCOMPLETE 🎉 🥳

4 Crie um 'Dispositivo'  (Device)

O QtCreator entende vários tipos de dispositivos: Desktop, celulares e dispositivos embarcados, para citar alguns. 'Dispositivos' contêm informações sobre como implementar um binário e como se conectar ao dispositivo. Criaremos um dispositivo referente ao Milk-V Duo/S'.

Abra a caixa de diálogo 'Preferences' novamente. Agora você já deve estar familiarizado com como fazer isso. Clique

  1. Devices
  2. A aba "Devices".
  3. "Add…"

como na imagem abaixo.

Navegando para 'Adicionar…' novo dispositivo.
Navegando para 'Adicionar…' novo dispositivo. 🔍

Na caixa de diálogo pop-up, conforme mostrado na imagem abaixo, clique

  1. "Remote Linux Device"
  2. "Start Wizard"
Inicie o assistente para criar um novo dispositivo Linux remoto.
Inicie o assistente para criar um novo dispositivo Linux remoto. 🔍

Agora será apresentada uma caixa de diálogo semelhante à da figura abaixo .

  1. Insira um nome que você ache adequado. Já que estamos montando uma placa Milk-V Duo, 'Milk-V Duo' é um ótimo nome, eu acho. Muito melhor que "BeagleBone(r) Black Industrial", pelo menos.
  2. Insira o endereço IP ou nome do host. Supondo que você tenha configurado conexões ssh  insira 'milkvduo'
  3. Digite a porta, sua placa está escutando. A menos que você tenha mudado deliberadamente a configuração ssh na placa , digite 22. 
  4. Insira o usuário com o qual você quer fazer login. Para placas pristine, é 'root'. Se você alterou isso, consulte o item 3, frase 3 acima.
  5. Por fim, clique em "Next"
Insira detalhes para o novo dispositivo. O nome do host usando um nome de host pressupõe que você tenha um servidor DNS ou um .ssh/config apropriado
ILUSTRATIVO
Insira detalhes para o novo dispositivo. Nome do host usando um nome de host "pressupõe" que você tenha um servidor DNS ou um .ssh/config apropriado 🔍

ILUSTRATIVO

Agora você será presenteado com a possibilidade de implantar chaves para seu Milk-V Duo como na imagem abaixo. Não faça isso. Eu assumo que você já fez isto , então simplesmente clique em "Next".

Não preencha nenhum detalhe. Basta clicar em 'Próximo'
Não preencha nenhum detalhe. Basta clicar em 'Próximo' 🔍

Após clicar em "Next", o QtCreator testará a conexão com seu novo 'Device' e, eventualmente, você verá algo semelhante às imagens abaixo (terceira e quarta). Se você vir algo que pareça "sem sucesso", tente desligar e ligar o computador novamente e começar tudo de novo. Vamos supor que você está com sorte e simplesmente clicar em "Close"

Meu Milk-v Duo/S estava no IP 192.168.100.128


QtCreator testando conectividade. Veja todos os 'found's. Isso está ótimo!
QtCreator testando conectividade. Veja todos os 'found's. Isso está ótimo! 🔍

Agora você está pronto para criar um 'kit' 🥳

Finalmente é hora de executar o programa no seu Milk-V Duo/S. 

Navegue até a configuração de implantação do seu projeto.

Navegue até a configuração de implantação do seu projeto. 🔍
  1. Clique em "Projects"
  2. Selecione o projeto em que estamos trabalhando.
  3. Selecione a opção relevante "Run" 

Isso deve abrir algumas configurações na janela principal, como na imagem abaixo:

Exclua todas as etapas de implantação existentes.
Excluir todas as etapas de implantação existentes. 🔍

Você precisa excluir todas as etapas de implantação existentes. No exemplo da imagem acima, há duas etapas de implantação existentes:

  • "Kill current application instance". Veja ①.
  • "Deploy files". Veja ①.

Você pode excluir essas etapas clicando no 🞫 à direita, veja ➁, mas por algum motivo foi decidido ocultá-las até que você passe o mouse lá, então mova seu mouse para as áreas marcadas com ➁ e os 🞫es aparecerão (veja ➂). Clique nos 🞫es e vá embora com essas etapas de implantação irritantes.

Agora, adicionaremos nossa própria etapa de implantação. Clique em "Add Deploy Step", selecione "Custom Process Step" e preencha os detalhes relevantes como na imagem abaixo:

Criar nova etapa de implantação (Deploy) 🔍
Alterado

  1. Entrar /usr/bin/scp como "Command"
  2. Entrar -O sample_vi_od root@192.168.100.29:/root como "Arguments"
  3. Entrar %{buildDir} como "Working directory"

Eventualmente, seu comando inteiro, veja ➃, deve ficar assim: scp -O sample_vi_od:. Vamos dividir isso:

scp
Este é o utilitário de linha de comando que executará a cópia do seu executável da sua máquina de desenvolvimento para o seu Milk-V Duo/S
-O
Este sinalizador diz scp para usar um protocolo mais antigo. Isso pode ou não ser estritamente necessário dependendo do seu Milk-V Duo/S.
sample_vi_od
Este é o nome do executável que será copiado para o Milk-V Duo/S.
sample_vi_od
root@192.168.100.29:/root
Este é o host e o caminho para onde queremos copiar o executável.

Vários desses valores podem ser extraídos do kit ou Build system usando o sistema de substituição de variáveis ​​do QtCreator, mas por enquanto isso está mais claro e fácil de entender. Usar variáveis ​​é deixado como um exercício para o leitor.

Agora é hora de configurar a execução real do binário no seu Milk-V Duo/S. Este é o passo "Run" e vamos configurar essa linha na imagem abaixo .

  1. Marque a opção "Use this command instead"
  2. Digite `/root/sample_vi_od` como "Executable on host"
  3. Digite `/root` como "Working directory"

e deixe todo o resto como deveria estar. E isso é tudo. Agora você configurou o QtCreator para Build, Deploy.

🎉 🥳

Clicamos ansiosamente **RUN e olhamos para a saída do aplicativo na visualização de relatório e vemos a saída na imagem abaixo:

SCP funcionou!


O que aconteceu? Você pode fazer login no seu Duo e verificar se o arquivo definitivamente está lá.

Executou, sinal que compilou :)

Parabéns! Você configurou o QtCreator para Build, Deploy em aplicativos TDLpara e no seu Milk-V Duo/S

Se você tiver alguma dúvida, comentário ou correção, por favor, deixe-me uma mensagem usando o formulário abaixo. Obrigado pela leitura!

5 Notas

Abrindo projetos antigos


**Olhar sempre Milk Password Prompt, principalmente quando fizer o "Deploy"


Atenção (WSL2)

For users with old(ish) WSL2 Ubuntu installation who experiencing Can't open display error, the easy fix is:

wsl --unregister ubuntu
wsl --install -d ubuntu
wsl --update

Run Ubuntu --> register your user name and password, then:

# Install X-service
sudo apt update
sudo apt install x11-apps
# Test
env | grep -i display
# Should return:
# WAYLAND_DISPLAY=wayland-0
# DISPLAY=:0
xeyes &
xcalc

A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES.