LusoRobótica - Robótica em Português

Robótica => Projectos de robótica => Projectos em desenvolvimento => Tópico iniciado por: Marvin em 15 de Março de 2010, 01:27

Título: Face tracker (aka weekend project)
Enviado por: Marvin em 15 de Março de 2010, 01:27
Boas,

Tenho andado a trabalhar num projecto que basicamente detecta um rosto numa imagem da webcam e centra-o na imagem movendo a webcam.

Para isto utilizei 2 servos, 1 arduino, 1 webcam (ma qualidade) e 1 laptop. A nivel de software, apliquei o algoritmo de Haarcascade usando funções da biblioteca openCV (Emgu CV para C#) e a biblioteca que tenho andado a desenvolver de C# (arduinocomm).

A parte mais complicada foi mover os servos nos angulos correctos para seguir a cara, apliquei o teorema de pitagoras num plano 3d o que não é 100% eficaz pois a camara salta um bocado até chegar a cara, mas "gets the work done"...

O sketch da arduino limita-se a fazer o parse da informação enviada pelo servidor e enviar os controlos para os 2 servos.

Isto ainda esta numa fase inicial e tem alguns bugs, devido a qualidade da camara ele detecta alguns "fantasmas" o que faz a camera mover-se sem motivo aparente.

Aqui ficam as primeiras imagens:

Getto style servo base

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fblog.skundu.net%2Fwp-content%2Fuploads%2F2010%2F03%2FP3140345-300x225.jpg&hash=67c8225cd6746768030eff0890d186836f0dca9b)

Aplicação do lado do servidor

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fblog.skundu.net%2Fwp-content%2Fuploads%2F2010%2F03%2FP3140346-300x225.jpg&hash=88907bdc8df9624d4380287e11894cd08ba1878a)


Podem ver os videos no blog, mas assim que puder faço upload para o youtube para colocar aqui.

Link para o blog http://blog.skundu.net/?p=162 (http://blog.skundu.net/?p=162)

Criticas e sugestões são muito bem-vindas!

 
Título: Re: Face tracker (aka weekend project)
Enviado por: metRo_ em 15 de Março de 2010, 10:32
Nos próximos tempos também irei começar a trabalhar com a biblioteca openCV.
Está engraçado, tenho que pesar é na maneira como fazes o posicionamento da camera e depois posto aqui qualquer coisa.
Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 16 de Março de 2010, 10:27
Nos próximos tempos também irei começar a trabalhar com a biblioteca openCV.
Está engraçado, tenho que pesar é na maneira como fazes o posicionamento da camera e depois posto aqui qualquer coisa.

A biblioteca openCV é um mundo, tem praticamente de tudo para processamento de imagem, utiliza-la as vezes é que não é facil devido a documentação fraca em alguns metodos. Estou de momento a optimizar alguns metodos (especialmente a tentar acelarar o processo de encontrar a face).

Obrigado pela ajuda, pois de facto o posicionamento da camera é que me esta a dar mais trabalho.



Título: Re: Face tracker (aka weekend project)
Enviado por: delphi em 16 de Março de 2010, 11:33
Olá,

Citar
posicionamento da camera é que me esta a dar mais trabalho

Referes-te a movimentos bruscos ou à camera mover-se sem motivo?

Sugiro que seja o arduino a calcular a nova posição dos servos e apenas receber a localização "destino", porque assim fica toda a lógica do movimento no arduino, e sem alterares o código do programa no PC, consegues fazer novas alterações nos movimentos.

Experimenta fazer uma deslocação dos servos utilizando uma média ponderada para atingir a posição final. Ao calculares os novos valores o movimento fica mais suave, e por ex. caso tenhas uma deslocação rápida que volte ao tempo -1 a camera mal se deslocará.
Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 16 de Março de 2010, 11:51
Olá,

Citar
posicionamento da camera é que me esta a dar mais trabalho

Referes-te a movimentos bruscos ou à camera mover-se sem motivo?

Sugiro que seja o arduino a calcular a nova posição dos servos e apenas receber a localização "destino", porque assim fica toda a lógica do movimento no arduino, e sem alterares o código do programa no PC, consegues fazer novas alterações nos movimentos.

