Maix Bit Embarcado de baixo custo com inteligência ARTIFICIAL

A Maix bit é uma placa muito poderosa para quem busca trabalhar com reconhecimento e detecção de objetos e áudio, pois graça ao seu poderoso chip k201 que tem uma rede neural convolucional (CNN) em hardware, tem uma capacidade de reconhecer até 80 objetos com uma boa performance. Entretanto, é uma placa muito mistificada ainda principalmente no Brasil.

Aplicações

  • Automação Industrial;
  • Monitoramento;
  • Automação inteligente;
  • Classificação de objetos;
  • Reconhecimento de objetos.



Especificações

  • Voltagem de Trabalho: 1v8 ~ 3v3;
  • Consumo: 600mA
  • Tamanhos:
    • Sem câmera: 53,3mm x 25,4mm x 13,0 mm;
    • Com câmera: 53.3x 25.4 x 44,0 mm.
  • Temperatura de Trabalho: -30°C ~ 85°C;
  • Voltagem de entrada via USB: 4v8 a 5v2.



Periféricos

  • Microfone MSM261S4030H0 Integrado;
  • CPU:
    • RISC-V Dual Core;
    • 64bit;
    • Com FPU;
    • 400Mhz.
  • Conector 24P DVP;
  • Conector 24P 8bit MCU LCD;
  • Slot microSD integrado na placa;
  • LED RGB SMD integrado na placa;
  • SAR ADC de 12 bits até 18 canais;
  • 38 x GPIO;
  • 4x SPI
    • SPI0, SPI1 e SPI3 Suportam apenas o modo MASTER;
    • SPI2 Suporta apenas o modo “SLAVE”;
  • 3x I²S;
  • 3x I²C;
  • 3x UART;
  • PWM com duty cicle de 0% ~ 100%;
  • 3x TIMER;
  • WDT;
  • SHA256;
  • RTC;
  • SRAM;
  • APU.

Rede Neural Convolucional o que é?

A rede neural convolucional conhecida pelas siglas CNN do inglês Convolutional Neural Network, é um dos tipo mais popular de deep learning (Aprendizado profundo) que basicamente é um aprendizado por referência. Segundo o Artigo Understanding of a Convolutional Neural Network a CNN é composta por camada convolucional, camada não linear, camada de pool e camada totalmente conectada como na imagem abaixo:

Existe todo um conceito matemático por trás da CNN e que muito provavelmente vai acabar dificultando o aprendizado, mas bem resumidamente haverá uma entrada de dados e será feito diversas comparações como por exmeplo cor, iluminação, formato e comparação. Após tudo isso será dado uma saída com uma margem percentual de acerto, como o exemplo abaixo:

Exemplo de rede neural convolucional usada no maix bit em 3d
Print Autoral do Site cs.ryerson

A imagem acima não mostra o percentual, pois muito provavelmente já foi definido um valor padrão no algoritmo do site, esse mesmo conceito pode ser aplicado em projetos que utilizem a CNN como por exemplo reconhecer um carro com 92% de precisão.

Peculiaridades

O chip k210 tem um processador com dois núcleos de processamento com FPU integrado (processador para cálculos decimais), KPU (faz todo o processamento da CNN), periféricos de comunicação que são muito úteis para integrar outros periféricos, RTC e uma série de recursos muito bons. Entretanto existe um pequeno detalhe que para alguns desenvolvedores pode ser algo ruim que é a alimentação 3v3 e também 1v8, porém a placa em si trabalha com os 3v3.

Microprocessador usado no Maix bit

Vantagens do uso do Maix Bit

A placa Maix Bit é bastante completa o que não há necessidade do uso de hardware adicional para seu funcionamento completo, apenas conectar a câmera e fazer a conexão com a IDE Maixpy. Porém, a grande vantagem de fato é um núcleo dedicado para processar a CNN o que agiliza muito o processo de reconhecimento e classificação que da uma performance de detecção de até 80 objetos simultâneos, que é um valor surpreendente e que ganha de muitos processadores.

Maix bit

A placa tem um slote micro SD para colocar o arquivo .kmodel que é uma formatação do treinamento final em que o KPU irá se basear para fazer as detecções. No entanto, nos testes que foram feitos pode ser usado a própria memoria FLASH para salvar o modelo e indicar no código o caminho do arquivo.

Caso queria usar um cartáo micro SD, saiba que nem todos são compatíveis, para teste foi usado um cartão de 16gb classe 10 HC FAT32. A incompatibilidade/não reconhecimento do cartão é problema comum e pode está associada a vários fatores como:

  1. Má conexão;
  2. Cartão lento;
  3. Problemas com o binário instalado no kflash_gui;
  4. Cartão corrompido;
  5. Cartão queimado.

Existe diversos outros problemas que podem ocorrer mas esses são os principais, no primeiro teste o problema que ocorreu foi a 2 e 3, por isso nesse post será exposto exatamente o que funcionou de inúmeros testes de tentativa e erro. Felizmente a comunidade do Maix Bit já criaram uma tabela de testes com cartões e isso ajudou muito, veja a tabela abaixo:

Tabela de microSD suportado pelo Maix bit
Fonte: yuque

Mais um ponto positivo dessa placa é o microfone integrado em que o KPU (processador da CNN) consegue fazer reconhecimento de áudio, o que possibilita fazer também uma assistente virtual. Na verdade, se juntar o ESP8266 e os recursos que já tem no maix bit da para fazer um baita projeto de IoT.

Maix bit Periféricos

Pontos negativos do Maix Bit

Em geral. Essa placa vai ser encontrada com preços abaixo ou iguais a um Raspberry pi zero w, porém com um custo/beneficio inimaginável, se pensa em fazer um projeto com visão computacional e só enxerga o Raspberry, talvez seja mais viável pensar no uso do Maix Bit. No entanto, tem que ter em mente que é muito menos popular internacionalmente, principalmente no Brasil.

