banner

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






Nenhum comentário:

Tecnologia do Blogger.