Experimenta fazer uma deslocação dos servos utilizando uma média ponderada para atingir a posição final. Ao calculares os novos valores o movimento fica mais suave, e por ex. caso tenhas uma deslocação rápida que volte ao tempo -1 a camera mal se deslocará.

Refiro-me aos movimentos bruscos, os movimentos sem motivo devem-se maioritariamente a "fantasmas" derivados da qualidade da camara. Com a minha webcam HD do portatil isto não acontece.

Em relação ao movimentos bruscos, a tua sugestão da media ponderada parece-me bastante boa. Alias até se podia aplicar algumas regras de probalidade para "prever" o movimento seguinte.

Agora tenho é duvidas no que dizes de colocar a logica de movimento na arduino. Eu de momento estou a passar para a arduino o angulo em que o servo tem de estar, baseado no calculo do angulo em que o rectangulo da face se encontra. Para alem de guardar a posição n-1 (que não estou a fazer mas irei) não estou bem a ver que mais posso colocar na arduino.

Obrigado pelas sugestões
Título: Re: Face tracker (aka weekend project)
Enviado por: delphi em 16 de Março de 2010, 12:14
Estou a referir-me ao cálculo para fazer o smooth dos servos, para evitar esses movimentos bruscos.

A aplicação deve continuar a fazer o que está a fazer: indicar a posição desejada, e o arduino, com base na posição actual dos servos, calcula quais os próximos passos dos servos até estes chegarem à posição desejada.

Por ex., podes agora, para o teu objectivo, não querer os movimentos bruscos, mas daqui a uns tempos podes queres aplicar em algo que tenha de ter uma resposta rápida, ou ainda mais lenta. Se for o arduino a calcular quantos passos os servos devem dar até atingir a posição desejada (menos passos logo mais rápido e vice-versa), não tens de alterar a aplicação do pc, não é o processador do pc que fica ocupado com essa tarefa, mas sim o arduino.

Por ex. é para o servo ir para os 90º, e actualmente está nos 30. O servo pode ir logo para os 90º ou pode ir andando (a passos de 10º) até chegar aos 90º. Os "tamanho" dos passos pode estar guardada na memória, bem como o tempo de cada passo,... Entretanto, pode chegar uma nova informação e a indicar que agora a posição final são os 30º novamente. Se já vai nos 70º, começa a dar os passos para "trás" e assim sucessivamente.

Penso que desta forma também podes evitar os alguns movimentos "fantasmas".
Título: Re: Face tracker (aka weekend project)
Enviado por: Ricardo em 16 de Março de 2010, 12:15
Boas,

Tenho andado a trabalhar num projecto que basicamente detecta um rosto numa imagem da webcam e centra-o na imagem movendo a webcam.

