Inteligencia ArtificialLinuxvisao computacional

Ubuntu, CUDA, OpenCV e Docker em um Dell Gaming 7000

Com o andar da carruagem, me vi obrigado a retomar minhas aventuras com visão computacional e inteligência artificial. Não estou nadando em dinheiro, então não pude comprar uma GTX1080, mas ainda assim estou muito satisfeito por ter adquirido um Dell Gaming 7000, que vem com uma placa de video GTX1050ti, me permitindo algumas brincadeiras interessantes.

Dell Gaming 15 7000

Falando um pouco do notebook, ele é espetacular! Lindo, robusto e atende perfeitamente às minhas necessidades. Com 8GB de RAM, i7 quad (com HT, aparecendo 8 núcleos) e a placa de video offboard, permite upgrades de hardware de maneira simples, apenas removendo a tampa embaixo do note, soltando 1 parafuso. Como nada é perfeito, duas coisas não me deixaram feliz; uma é o teclado com layout inglês (que estou me adaptando), a outra é que veio com o Windows. O segundo problema já foi sanado.

 

Ubuntu por quê?

Bem, a Dell vende desse notebook com Ubuntu nativo, mas em minhas surfadas pela Internet encontrei o menor preço do mesmo modelo na Submarino. Então, como vinha com outro sistema, decidi optar pelo caminho que me garantiria menos frustrações. E de fato, foi a melhor escolha, porque tive muitos problemas para conseguir instalar o Ubuntu. Primeiramente, o pendrive que eu estava utilizando provavelmente estava com problemas porque o espaço dele é de “3. alguma coisa GB”. Claro que um pendrive de 4GB não tem 4GB de espaço após colocar o sistema de arquivos, mas acredite, estava muito pequeno.

O outro problema foi em relação ao formato da tabela de partições. Quem compra notebooks de linha sabe o horror que é a tabela de partições. Tentei colocar o Linux junto ao outro sistema pra não jogar dinheiro pela janela, mas não foi possível. Bem, falta não vai fazer.

Na BIOS tive que fazer alguns ajustes, habilitando e ordenando os dispositivos de boot, trocando o modo de reconhecimento de disco para AHCI (estava em RAID) e desabilitando o UEFI, além de habilitar o modo de compatibilidade com ROMs padrão.

Após instalar o sistema operacional, instalei o KDE (meu desktop preferido) e então parti para a instalação do docker. Se desejar instalar o KDE também, siga os passos descritos em seguida, ou então pule diretamente para “Docker”.

Instalar o KDE no Ubuntu

Comece adicionando o repositório do Kubunt (backports), atualize e faça o upgrade (não se preocupe, continuará a ser Ubuntu, apesar de que até o splash screen mudará):

Em dado momento será perguntado sobre o gerenciador de sessão. Mantenha o lightdm. Pouco depois, dará um erro durante a instalação. Aplique a correção:

Ao término, reinicie o sistema. Quando chegar na tela de login, escolha “Plasma” na bolinha branca no canto direito superior à caixa de senha. Antes que eu me esqueça, durante a instalação pode aparecer também uma janela de erro, apenas cancele, ela não voltará a aparecer.

Docker

Recomendo muito que os setups sejam feitos em docker. Se algo der errado, joga-se fora e faz-se outro. Se tudo der certo, faz-se backup. Vamos iniciar então a configuração por aí.

Instalação do Docker

Sem enrolação, vamos ao comandos necessários para instalar a versão mais atualizada do Docker:

Depois de instalado, podemos configurar o sistema para permitir que um usuário comum possa utilizá-lo. Para tal:

Nesse caso específico, você deverá reiniciar o Linux (não se espante).

Criação do container

Agora, vamos baixar a imagem docker do Ubuntu para criarmos nosso container. Para tal:

Já podemos criar nosso container:

Com esse comando, criamos um container chamado opencv e definimos seu hostname como opencv. Isso “tem” que ser feito na criação, depois de criado só é possível renomear o container, não mais o hostname.

