A motivação começa com a necessidade em resolver um problema de logistica e de HardPower, Eu possui um Pi 3b+ comprado em 2020 com memoria 'ram' limitada e memoria em 'disco' curta de um cartão SD 8GB. Então eu trabalho em um ambiente bem controlado/limitado a onde não posso fugir do Escopo, um simples ap-get update/upgrade da distro do raspbian já lotaria meus 8GB. Ainda mais com libs de c, c++ que precisam ser buildadas e compiladas como no caso do Opencv para ser usado em Python
Enfrentando um ambiente tão Limitado** eu tive que optar pelo menos provalvel que seria instalar Docker e dentro dele criar outro ambiente Linux com tudo que necessitaria para Builda o Opencv, Python, Cmake, GCC7. que por incrivel que pareça colocar todo esse sistema em uma 'Bolha' em Docker só demanda 700M de disco. Coisa que se eu fosse fazer no PI direito daria uns 8GB+ só de pacotes para o PI rodar Atualizado.
$ git clone https://github.com/carlinhoshk/buildando_opencv_docker.git
# Abra o projeto e a pasta de instalação
$ cd buildando_opencv_docker/InstalarDocker
# Ou de um Curl direto no site oficial da Docker
$ curl -fsSL https://get.docker.com -o get-docker.sh
# Depois execute o arquivo
$ sudo sh get-docker.sh
# Quando a instalção termina adicione o Docker ao seu grupo de usuario meu caso carlinhoshk já que troquei o nome de usuario do pi
$ sudo usermod -aG docker [user_name]
# Exemplo
$ sudo usermod -aG docker carlinhoshk
$ sudo reboot
$ docker version
nesse momento não é para aparecer nenhum erro se apareceu mande um print do terminal e o modelo da placa em issues
Agora você precisa Aumentar a memoria do seu Pi para ele ter capacidade de buildar usando cmake para o opencv, eu já tentei varias vezes builda sem aumenta a memoria, mas sempre da erro em 96% <- confesso que quebrei muita cabeça até entender que era falta de memoria. Acho que como eu você não gosta muito de mexer nas configurações e ficar com medo de quebrar algo. mas como no meu caso eu fui Obrigado a modificar para atigir meu Objetivo. vou posta o comando para aumentar a memoria swap
# mudando a memoria de swap
# abra o aquivo
$ sudo nano /etc/dphys-swapfile
modifque colocando 512 onde está a seta vermelha e observe as 2 setas azuis que demonstram o comando para Salvar e Sair do editor nano: Ctrl+O | Ctrl+X
# reiniciando serviço
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
se você der o commando $free -m é para estar como o meu, agora sim você poderá dar procedimento a instalção da imagem opencv
Após você ter certeza que seu Docker está funcionando você precisa builda sua Imagem Docker, volte uma pasta ou abra novamente o repositorio
$ cd ../
# Agora builde a imagem passando ela no parametro
$ docker build -f Dockerfile.arm .
Nesse momento a imagem vai ser buildada no meu Pi 3b+ demorou em torno de 4 Horas a 6 Horas. eu aconselho realmente esperar tudo isso, mesmo quando parecer que travou só cheque depois de dar exatos 4 horas no minimo.
$ docker image list
# aqui é para aparecer suas duas imagem docker, uma de build e outra de execução
Em IMAGE ID o seu vai está diferente, como eu não dei uma TAG para minha imagem ela fica como none marcado em vermelho. mas é possivel usar o numero da TAG ( eu acho mais facil )
$docker run -it 7187a834a450 bash
Pronto lembrando que no Print acima eu passei o parametro --rm, no momento que eu fechar o container ele vai ser excluido. lembrando que a imagem vai continuar, Se você quiser deixar o container 'vivo' é só escrever o comentario $docker run -it 7187a834a450 bash
##Links e Documentação usada no processo: