Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


Reconhecendo QRCode com Machine Vision



Hoje vamos fazer mais uma aplicação com o Sipeed Maix BiT, e um módulo de relé. O MaixPy é um chip de coprocessamento de Inteligência Artificial que utiliza a Visão Artificial para executar o reconhecimento de QR Code, com funções FPIOA, além de setar pinos de acordo com o reconhecimento.






Recursos usados


  • Sipeed Maix BiT
  • Cabo USB tipo C
  • Relay Module





Montagem





Setup MaixPy

As configurações iniciais do MaixPy podem ser encontradas neste link.





Reconhecimento de QRCode



O reconhecimento de QRCode é feito pelo módulo Image do MicroPython OPenMV.
Ele encontra todos os qrcodes dentro do ROI (Region of Interest) e retorna uma lista de objetos.
Os qrcodes precisam ser relativamente planos na imagem, pois o algoritmo não trata transformações e distorções, por exemplo, na imagem abaixo.








FPIOA/GPIO

O chip k210 suporta cada periférico para ser mapeado aleatoriamente para qualquer pino, utilizando a função FPIOA (Field Programmable Input and Output Array).
Assim é possível setar os pinos de acordo com seu projeto e suas necessidades especiais. Cada IO pode ser atribuído para um dos 48 pinos da FPIOA.
O chip possui 32 GPIOHS que são as GPIOs de alta velocidade e 8 GPIOs de uso geral.
GPIOHS: Sinais de entrada e saída configuráveis, cada I/O possui uma fonte de interrupção independente, configurado para cima e para baixo, ou alta resistência.
GPIO Geral:  sinais configuráveis de entrada e saída, disparo configurável de interrupção total de IO.





Setar Pinos

Para controlar os LEDs precisamos utilizar GPIO.
Os pinos são setados facilmente através da lib GPIO do Maix.


Pinos podem ser definidos utilizando .fm (FPIOA controller).
É utilizado o fm.register para registrar qual pino será utilizado.

A função register o primeiro parâmetro é o pino e o segundo é uma função do chip.


Em seguida, é  após registrar os pinos e suas funções é necessário definir se o pino vai ser de entrada ou de saída.


Como utilizaremos LEDs no exemplo, definimos GPIO de saída com o GPIO.OUT

Após definir, agora vamos setar os valores do LED através da função value().

               
Value:
0 -  LED ligado
1 -  LED desligado





Código

Importações



import sensor
import image
import lcd
import time
from Maix import GPIO


Setup



clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
sensor.run(1)
sensor.skip_frames(30)

fm.register(board_info.PIN9, fm.fpioa.GPIOHS9)
fm.register(board_info.LED_R, fm.fpioa.GPIO0)
fm.register(board_info.LED_B, fm.fpioa.GPIOHS10)
fm.register(board_info.LED_G, fm.fpioa.GPIOHS0)
led_r=GPIO(GPIO.GPIO0,GPIO.OUT)
led_r.value(1)
led_b=GPIO(GPIO.GPIOHS10,GPIO.OUT)
led_b.value(1)
led_g=GPIO(GPIO.GPIOHS0,GPIO.OUT)
led_g.value(1)
relay=GPIO(GPIO.GPIOHS9,GPIO.OUT)
relay.value(1)
cor=(0,0,0)


Loop






while True:
    clock.tick()
    img = sensor.snapshot()
    res = img.find_qrcodes()
    fps =clock.fps()
    if len(res) > 0:
        print(res[0].payload())
        if res[0].payload()=='Verde':
            relay.value(0)
            led_g.value(0)
            led_r.value(1)
            led_b.value(1)
            cor=(0,255,0)
        if res[0].payload()=='Vermelho':
            teste.value(1)
            led_g.value(1)
            led_r.value(0)
            led_b.value(1)
            cor=(255,0,0)
        if res[0].payload()=='Azul':
            relay.value(1)
            led_g.value(1)
            led_r.value(1)
            led_b.value(0)
            cor=(0,0,255)
        img.draw_string(2,2, res[0].payload(), cor, scale=2)
    lcd.display(img)





FAÇA O DOWNLOAD DOS ARQUIVOS






Postar um comentário

4 Comentários

  1. Fernando, preciso de sua ajuda, estou estudando engenharia de computação (Univesp). Compre o Maix Bit e fiz os teste de QRCode e deu tudo certo.
    Tenho um projeto onde desenvolvo uma bengala inteligente para deficientes visuais e com a ajuda do Maix que fará a leitura de QRCodes no chão e emitira uma mensagem de voz para o deficiente, como exemplo o posicionamento dele e dado local.

    Eimar N. B. Machado
    E-mail é eimarnbmachado@gmail.com
    Fone: 16 981736110
    Fone: 17 997715567

    ResponderExcluir
  2. FERNANDO COMO LIGAR UM ESP6266 NESTA PLACA PARA QUADO ELE RECONHECER UMA IMAGEM E MADAR UMA MESAGEM PARA O ESP EVIAR PARA OUTRO ESP

    ResponderExcluir
  3. Se alguém estiver tendo a seguinte mensagem de erro: fm isn't defined, cole
    from board import board_info
    from fpioa_manager import fm
    abaixo do:
    from Maix import GPIO

    ResponderExcluir
  4. Muito difícil achar informações sobre essa placa na internet...

    ResponderExcluir