Além disso, exportamos o diretório /dev, pois será necessário ter acesso aos recursos da placa de video e o container trabalha com isolamento de processos, por padrão não seria possível utilizar o recurso de video sem esse comando.

Configurações do sistema no container

Quando você executar o comando acima, já estará conectado ao terminal do container. A partir de agora iniciaremos a configuração do sistema. Comece atualizando os repositórios e instalando alguns pacotes necessários:

Se desejar fazer mais alguma configuração no sistema, aproveite o momento, depois siga para o próximo tópico

Instalar CUDA no Ubuntu (no container)

Depois de instalado, devemos baixar alguns pacotes para a configuração do CUDA. Para esse artigo, utilizei a versão cuda-repo-ubuntu1604_9.1.85-1_amd64.deb . Se não quiser baixar diretamente do link do artigo ou se preferir ver se tem uma versão mais atual, siga esse link.

Será necessário a biblioteca libcudnn também. Essa, somente fazendo um cadastro no site da NVidia, através desse link.

Eu instalei a runtime (cuDNN v7.1.1 Runtime Library for Ubuntu16.04 (Deb)), mas baixei também a dev.

Agora, instale o primeiro pacote (cuda-repo):

Após a instalação do pacote será neessário adicionar  a chave do repositório ao sistema (tudo isso no container, não se esqueça):

Ubuntu, CUDA, OpenCV

Seguindo a orientação da instalação do pacote:

Atualize seus repositórios mais uma vez e então instale o cuda:

Tem bastante coisa pra baixar. Talvez seja a hora de tomar uma ducha pra relaxar e ver se terminou quando você voltar.

Após, instale o CUDNN:

Pronto, finalizamos a primeira etapa.

Compilar o OpenCV

Acredite em mim, é mais fácil e mais garantido fazer sua própria compilação, e não apenas pelo fato de que o OpenCV estará customizado para seu hardware, mas tamgém porque o Leonardo Lontra (que escreve código para a mainline do OpenCV) disponibilizou um script mágico que além de fazer a compilação e instalar as dependências, ainda faz cross-compiling e ao final gera o pacote para instalação! Facilitou a vida de todo mundo!

Clonar o github do projeto

Vamos clonar o repositório do projeto OpenCV do Lontra:

Depois, entre no diretório criado (build_opencv) e execute:

Esse script instalará as dependências automaticamente e executará o processo de compilação ao final. Por fim, mostrará o nome do pacote gerado para instalação.  O script automaticamente utiliza todos os núcleos disponíveis no sistema para fazer a compilação, acelerando o processo consideravelmente. Interrompi e executei de novo, ele retoma desde o princípio, validando o que já havia sido compilado.

Ubuntu, CUDA, OpenCV

 

 

Ao término da compilação, essa mensagem será exibida:

Ubuntu, CUDA, OpenCV

Instale o pacote no container, conforme indicado na mensagem final:

 

Após esse longo processo, podemos seguir adiante com um teste:

Não retornou nada? Ok, então está tudo certo, vamos abrir a webcam com o OpenCV. Mas antes, temos que instalar mais dois pacotes:

Utilize esse código:

Depois de iniciado, interrompa com Ctrl+C e veja imagem teste.jpg no diretório onde o script foi executado. Para copiá-lo para fora do container, use docker cp ou então instale o servidor ssh, lembrando de reconfigurar a porta do servidor em /etc/ssh/sshd_config para 9000.

Bem, ainda resta configurar a dlib e o TensorFlow, mas vou deixar para outro artigo para não ficar muito grande.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR

https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR

https://www.facebook.com/groups/raspberrybr/
Orange Pi BR

https://www.facebook.com/groups/OrangePiBR/
Odroid BR

https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR

https://www.facebook.com/groups/SistemasEmbarcadosBR/

Sistemas Eletrônicos

https://www.facebook.com/groups/544679592355388/

Projetos Arduino | Eletrônica

https://www.facebook.com/groups/projetosarduinoeletronica/

ESP8266 e ESP32

https://www.facebook.com/groups/ESP8266BR/

ARM Brasil

https://www.facebook.com/groups/508153815944410/

MIPS BR

https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte

https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!