Reconhecimento Pessoas em foco Problema

Post on 03-May-2022

1 views 0 download

Transcript of Reconhecimento Pessoas em foco Problema

Problema

Seminário de IoT

QuestãoReconhecimento Pessoas em foco

Integrantes:Aland MontanoJhone FonteneleLucianoMarcelo Maurin

O que é o ROBOTINICS?

http://maurinsoft.com.br/index.php/robotinics-3/

Usaremos como base o robô para fins educativos, o Robotinics.O Projeto do Robô já existe a mais de 7 anos, sendo criado para o tcc da ETEC, no curso de mecânica industrial.Ele conta com 3 partes, mecânica, eletrônica e software. Sendo que o mesmo continua evoluindo.As peças podem ser impressas em impressora 3D, ou de forma mais caseira utilizar placas de isopor padrão. Por isso o formato do robô.

O projeto é feito em partes, totalmente open source, podendo ser modificado livremente.

O ROBOTINICS não é um projeto acabado, muito pelo contrário, está no estágio embrionário, sendo modelo para outros robôs.

As informações aqui apresentadas foram em parte implementadas.

Problema abordado

O robô possui uma câmera que captura a face de pessoas e objetos.

Ao se deslocar o robô precisa posicionar a cabeça na pessoa mais próxima. Pois irá receber comandos dela.

Limitação de recursos

O Robô possui 1 raspberry PI Zero na cabeça Integrado com uma Câmera de vídeo HD.

O equipamento possui apenas 512Mb de RAM, com SSD de 32Gb, com sistema Linux embarcado.

Com essa capacidade, os recursos são bem limitados.

Para economia de processamento utilizamos o motion, que filtra apenas imagens com movimento. Isso reduz o volume de quadros que iremos processar.

Entendendo o problemaAo aplicarmos um sistema de detecção facial encontraremos 10 pessoas.

Neste cenário temos que encontrar a pessoa que está mais próxima.

Posicionando a cabeça de forma que a pessoa mais próxima fique no meio da cena.

Como funciona o processo 1) Motion captura a imagem

2) O motion chama o script de ação

3) O scritp de ação chama demais scripts

4) srvMonitor realiza a comunicação com hardware.

MOTION

web stream

ScriptAção

BD

detecção facial

detecção proximidade

BD

srvMonitor

Script de Ação

No livro página 231/232,

https://sourceforge.net/projects/robotinics/files/livro/Projetos%20IOT%20com%20Arduino%20e%20Raspberry-12.pdf/download

Podemos ver o script analisa_img.sh que realiza as chamadas para os outros scripts.

Comandos do RobôNa página 171, apresento os comandos do robô, são semelhantes a comandos de console.

FANNNa página 283-286, apresento a libFANN e suas características. Que será utilizada em alguns processos. Lembrando que não dá para resolver tudo com FANN, mas pode resolver alguns problemas, com grande desempenho. Evitando gargalo do processador.

Script de reconhecimento facial

Em meu site podemos encontrar:

http://maurinsoft.com.br/index.php/sobre-nos/programador-python-opencv/

No fragmento abaixo:

for (x1,y1,w, h ) in facesDetectadas:

print(“Face:”,x1,y1)

GravaReg(Arquivo,x1,y1,w,h)

img2 = imcrop(img,x1,y1,w,h)

cv.imwrite(“face.png”,img2)

Pegamos a imagem e as coordenadas da face de cada objeto detectado, através das coordenadas x1,y1, w, h

Também recortamos a face para treinamento apenas da face. Este recorte será usado para posterior treinamento na identificação da face.

Criando arquivo de treinos

Crie um arquivo de treino chamado selecao.data

A primeira linha será:

nrotreinos nroentradas nrosaidas

ent01, ent02, … , entnn

sai01, sai02, … , sainn

(repetir nro saidas)

Treinar sua rede#include "fann.h"

int main()

{

const unsigned int num_input = 2;

const unsigned int num_output = 1;

const unsigned int num_layers = 3;

const unsigned int num_neurons_hidden = 3;

const float desired_error = (const float) 0.001;

const unsigned int max_epochs = 500000;

const unsigned int epochs_between_reports = 1000;

struct fann *ann = fann_create_standard(num_layers, num_input,

num_neurons_hidden, num_output);

fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);

fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);

fann_train_on_file(ann, "xor.data", max_epochs,

epochs_between_reports, desired_error);

fann_save(ann, "xor_float.net");

fann_destroy(ann);

return 0;

}

Aqui definimos os parâmetros da rede.Input/output, camadas, nro camadas ocultas, erro desejado, nro de épocas

Carregamos o arquivo de treino, rodando o mesmo.

Salvamos a rede treinada.

Testando uma rede O script completo pode ser visto, no seguinte link:

https://github.com/libfann/fann/blob/master/examples/xor_test.c

1 - Carrega a rede neural treinada

2 - Carrega dados de teste

3 - Processa entrada, retornando saídas

4 - Mostra resultado obtido

1

2

3

4

Resultado esperado

Ao aplicarmos a rede o resultado esperado é a indicação da pessoa mais próxima.

A partir daí a informação será armazenada em banco. Sendo lido no banco as posições da pessoa, que será feito cálculo para posicionar o mesmo.

Neste cenário, contemplamos análise de 5 pessoas simultâneas, em caso de mais pessoas, o sorteado do primeiro grupo de 5 será elemento do próximo grupo.

Ao fim da análise de todos os indivíduos, será calculado o deslocamento para posicionar o indivíduo.

Testes e vídeos de apoio

Meu canal

https://www.youtube.com/user/marcelomaurin/videos

Captura de Vídeo

https://www.youtube.com/watch?v=1rxIwk49V14

Gerenciamento do Robotinics

https://www.youtube.com/watch?v=iKYE5gfLx48&t=449s

Conclusão

O projeto decisório em um robô autônomo, não é tarefa fácil.

Existem muitas soluções, e formas práticas de aplicação. A melhor é a que se adequa ao seu hardware. Pois devemos lembrar que a capacidade de processamento ainda é o maior gargalo de processos complexos quando abordamos automatos.

A apresentação da proposta não foi de fato realizada, porém de posse destes novos conteúdos apresentados aqui na pós da Uninove, estou ansioso para preparar testes neste caminho.

De fato, peço que acompanhem meu canal, pois em breve farei novas apresentações sobre este tema.

O trabalho de robótica, ainda está no seu inicio, porem posso garantir que a plataforma é mais que adequada a sua extensividade e aplicações de casos cada vez mais complexos.

Bibliografia

Redes Neurais Artificiais para engenharia e ciências aplicadas - Ivan Nunes da Silva, Danilo Hernane Spatti, Rogério Andrade Flauzino.

Lib FAN - Site - https://github.com/libfann/fann

Robotinics - http://maurinsoft.com.br/index.php/robotinics-3/

Introdução à Robótica - Blucher - Unesp - Maja J. Mataric

Linux Robotics - programming smarter robots - TAB Robotics - D.Jay Newman