Gostou? Mas você está preparado?

Essa placa embora seja poderosa não é muito popular e por isso é difícil achar documentação ou projetos, sendo ideal apenas para quem já tem um conhecimento um pouco mais avançado e tenha capacidade de interligar pontos em inúmeras fontes diferentes.

Dimensões

Maix Bit é uma placa com uma capacidade de revolucionar ou o mercado de visão computacional assim como o Arduino revolucionou nos embarcados e raspbery pi os mini computadores, mas infelizmente/felizmente a referência de placa para desenvolvimento de projetos com CNN é a Jetson Nano que é uma ótima placa, porém, é grande e tem um preço mais elevado. No entanto, o Maix Bit tem o tamanho de um ESP32 Dev Module e um preço beirando os 160 reais já com o display e câmera.

Maix bit Câmera

Um grande ponto positivo é que a câmera usada nas placas são a Ov2640 que é a mesma usada em Arduinos, ESP32 e etc… O que facilita muito encontrar modelos específicos para cada projeto, até mesmo lentes no modelo M12.

Câmeras Ov2640 usadas no Maix bit

Problema com a Câmera do Maix bit

O kit que foi adquirido do Maix bit tem: display e câmera modelo M12. Mas a lente que vem na câmera veio com uma espécie de resina e não com vidro e por isso acabou criando uma região escura na imagem:

Problema com câmera do Maix bit
sensor.set_brightness(False)

Com os testes realizados essa escuridão ao redor da imagem acabou prejudicando a leitura na identificação dos objetos e na classificação.

Como resolver?

Existe uma forma de resolver e uma de contornar essa situação. A primeira, é a troca da lente M12. A outra, para contornar é só usar usando o seguinte comando:

sensor.set_brightness(True)

Esse comando vai habilitar o brilho e isso pode ser ruim a depender da aplicação pois vai saturar ainda mais a imagem, mas em locais mais escuros ou com pouca luminosidade vai ajudar bastante. Veja como ficou após ativar esse recurso:

Brilho da câmera do Maix bit ativado
sensor.set_brightness(True)

Maix bit Pinout

O Maix bit pode ser usado da mesma forma que um Arduino pois tem diversos pinos e exemplos no github de integrações com diversos sensores e até mesmo com o ESP32 para usar como “módulo” para fornecer conexão via WiFi.

Pinout Maix Bit

Como instalar MaixPy IDE?

O processo de instalação do MaixPy IDE é extremamente simples e sem muito mistério. Só clicar aqui ir para a página de download, depois selecione o seu sistema operacional e realize a instalação. Assim que tiver finalizado a instalação, abra a IDE e aparecerá essa tela abaixo:

Maixpy IDE para o Maix bit

Feito isso, terá também que baixar outro aplicativo para que possa fazer a gravação do binário para o maix bit para funcionar via USB, caso contrário pode ficar em um loop infinito e é um dos problemas comuns de quem inicia nessa placa. Para fazer o download desse app é só clicar aqui, depois baixe o binário maixpy_v0.6.2_41_g02d12688e.bin, adicione no kflash e realize o download para a placa.

kflash_gui para gravar na memória do Maix bit

Após de ter feito o upload com as configurações acima, é só abrir a IDE novamente que agora já será possível usar a comunicação USB. Para fazer a conexão é só clicar na corrente verde do canto inferior esquerdo, selecionar e clicar em ‘ok’.

Maixpu IDE. Conectando ao  Maix bit

Primeiro teste com Maixpy 20classes

Existem dois métodos de treinamento para a CNN para formato .kmodel mas o processo de treinamento é bastante demorado e a precisão é diretamente proporcional a quantidade de imagens que são inseridas a cada classe. Como treinar o Maix Bit pelo método mais simples.

A Sipeed facilitou o processo e treinou um modelo com 20 classes, ou seja, consegue identificar até 20 objetos diferentes. Entretanto, para usar é só baixar o maixpy_20class.zip mas só será usado apenas o arquivo 20class.kmodel.

O arquivo .kmodel pode ser gravado tanto no microSD quanto na flash pelo programa kflash_gui, no microSD é só por o arquivo e usar o seguinte comando:

task = kpu.load("/sd/20class.kmodel")

No caso do uso da flash é só gravar no diretório 0x500000 e usar o seguinte comando:

task = kpu.load(0x500000) 

Diagrama

Maix bit com câmera e display

Código

O código é bem simples e foi retirado do blog da Sipeed porém foi feito pequenas modificações para que seja replicado o experimento com o diagrama acima. A linguagem usada no Maix Bit é micropython.

import sensor,image,lcd,time
import KPU as kpu

lcd.init(freq=15000000)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.set_brightness(True)
sensor.set_vflip(1)
clock = time.clock()
classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']
#task = kpu.load("/sd/20class.kmodel")
task = kpu.load(0x500000) 
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
    clock.tick()
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    print(clock.fps())
    if code:
        for i in code:
            a=img.draw_rectangle(i.rect())
            a = lcd.display(img)
            for i in code:
                lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)
                lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)
    else: 	
        a = lcd.display(img)
a = kpu.deinit(task)

Selecionar Modelo e Compilar no Maixpy IDE

Selecionando modelo do Maix Bit para enviar o código.

Exportação do Código

Maixpu IDE. Upload do código para o Maix bit

Funcionamento



Considerações

Maix bit é uma ótima alternativa para pequenos projetos que precisam utiliza visão computacional com um preço baixo e com qualidade. Entretanto, é necessário que o usuário dessa placa esteja disposto a dedicar seu tempo para buscar de diversas fontes para que possa dominar esse embarcado.