Para isto utilizei 2 servos, 1 arduino, 1 webcam (ma qualidade) e 1 laptop. A nivel de software, apliquei o algoritmo de Haarcascade usando funções da biblioteca openCV (Emgu CV para C#) e a biblioteca que tenho andado a desenvolver de C# (arduinocomm).

Ola.
Também estou a tentar trabalhar com o openCV, mas a ideia é reconhecer mais do que rostos, ou seja, reconhecer alguns objectos distintos, de forma a ajudar um veículo a localizar-se no espaço. 
Tal como dizes, não é uma ferramenta fácil, e por isso não tenho conseguido ir para além dos ficheiros HAAR que se encontram na net.

Já fiz algumas experiências com o reconhecimento do olho humano, e posteriormente, o cálculo da direcção do olhar, com o objectivo de ajudar uma pessoa tetraplégica a conduzir o rato num ecrã. Foram testes preliminares, mas com a referida biblioteca (onde curiosamente também usava um sistema pan&tilt para “apontar” a câmara ao olho, embora só no momento da inicialização), já foi possível alcançar alguns resultados. Entretanto, e pelas piores razões, abandonei esse projecto…

Outra ideia que também já experimentei, foi uma espécie de detector de movimento que fazia a câmara mover-se para a zona onde o movimento foi detectado (na imagem), e um pormenor que fez alguma diferença no meu caso foi “desligar” a analise da imagem até a câmara atingir a posição da ordem inicial, e só depois voltar a analisar a nova imagem. Pelo menos no meu caso, isto resultou num movimento mas suave em sem tantos soluços.

A verdade é que a qualidade da câmara é muito importante para o resultado final.

Agora gostava de conseguir criar os tais ficheiros HAAR para vários objectos específicos, mas para além da necessidade de fotografar o objecto em causa um sem número de vezes, ainda não consegui perceber muito bem como se faz o resto do processo. Se alguém me puder ajudar, agradeço
Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 16 de Março de 2010, 12:57
Obrigado Delphi. Já percebi a tua logica, isso parece-me interessante. Vou tentar colocar em pratica assim que tiver um pouco mais de tempo.

Boas Ricardo.

Eu já ando de volta do opencv ha uns tempos e tambem tento reconhecer outros tipos de objectos para alem dos comuns. Ha uns tempos encontrei este link http://note.sonots.com/SciSoftware/haartraining.html (http://note.sonots.com/SciSoftware/haartraining.html) e tenho tentado aplicar os passos. Claro está que isto requer bastante tempo de treino e muitas imagens. Eu consegui criar uns ficheiros que + - reconheciam o que eu queria.

Em relação a não detecção da face enquanto o servo esta a mover, estou a trabalhar nisso na classe arduinocomm que estou a desenvolver ou seja, um objecto servo so envia dados para a arduino quando ela enviar informação a dizer que já parou. Vou aplicar depois ao processamento da imagem essa variavel. Vou ver se com isso e com a proposta do Delphi resolvo o problema.

Já agora, esse trabalho com o movimento do olho é de louvar, em especial com a razão indicada.

Título: Re: Face tracker (aka weekend project)
Enviado por: delphi em 16 de Março de 2010, 14:25
Há uns anos, em Delphi, e ainda não conhecia o poder do arduino, andei a fazer umas experiências com o objectivo de:

- fazer um sistema de vigilância, com webcams e servos
- criar uma ferramenta, para quem está acamado, conseguir controlar um rato com o movimento da cabeça.

No sistema de vigilância, uma das dificuldade foi logo essa: quando mexia a camera, a posição do objecto mudava e não podia enviar logo esse novo destino para os servos (os servos ficavam endiabrados :) ) , entretanto como era passatempo... não passou disso mesmo.

A ferramenta para quem está acamado, era mais especificamente para pessoas tetraplégicas. O objectivo era de poder controlar um rato, para pelo menos, conseguir mudar de canal,  diminuir/aumentar o som, ... de uma placa de captura de tv ligada ao pc. Assim a pessoa podia, dentro do possível, ser mais autónoma.

No entanto, com o arduino, a ideia começou a passar mais para: e fazer isso sem nenhum pc? Se for o arduino a fazer o processamento da análise das imagens?
Existem umas cameras que comunicam via RX/TX e assim podem comunicar com o arduino. http://gizmologi.st/code/c328r-camera-library/ (http://gizmologi.st/code/c328r-camera-library/)

Outra ideia, para o mesmo âmbito de pessoas (mas já fora deste tópico), era o de desenvolver algum interface(s) , onde a base de programação do arduino seria igual, mas o hardware de input é que era diferente (webcam, sensores de pressão, ...). De forma que o utilizador conseguisse comandar a televisão, ou qualquer outro aparelho que tenha como input um comando por infravermelhos. Se houver alguém interessado em desenvolver qualquer coisa do género abre-se outro tópico e especifica-se melhor.

