Usando o AI Vision Sensor no VEXcode EXP Python

Este artigo fornece uma visão geral das funções disponíveis para usar o AI Vision Sensor em Python, junto com instruções simples sobre como usá-las. Você aprenderá as quatro etapas do processo de uso do AI Vision Sensor – obter dados, ver a quantidade de objetos obtidos, selecionar qual objeto dos dados usar e quais dados do objeto extrair.

Obtenha dados visuais com o AI Vision Sensor

Para coletar informações do ambiente ao seu redor, o AI Vision Sensor tira uma imagem do que está olhando no momento. Quaisquer objetos que ele identifique com a Assinatura Visual especificada são colocados em uma tupla, que pode então ser usada por outras funções.

tire uma foto rápida

Ao usar o comando take_snapshot , você precisará criar uma variável para armazenar a tupla que ele cria. QualquerAssinatura Visual precisará ser configurada antes de poder ser usada como parâmetro. Ao utilizar a função, especifique o parâmetro de assinatura como o nome do sensor, sublinhado duplo, seguido do nome da Assinatura Visual.utilitário exm.PNG

vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
visão_objetos = ai_vision_6.take_snapshot(ai_vision_6__Red)
visão_objetos = ai_vision_6.take_snapshot(ai_vision_6__Green)

As opções para sua Visual Signature também serão preenchidas automaticamente no VEXcode depois que você começar a digitar o início dos parênteses.

Exemplo

Neste exemplo, a variável vision_objects armazena uma tupla contendo as assinaturas visuais detectadas do AI Vision Sensor denominadas ai_vision_6. Ele exibe o número de objetos detectados e captura um novo instantâneo a cada 0,5 segundos.

while True: 

# Tire um instantâneo para criar uma tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)

brain.screen .print("contagem de objetos:", len(vision_objects))
wait(0,5, SECONDS)

Determine quantos objetos foram detectados

O comando len pode ser usado com tuplas. Isso pode ser usado para ver quantos objetos o comando take_snapshot armazenou na tupla.

É uma prática recomendada sempre garantir que você detectou um objeto antes de tentar extrair qualquer informação do instantâneo. Para fazer isso, use o comando len com a variável que armazena a tupla.

len(objetos_visão) > 0

Exemplo

Neste exemplo, a variável vision_objects armazena uma tupla contendo as assinaturas visuais detectadas do AI Vision Sensor denominadas ai_vision_6. Ele exibe o número de objetos detectados e captura um novo instantâneo a cada 0,5 segundos. No entanto, se tiver detectado um objeto, imprimirá quantos objetos detectou.

while True: 
# Tira um instantâneo para criar uma tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Limpa a tela/reset para que possamos exibir novas informações
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# Imprime quantos objetos foram encontrados
brain.screen.next_row()
brain.screen.print("contagem de objetos:", len(vision_objects ))
espera(0,5, SEGUNDOS)

Usando o comando len com a tupla, você também pode ver quantos objetos foram detectados.

Selecione de qual objeto obter dados

Existem dois métodos para extrair dados da tupla. Uma abordagem é recuperar diretamente informações do maior objeto detectado no uso mais recente do comando take_snapshot usando a função ai.vision.largest_object(). O outro método envolve a especificação da variável específica e do índice do objeto.

ai.vision.largest_object()

ai.vision.largest_object() é uma função auxiliar para acessar o maior objeto na tupla, mas só funcionará com o instantâneo mais recente.

while True: 
# Tira um instantâneo para criar uma tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Limpa a tela/reset para que possamos exibir novas informações
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Verifica se um objeto existe antes de extrair dados
if len(vision_objects) > 0:
brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
brain.screen.print("sem objeto")
wait(0,5, SEGUNDOS)

Neste exemplo, o código verifica se um objeto existe antes de usar a função ai.vision.largest_object() para retornar a propriedade .centerX do maior objeto detectado e imprimi-la.

objetos_de_visão[0]

Outro método para extrair dados de uma tupla é chamar a variável que armazena a tupla diretamente. Entre colchetes, especifique o índice do objeto do qual deseja extrair dados. A tupla de objetos retornada sempre lista o maior objeto primeiro no índice 0. Posteriormente, os objetos são ordenados do maior para o menor.

while True: 
# Tira um instantâneo para criar uma tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Limpa a tela/reset para que possamos exibir novas informações
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Verifica se um objeto existe antes de extrair dados
if len(vision_objects) > 0:
brain.screen.print(Center X: ", vision_object[0].centerX)
else:
brain.screen.print("sem objeto")
wait(0,5, SEGUNDOS)

Neste exemplo, o código verifica se um objeto existe antes de usar a função vision_object[0] para retornar a propriedade .centerX do objeto de índice 0 e imprimi-la.

Selecione quais dados extrair de um objeto

De cada objeto, existem oito propriedades que podem ser chamadas.

  • .altura
  • .largura
  • .centerX
  • .centerY
  • .originX
  • .originY
  • .ângulo
  • .existe

.altura

A propriedade .height retorna a altura do objeto detectado em pixels.

Use este código para retornar a propriedade .height:

visão_objetos[0].altura

A propriedade .height retornará um valor entre 0 e 240 pixels.

.largura

A propriedade .width retorna a largura do objeto detectado em pixels.

Use este código para retornar a propriedade .width:

visão_objetos[0].largura

A propriedade retornará um valor entre 0 e 320.

.centerX

A propriedade .centerX informa a coordenada X do centro da Assinatura Visualdetectada.

Use este código para retornar a propriedade .centerX:

visão_objetos[0].centerX

A propriedade .centerX retornará um número entre 0 e 320.

.centerY

A propriedade .centerY informa a coordenada Y do centro da Assinatura Visualdetectada.

Use este código para retornar a propriedade .centerY:

visão_objetos[0].centerY

A propriedade .centerY retornará um número entre 0 e 240.

.originX

A propriedade .originX informa a coordenada X do canto superior esquerdo da Assinatura Visual detectada.

Use este código para retornar a propriedade .originX:

visão_objetos[0].originX

A propriedade .originXretornará um número entre 0 e 320.

.originY

A propriedade .originY informa a coordenada Y do canto superior esquerdo da Assinatura Visual detectada.

Use este código para retornar a propriedade .originY:

visão_objetos[0].origemY

A propriedade .originYretornará um número entre 0 e 240.

.ângulo

A propriedade .angle retorna o valor do ângulo do Código de Cores.

Use este código para retornar a propriedade .angle:

visão_objetos[0].ângulo

A propriedade .angle retorna a orientação do código de cores detectado, variando de 0 a 359,99 graus.

.existe

.exists é uma propriedade booleana que retorna verdadeiro se for um objeto válido. 

Ele retornará falso se o objeto for inválido, como se um número inteiro negativo for usado. Se um objeto for inválido, todas as outras propriedades retornarão 0s como valor.

while True: 
# Tira um snapshot para criar uma tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
# limpa a tela/reset para que possamos exibir novas informações
brain.screen.clear_screen()
brain.screen .set_cursor(1, 1)

se vision_objects[0].exists:
brain.screen.print("x:", vision_objects[0].centerX)
else:
brain.screen.print("nenhum objeto" )
espera(0,1, SEGUNDOS)

Neste exemplo, o código verifica a propriedade .exists , se retornar verdadeiro, imprimirá o valor da propriedade .centerX no Brain. Se a propriedade .exists retornar falso, será impresso que não há objeto.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: