Obter localização de Objetos com o IA é uma tarefa relativamente simples que tem uma relevância de aplicações inimaginável, principalmente para pessoas com deficiência motora.
Introduzindo ao Básico da Visão Computacional
A princípio o retângulo é a forma geométrica mais básica que é usada em toda identificação de objetos na visão computacional como na imagem abaixo que foi retirada do Maix Bit:

Centroide de um Retângulo
Primeiramente é necessário entender um pouco de geometria para obter a localização do objeto. Neste caso, o melhor ponto de referência é o centro, como a IA já retorna a posição do retângulo, é só achar o centro, porém para achar a centroide (CM) é só dividir a base e altura por dois como na imagem abaixo:

Localizar a Posição de CM
Para obter a posição de CM é só obter a coordenada do retângulo (X, Y) e somar com a coordenada da centroide (X, Y).
centroid_x = int(i.w() / 2)
centroid_y = int(i.h() / 2)
location_x = i.x() + centroid_x
location_y = i.y() + centroid_y
Converter Localização em Pixel para Percentual
Em seguida, para facilitar outras aplicações, o ideal é transformar o valor de pixel para percentual por meio da regra de três. Por exemplo, o Maix bit tem uma resolução de 320px por 240px, então ficará desta forma:
percent_location_x = int(location_x * 100 / 320)
percent_location_y = int(location_y * 100 / 240)
Demonstrar a Localização do Objeto
Após a finalização do código e testes com o Maix Bit, foi pensando em uma aplicação simples no Visual Studio, para demonstrar o funcionamento de forma mais clara possível. Para isso se tornar possível, foi necessário formatar a localização em Json.
{
"y": 63,
"x": 45
}
Lógica do App
O aplicativo basicamente irá ler a serial, desserializar o json e mover o quadrado vermelho de acordo com a localização do objeto.

Sobre o App
Como dito anteriormente, o é feito no Visual Studio e trata-se de uma demonstração e por isso não é executável. Por isso, não tem tanta relevância, mas ficará disponível no GitHub.
Código do Maix Bit
O código a seguir é para obter localização de objetos com o IA do Maix Bit com o modelo que contém 20 objetos. Caso queira baixar os arquivos, é só acessar este link.
import sensor,image,lcd,time
import KPU as kpu
import ujson
lcd.init(freq=15000000)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.run(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")
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)
if code:
for i in code:
a = img.draw_rectangle(i.rect())
centroid_x = int(i.w() / 2)
centroid_y = int(i.h() / 2)
location_x = i.x() + centroid_x
location_y = i.y() + centroid_y
percent_location_x = int(location_x * 100 / 320)
percent_location_y = int(location_y * 100 / 240)
a = img.draw_circle(location_x, location_y, 3, color=(255, 255, 255), fill=True)
json_map = {}
json_map["x"] = percent_location_x
json_map["y"] = percent_location_y
json_percent_location = ujson.dumps(json_map)
print(json_percent_location)
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, '%f'%i.value(), lcd.RED, lcd.WHITE)
else:
a = lcd.display(img)
a = kpu.deinit(task)
Funcionamento do App e Maix Bit
O vídeo a seguir foi gravado na tela do computador e para gravar a tela do Maix bit, foi usado um celular, por isso há alguns tracejados no display.
Você precisa fazer log in para comentar.