Se puder ajudar em alguma coisa neste teu projecto, está à vontade.
Título: Re: Face tracker (aka weekend project)
Enviado por: senso em 16 de Março de 2010, 14:46
A ideia é boa, mas se queres manter isso num sistema embebido numa aplicação, pensa antes num arm-7 ou mesmo um arm-9 a correr linux, o arduino é um simples micro-controlador de 8 bits, não tem capacidade de processamento para fazer reconhecimento de imagens e mesmo trabalhar com imagens de uma camera já é uma grande carga de trabalho para o arduino.
Imagina, só uma imagem com uma resolução de 800*600 e com 8bits por cor, são 800*600*(3*8), são 11520000 bits, ou seja 144Kbytes se não me engano, bem mais memória que um arduino tem, e isto é só uma imagem, imagina 25 ou 30 por segundo mais todo o processamento necessário
Título: Re: Face tracker (aka weekend project)
Enviado por: delphi em 16 de Março de 2010, 14:58
Pois, mas se calhar por mais uns $$$ mais vale, por ex., um EEE 4G, que além de ter mais hardware, a parte de programação torna-se muito mais mais fácil.

Quanto à limitação do arduino não sei se o Mega não dará já para fazer algum deste processamento.

No entanto, pelo que tenho lido, neste tipo de processamento de imagens, geralmente aplica-se um filtro para ficar a preto/branco e depois obter os contornos, e as dimensões da imagem a ser analisada é muito mais pequeno (320x280 ou ainda mais pequena). Claro que depende do tipo de aplicação que se pretende.
Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 16 de Março de 2010, 15:17
Há uns anos, em Delphi, e ainda não conhecia o poder do arduino, andei a fazer umas experiências com o objectivo de:

- fazer um sistema de vigilância, com webcams e servos
- criar uma ferramenta, para quem está acamado, conseguir controlar um rato com o movimento da cabeça.


E interessante mas o meu interesse pela robotica começou exactamente com a ideia de criar um robot com uma webcam que patrulha-se uma zona, detecta-se a pessoa, compara-se a cara com a BD e envia-se de imediato um alarme caso o intruso não estivesse na "guest list" ;) Claro está que o conceito é facil de assimilar mas a implementação nem por isso. O meu primeiro obstaculo foi o processamento de imagem numa arduino, pois tal como o Senso mencionou, é praticamente impossivel. O melhor que se pode fazer é enviar a imagem para um servidor central e este então guiar o robot... o servidor central pode ser um laptop tipo Dell 9.

Então comecei a desenvolver esta camera que nos segue para testar as aguas, e aqui estou eu... Penso que a arduino pode ser usada para controlar o chassi da aplicação, isto é, sensores, servos, motores, agora o processamento de imagem tem de ser passado para uma coisa mais potente. Ando a "namorar" uma coisas destas ha imenso tempo http://beagleboard.org/ (http://beagleboard.org/)

Em relação a ferramenta para quem esta acamado, a ideia que tive logo foi um hack do comando da wii... vi ha pouco tempo um tipo que fez uma coisa desse genero podes checkar aqui http://johnnylee.net/projects/wii/ (http://johnnylee.net/projects/wii/) . Se quiseres abrir um topico para isto e começar a trabalhar nisto estou disponivel para ajudar no que puder.

Título: Re: Face tracker (aka weekend project)
Enviado por: Ricardo em 16 de Março de 2010, 15:22
A ferramenta para quem está acamado, era mais especificamente para pessoas tetraplégicas. O objectivo era de poder controlar um rato, para pelo menos, conseguir mudar de canal,  diminuir/aumentar o som, ... de uma placa de captura de tv ligada ao pc. Assim a pessoa podia, dentro do possível, ser mais autónoma.

(..)

Outra ideia, para o mesmo âmbito de pessoas (mas já fora deste tópico), era o de desenvolver algum interface(s) , onde a base de programação do arduino seria igual, mas o hardware de input é que era diferente (webcam, sensores de pressão, ...). De forma que o utilizador conseguisse comandar a televisão, ou qualquer outro aparelho que tenha como input um comando por infravermelhos. Se houver alguém interessado em desenvolver qualquer coisa do género abre-se outro tópico e especifica-se melhor.


Também acho uma boa ideia criar um tópico sobre isto!

A “investigação” e as experiências que fiz nessa área tinham um objectivo bem definido. O meu pai sofreu um grave acidente de mota e ficou tetraplégico (e inicialmente, entubado, ou seja sem qualquer meio de comunicação) e a difícil realidade com que nós, família, nos vimos confrontados foi com a total incapacidade do hospital de apontar alternativas e soluções para a comunicação entre o doente e os outros. Existem soluções comercias, mas os valores são astronómicos, e o próprio hospital não sabe lidar com essas soluções.

