Projeto SyFyHome - Update | Identificação facial concluída!
Esse post é uma continuação do post http://tocomsono.com.br/post/15855145668/projeto-syfyhome
Acabo de concluir o processo de identificação facial do projeto SyFyHome, foi mais fácil do que eu pensava mas primeiro vamos falar sobre as dificuldades:
Primeiro usei o OpenCV para capturar a imagem da webcam , a principio estava tentando utilizar a gem rb_webcam que utiliza FFI para se comunicar com a lib opencv , porem após algumas frustrações com ela e após descobrir que o formato que ela me entrega é incompatível com a outra gem que ia utilizar desisti dela. Porem ela me deu o insight que a outra gem que tambem lida com o opencv tambem deveria ser capaz de se comunicar com a webcam já que está é uma função da lib e não da gem.
Adicionei a gem ruby-opencv (https://github.com/ryanfb/ruby-opencv) no Gemfile e …. ela quebrou ao tentar compilar… por algum motivo que não perdi tempo tentando descobrir o que era, a gem só compilou corretamente fazendo o download pelo git e compilando com o make para depois rodar o comando rake install_gem, talvez seja algo relacionado ao bundler.
Por conta da falta de documentação tive que mergulhar no codigo c++ da gem, +- 1 hora depois consegui desvendar o funcionamento da gem e ficou bem mais tranquilo e o melhor agora eu podia utilizar a mesma gem para capturar a imagem e consultar se haviam faces presentes.
Depois de capturada e identificada a presença de faces, fiz o envio via rest para o faces.com , utilizei a gem face ( https://github.com/rociiu/face ) e a unica dificuldade que esbarrei nela foi que o criador da gem esqueceu de adicionar o campo “file” para a operação de face_recognize, adicionado ele problema resolvido.
Relatadas as dificuldades vejamos como ficou o funcionamento:
1 passo , Adquirir faces.
Após me cadastrar no face.com , para ter minha api e secret key, anoto tambem o meu namespace privado que é onde vou guardar as imagens dos meus usuarios.
Então fiz um script que captura 10 fotos do usuario com intervalo de 1 segundo entre cada uma , envia as 10 fotos (note que você pode enviar qualquer arquivo de imagem) para o servidor do face executando a operação de detecção de faces que me retorna um TID , que guardo numa array, pego todos esses TID’s e executo a operação “tags.save” onde registro no face que aqueles TID’s pertencem a um uid de usuário especifico do meu namespace privado (sim… eu sei… é confuso o nome da operação para esse fim…) e então após registrar os TID’s envio uma pedido pra operação “faces_train” passando o uid do usuário, para o faces rodar seus algoritmos.
2 passo, monitoramento.
Para fazer o monitoramento , fiz o seguinte, fico tirando fotos consecutivas com o opencv e verificando a presença de faces , quando faces são encontradas espero até que tenha 3 imagens seguidas com faces sejam encontradas (para reduzir a sensibilidade…) e então envio a ultima face para a operação “face recognize” do face que me retorna lindamente quantas faces foram encontradas e os ids de todos os usuarios presentes na foto com diversos dados extras.
ps.: para buscar no seu namespace privado inteiro basta passar o uid “all@nome_do_namespace”
3 Fun and profit.
Apartir dai é só adicionar as firulas que desejar , por exemplo vou fazer um registro de alguns amigos com suas musicas e artistas favoritos no mongodb , alem de sistema de envio de email com foto para o caso de alguém desconhecido entrando no ap.
O código dessa aplicação , juntamente com um video demonstrativo vou colocar depois de dar uma limpada no código , adicionar umas besteirinhas para tornar mais dinâmico e junto da pagina do projeto para o site ratosdelaboratorio.com.br :)
por hoje é só pessoal.
qualquer duvida tweet-me @regismesquita