A certa altura cheguei mesmo a montar uma estrutura em alumínio com rodas, um touchscreen de 17’’, um mini-pc, e a tal câmara acoplada com o arduino a controlar os servos.
O problema é que antes mesmo de testar um dos protótipos mas evoluídos (o que de já de si foi uma complicação para convencer o hospital a colaborar…), o meu pai faleceu.

Compreensivelmente, mas também um pouco egoisticamente, o projecto ficou a um canto…

Embora existam mil e uma experiências por esse mundo fora, acho que em Portugal as coisas não estão assim tão desenvolvidas.
O problema poderá ser que o âmbito deste projecto não estar assim tão ligado à robótica que é o objecto principal deste fórum, mas se os administradores do fórum acharem por bem, poderia ser um tema muito interessante para a colaboração de todos.

Peço desculpa ao Marvin por este “off-topic”, mas compreendem que este é um assunto que não me deixa indiferente…

Quanto ao tutorial do Haarcascade, por acaso já tinha por lá passado, mas assustei-me logo quando li a frase  “…used 5000 positive frontal face patterns, and 5000 positive frontal face patterns were derived from 1000 original faces…” ?

Mas vou ganhar coragem e investir mais um pouco!
Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 16 de Março de 2010, 15:33
A ideia é boa, mas se queres manter isso num sistema embebido numa aplicação, pensa antes num arm-7 ou mesmo um arm-9 a correr linux, o arduino é um simples micro-controlador de 8 bits, não tem capacidade de processamento para fazer reconhecimento de imagens e mesmo trabalhar com imagens de uma camera já é uma grande carga de trabalho para o arduino.
Imagina, só uma imagem com uma resolução de 800*600 e com 8bits por cor, são 800*600*(3*8), são 11520000 bits, ou seja 144Kbytes se não me engano, bem mais memória que um arduino tem, e isto é só uma imagem, imagina 25 ou 30 por segundo mais todo o processamento necessário

Ja ando ha uns tempos a olhar para arm-7 mas não sei bem por onde começar, os custos iniciais parecem-me um pouco altos.  Mas penso que com um processador desses ligado a uma arduino para controlo dos elementos mecanicos é possivel fazer-se imensas coisas...
Título: Re: Face tracker (aka weekend project)
Enviado por: Afonso em 16 de Março de 2010, 18:06
Boas,

Tenho andado a trabalhar num projecto que basicamente detecta um rosto numa imagem da webcam e centra-o na imagem movendo a webcam.

Para isto utilizei 2 servos, 1 arduino, 1 webcam (ma qualidade) e 1 laptop. A nivel de software, apliquei o algoritmo de Haarcascade usando funções da biblioteca openCV (Emgu CV para C#) e a biblioteca que tenho andado a desenvolver de C# (arduinocomm).

Ola.
Também estou a tentar trabalhar com o openCV, mas a ideia é reconhecer mais do que rostos, ou seja, reconhecer alguns objectos distintos, de forma a ajudar um veículo a localizar-se no espaço. 
Tal como dizes, não é uma ferramenta fácil, e por isso não tenho conseguido ir para além dos ficheiros HAAR que se encontram na net.

Já fiz algumas experiências com o reconhecimento do olho humano, e posteriormente, o cálculo da direcção do olhar, com o objectivo de ajudar uma pessoa tetraplégica a conduzir o rato num ecrã. Foram testes preliminares, mas com a referida biblioteca (onde curiosamente também usava um sistema pan&tilt para “apontar” a câmara ao olho, embora só no momento da inicialização), já foi possível alcançar alguns resultados. Entretanto, e pelas piores razões, abandonei esse projecto…

Outra ideia que também já experimentei, foi uma espécie de detector de movimento que fazia a câmara mover-se para a zona onde o movimento foi detectado (na imagem), e um pormenor que fez alguma diferença no meu caso foi “desligar” a analise da imagem até a câmara atingir a posição da ordem inicial, e só depois voltar a analisar a nova imagem. Pelo menos no meu caso, isto resultou num movimento mas suave em sem tantos soluços.

A verdade é que a qualidade da câmara é muito importante para o resultado final.

Agora gostava de conseguir criar os tais ficheiros HAAR para vários objectos específicos, mas para além da necessidade de fotografar o objecto em causa um sem número de vezes, ainda não consegui perceber muito bem como se faz o resto do processo. Se alguém me puder ajudar, agradeço
Acho que deves começar por algo simples que depois fosse melhorado com softwares e adereços que fazem a difereça. Por exemplo um estabelizador  , lentes de alta qualidade  , até camarâs de alta qualidade. ;)
Título: Re: Face tracker (aka weekend project)
Enviado por: msaleiro em 16 de Março de 2010, 18:52
Boas!

Estou surpreendido pela positiva de ver tanta gente com interesse na Visão Computacional e nas suas aplicações :) .

No que diz respeito ao processamento de imagem em si.. posso dizer-vos para esquecerem tudo o que sejam processadores abaixo de 1 GHz se querem fazer alguma coisa de jeito. O processamento de imagem é um tipo de processamento bastante pesado, que requer ainda muita memória ( em alguns casos pode ser necessário aplicar vários filtros a uma imagem, mantendo os resultados em memória para depois combiná-los ). Para terem ideia do state-of-the-art em processamento de imagem a nivel de poder de processamento, vejam esta máquinazinha do Laboratório de Visão da Universidade de Antuérpia :P shttp://fastra2.ua.ac.be/ (http://fastra2.ua.ac.be/) são só 12TFLOPS resultantes da utilização de 13 GPUs (processadores de placas gráficas). O custo do computador é cerca de 6000 euros, o que até nem é caro tendo em conta o poder de processamento. Um servidor com o mesmo poder de processamento seria muuuuuito mais caro.

Mas para algumas experiências caseiras mais simples, um Magalhães serve :P Se forem ao blog da ydreams têm lá uns pequenos exemplos de HCI ( Human Computer Interface ) em que utilizam um Magalhães. Mas o que fazem lá não é assim nada de especial.

A nível de optimização de processamento o ideal é terem um computador com mais do que um processador e utilizarem a biblioteca OpenMP www.openmp.org/ (http://www.openmp.org/) para fazer a paralelização do processamento em múltiplos processadores.

No que diz respeito aos sistemas de visão para pessoas com deficiências vou dar-vos a conhecer dois principais exemplos. Um deles é opensource, o eyewriter http://www.eyewriter.org/ (http://www.eyewriter.org/). Basicamente é um sistema de tracking do olho que é usado para desenhar graffitis.
O outro, tem selo nacional e segundo li já recebeu alguns prémios. É o Magic Eye: http://www.magickey.ipg.pt/magic_eye.asp (http://www.magickey.ipg.pt/magic_eye.asp) que está ligado ao Instituto Politécnico da Guarda.

Continuem o vosso interesse. No que eu puder ajudar, estou disponível :)
Título: Re: Face tracker (aka weekend project)
Enviado por: senso em 16 de Março de 2010, 20:25
Na verdade a tecnologia arm está cada vez mais acessível, a NXP tem uns kits fantástico, tanto o mbed, para ser programado em visual basic se não me engano, muito simples de usar em conjunto com a plataforma .net da microsoft e depois tens os "kits" lpc expresso 1343, que têm incluido um processador arm numa placa de desenvolvimento e um programador usb e que custa só 26€ :o
http://pt.mouser.com/ProductDetail/NXP-Semiconductors/OM11048/?qs=sGAEpiMZZMvIGAkyPb0MlJWWc4XwPRSH (http://pt.mouser.com/ProductDetail/NXP-Semiconductors/OM11048/?qs=sGAEpiMZZMvIGAkyPb0MlJWWc4XwPRSH)
Como este á mais uns quantos kits da NXP, tudo dentro desta gama de preços, se fores ao site da nxp, podes fazer o download do IDE deles, que é gratuito e começar logo a programar em C, e já existe o arm-gcc para quem usa sistemas mais para os lados do linux, logo já tens vários tool-chains para usar, e ainda tens o cross-works da rowley que penso que tem uma versão gratuita mas o arm-gcc e o code red já te permitem usar e abusar do arm.
Como podes ver, actualmente ter megas de Flash para meter código, megas de ram para ter bastante liberdade, um processador de 32bits, em muitos casos com unidade de virgula flutuante incluida custa tanto como usar um simples micro-controlador de 8 bits sem nenhuma dessas vantagens, para além de que muitos dos arms correm a mais de 80MHz.
E já agora fica aqui um tópico com muitos links para fórum e grupos de users de arms e com muita informação tambem:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=89609 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=89609)
Título: Re: Face tracker (aka weekend project)
Enviado por: amando96 em 16 de Março de 2010, 20:26
Muito bom, ja tentei fazer algo para detectar objectos com o processing, mas por alguma razão não me deixa usar a webcam :(
Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 16 de Março de 2010, 21:44
Muito bom, ja tentei fazer algo para detectar objectos com o processing, mas por alguma razão não me deixa usar a webcam :(

Obrigado amando96 eu ha uns tempos andei a ver algumas aplicações em processing em especial realidade aumentada, tens este site http://www.bryanchung.net/?p=227 (http://www.bryanchung.net/?p=227) que tem uma biblioteca com exemplos com a webcam. Qual é o problema em especifico que tens ao ligar a camara?

Na verdade a tecnologia arm está cada vez mais acessível, a NXP tem uns kits fantástico, tanto o mbed, para ser programado em visual basic se não me engano, muito simples de usar em conjunto com a plataforma .net da microsoft e depois tens os "kits" lpc expresso 1343, que têm incluido um processador arm numa placa de desenvolvimento e um programador usb e que custa só 26€ :o
http://pt.mouser.com/ProductDetail/NXP-Semiconductors/OM11048/?qs=sGAEpiMZZMvIGAkyPb0MlJWWc4XwPRSH (http://pt.mouser.com/ProductDetail/NXP-Semiconductors/OM11048/?qs=sGAEpiMZZMvIGAkyPb0MlJWWc4XwPRSH)

Isto é muito interessante. Vou investigar um pouco mais.


Já agora, seguindo as sugestões aqui dadas aumentei a performance e a suavidade dos movimentos. Assim que possa coloco novos videos a demonstrar a melhoria.
Título: Re: Face tracker (aka weekend project)
Enviado por: msr em 16 de Março de 2010, 23:02
Acho que vale a pena acrescentar uma keyword a este tópico: DSP (http://en.wikipedia.org/wiki/Digital_signal_processor) (Digital Signal Processors)

Penso que serão os sistemas mais utilizados neste tipo de coisas (exigentes a nivel de processamento), certo msaleiro?
Título: Re: Face tracker (aka weekend project)
Enviado por: msaleiro em 17 de Março de 2010, 01:06
Os DSPs são muito usados para aplicações de processamento de sinal. No entanto não tenho visto muitas aplicações de visão em DSPs. É mais comum ver implementações em FPGAs e em computadores normais. No entanto em aplicações de processamento de audio, ou processamento de voz os DSPs já são muito usados. Geralmente quando os DSPs são usados na visão computacional é mais para fazer um pré processamento da imagem como por exemplo a aplicação de filtros de maneira que a imagem já chegue com determinadas características realçadas quando chega ao computador que realmente fará o reconhecimento de objectos. Alguns desses filtros podem ser por exemplo a conversão do espaço de cor de RGB para HSV ou LAB, a filtragem de ruído, alisamento da imagem, segmentação, realçamento de arestas, realçamento de contornos, etc. Mesmo assim as FPGAs para isso são ainda melhores que os DSPs porque nesse caso os filtros são aplicados mesmo por hardware e não por software. Se não me engano, há pelo menos uma equipa de futebol robótico nacional que utiliza FPGA para fazer uma segmentação das imagens obtidas pelas câmaras omnidireccionais.

Já agora, para quem não sabe, FPGA significa Field Programmable Gate Array. De uma forma simples, as FPGAs são circuitos integrados reconfiguráveis. Possuem milhares de transístores que podem ser ligados de diversas maneiras de forma a que o próprio circuito faça o que for pretendido sem ter k estar a correr nenhum código. Enquanto num microcontrolador se coloca um programa que é executado linha a linha, numa FPGA coloca-se um circuito combinatório ou sequencial. Daí que se possa por exemplo meter numa FPGA sistemas completos com processador de 32 bits, módulos de DSP, etc. As FPGAs podem ser essencialmente programadas em VHDL, Verilog ou por blocos, dependendo este último do fabricante e do software do fabricante. Também há quem as programe em C, mas é menos eficiente.

Resumindo, os DSPs e as FPGAs quando usados em visão computacional são mais usados no sentido de tratar a imagem de forma a melhorá-la ou a realçar determinadas características. Este tipo de tratamento geralmente é feito através de convoluções, que são operações que alguns DSPs conseguem fazer por hardware, sendo por isso bastante rápido. Após a imagem ser tratada, geralmente é necessário um computador para fazer o processo de reconhecimento de objectos/faces/etc. Neste caso os computadores são mais usados porque os métodos de reconhecimento não são apenas convoluções, mas sim uma série de condições que podem resultar na extracção de uma série de características que posteriormente são submetidas a novas condições. Neste caso os computadores normais são mais eficientes porque possuem maior velocidade de processamento e maior quantidade de memória para armazenamento de características que vão sendo extraídas das imagens.

Não sei se me fiz entender, mas espero k sim... é k cheguei agora a casa e tou com umas quantas "mines" em cima :P
Título: Re: Face tracker (aka weekend project)
Enviado por: Rebel em 17 de Março de 2010, 10:28
Só para acrescentar mais umas coisitas sobre as FPGA's.
Trabalhei cerca de dois anos com FPGA's da Altera que permitiam ser configuradas com um Processador 16 bits, o Nios, que era por sua vez programado em C. Conforme o numero de portas da FPGA, era possível colocar lógica (And, Or, Nand Shift Register, Uart, etc) à volta do processador. Só posso dizer que são bichinhos bem poderosos... e caros ;)
Título: Re: Face tracker (aka weekend project)
Enviado por: guibot em 22 de Julho de 2010, 13:38
As possibilidades que estas aplicações nos dão são mesmo imensas, é só preciso ter imaginação.

Marvin, o código que deixei neste tópico (http://lusorobotica.com/index.php?topic=2591.0) pode-te dar uma ideia para centrares a face em relação à camara e também para evitar saltos nos movimentos dos servos.. estou a usar um low-pass filter deste género, quanto menor o valor do filtro mais tempo levará a chegar até à posição de destino:

Filtro = 0.01;
ValorDestino = ValorAntigo * (1.0 - Filtro) + ValorDestino * Filtro;

A PSEye é uma câmara barata, versátil, e de excelente qualidade, e ainda tem um microfone array para o qual estão a ser desenvolvidos drivers.. mas que ainda não consegui por nenhum a funcionar.

Não deixes o teu projecto "morrer"  ;)

Título: Re: Face tracker (aka weekend project)
Enviado por: Marvin em 22 de Julho de 2010, 14:32
Obrigado Guilherme! Vou implementar o teu filtro, embora na versão mais avançada isto já n aconteça (os saltos dos servos).

O problema do meu projecto foi falta de tempo, exames e volume de trabalho no escritorio não ajudaram.

Logo a noite vou tentar fazer um video c a nova versão, ainda só com uma camara.

Entretanto chegou a minha camara cctv wireless portanto em breve tambem vai haver novidades.
Título: Re: Face tracker (aka weekend project)
Enviado por: eduardo_d em 25 de Julho de 2010, 19:15
Bom, n sei se ainda irá a tempo mas encontrei este link,
http://blog.aicookbook.com/2010/06/building-a-face-tracking-robot-headroid1-with-python-in-an-afternoon/ (http://blog.aicookbook.com/2010/06/building-a-face-tracking-robot-headroid1-with-python-in-an-afternoon/)

a programação foi feita em python, mas cm está td explicadinho n será dificil migrar para outras linguagens  :)

abr a tds