Fórum Reconhecimento de imagem pela webcam #371844
01/07/2009
0
Eu ja fiz uma pesquisa no forum sobre o assunto, mas não encontrei nada com o que realmente quero.
Bom estou querendo aprender isso apenas para aprender novas tecnologias.
Quero fazer um aplicativo simples onde ele vai conectar com a webcam (até isso eu achei topicos no forum de como conectar). Mas o diferencial é o seguinte queria que o aplicativo consiga reconhecer quado eu levanto a mao por exemplo e o aplicativo executar uma ação.
Para facilitar nesse primeiro instante.... pensei em algo que talvez seja mais facil... na tela do meu aplicativo que vai mostrar as imagens captadas da webcam vou desenhar um circulo, e qdo alguma imagem se movimentar dentro deste circulo o aplicativo dispara uma ação.
Minha duvida é como ficar verificando isso na imagem da webcam.
Obrigado.
Osocram
Curtir tópico
+ 0Posts
01/07/2009
Osocram
Gostei + 0
02/07/2009
Osocram
Gostei + 0
02/07/2009
Lightshine
Li seu post e confesso que gostei do seu interesse em sempre procurar aprender. Esse é o espirito de um grande profissional ^.^
Bom, eu particularmente ainda não trabalhei integrando Delphi e Webcam.
Acho que uma forma de fazer isso seria fazendo a captura da imagem da webcam e comparando pixel a pixel.
Se estiver igual é porque não houve movimento, se estiver diferente houve movimento ai sim seria disparada a ação. Não creio haver necessidade do circulo para limitar uma área como você disse.
Mas aqui onde estou não tenho o Delphi instalado, se quiser me manda uma MP com seu msn e eu te add quando chegar em casa.
Assim podemos pensar desenvolver juntos. Seria uma rotina interessante e válida de aprendizado.
Lightshine.
Gostei + 0
02/07/2009
Willian
Talvez o embasamento teórico desses links possa ajudar:
[url]http://idgnow.uol.com.br/10anos/2007/10/31/idgnoticia.2007-10-31.1721951100/[/url]
[url]http://informatica.hsw.uol.com.br/realidade-expandida.htm[/url]
Boa sorte e sucesso!
Gostei + 0
02/07/2009
Osocram
<Willian> qdo chegar em casa vou dar uma lida nesses artigos. Vlw.
Gostei + 0
03/07/2009
.lg.
A minha primeira ideia que me veio a cabeça é trabalhar com a imagem em preto e branco. assim fica mais fácil distinguir um certo movimento de imagem. O Windows 7 tem um suporte desde mas é para monitor touchscreen. Já devem ter visto o filme do 007 quantum of solare. um painel onde o cara coloca uma nota sobre uma mesa e a mesa mostra imagens. Isto existe e tem pra comprar.
A questão do movimento... a melhor frma de trabalhar seria com codigo do tipo byte. ou melhor dizer 0 ou 1. Onde:
0 = Branco 1 = Preto
A questão é:
Fazer um mapa. uma matriz de 0 de uma escala onde seria adaptado a imagem. onde fosse passando a mancha preta, mudaria a matriz pra 1 onde ela se passa e o mesmo para o branco.
Assim definir ações de acordo com uma quantidade de posições que forem alteradas.
Resumindo: Quando fizer um movimento, seu mapa interpreta o movimento pela matriz de 0 e 1. e executa a ação gravada para aquele movimento.
Vou começar a elaborar minha ideia. Essa é a que me veio a cabeça.
Trabalhar com imagem colorida seria mais complicado, penso eu. Mas nada é impossível.
PS.: Fico imaginando se o que você quer fazer é algo do tipo que aparece no clip da música ´Ayo Tecnology´, hehehe.
Abraços,
.lg.
Gostei + 0
03/07/2009
Osocram
Mas voltando ao nosso assuto... Eu pensei em jogar alguns filtros na imagem para faze contraste e guardar essa matriz (nem sei como fazer isso ainda, estou apenas nas ideias) dae depois ir comparando isso.
Mas vai fazendo a sua ideia se conseguir algo me avisa.. se eu conseguir algo eu posto aqui tbm.
Gostei + 0
03/07/2009
Willian
Honestamente não sei se um mapa de cada pixel (matriz) é a melhor idéia. Deixem me explicar: uma imagem, com movimentos suaves, tem 24 quadros por segundo. Ou seja, 24 ´telas´ num segundo. Se levarmos em conta uma imagem 360 x 240 (tamanho ´padrão´) temos 86400 pixels por quadro, vezes 24 quadros: 2.073.600 pixels a serem analisados por segundo!!!
Pessoal, analisar mais de 2 milhões de pixels, analisar sua matriz, tomar as decisões e tudo mais em apenas 1 segundo... talvez esteja enganado, talvez tenhamos processadores de ´sobra´ pra isso mas acho que o assunto merece uma pesquisa mais profunda... qq novidade postem aqui pq o assunto me interessou tb.
Gostei + 0
03/07/2009
Osocram
Gostei + 0
03/07/2009
.lg.
Eu sei disso.
No caso usamos uma escala menor. Não sei ao certo como vou fazer, mas tambem não vou fazer um mapa de 2.073.600 pixels. Pode ser que eu pegue a resolução que você mencionou e a encaixe para um quadro menor adaptando a escala.
eu poderia usar um padrão de 10x10 e adaptar uma imagem de 360x240. Onde pegaria certos pontos da imagem para ser o modificador do ponto do mapa.
Vou tentar desenvolver um exemplar e vou posta-lo aqui.
[gravado no favoritos]
Gostei + 0
03/07/2009
Osocram
Quadrado da direita da um next no dataset e o quadrado da esquerda da um prior no dataset.
dae pensei de 2 maneiras p fazer isso...
1) em vez de mapear o quadrado inteiro eu posso mapear apenas a berada do quadrado e vou saber qdo algo tiver la dentro... (imagino esse movimentos sendo feito com as mãos)
2) imagino a pessoa segurando um objeto de uma cor especifica que não tenho no ambiente.
Gostei + 0
06/07/2009
Osocram
Gostei + 0
06/07/2009
Osocram
Usei um componente VideoCap, consegui capturar as imagens da minha webcam, conseguir definir uma area especifica para eu ficar monitrando.
Dae digamos que eu tiro um print desta area e guardo em um Image1 do tipo TImage, e depois inicio um timer que eu fico disparando print no mesmo bloco so que agora armazenando em um outro Image2. Pois o primeiro vou usar como meu valor Default.
Então leio pixel a pixel os 2 e comparando o pixel[1,1] do image1 com o do Image2. Se forem diferentes eu somo isso em uma variavel ContadorDif e tenho tbm um ContadorTotal no qual eu conto qtos pixel eu percorri.
E pq eu fiz isso? Bom tinha em mente que se um mosquito entrasse nessa area ou algum outro objeto a minha camera iria tirar um print e na comparação iria dar diferença, então com os dois contadores eu posso tirar uma porcentagem de diferença.
Ohhhhhh muito esperto ,hein?!??!?
Tbm achei XD
Até chegar a hora de testar... e dar errado de cara.
ó.Ò dae fiquei comparando as duas imagens e realmente eram um pouco diferente tipo 100¬ diferente. Mas simplesmente pq a imagem aqui na minha camera fica oscilando entre claro e escuro... da pouca diferença, mas como eu compara as cores em Hexdecimal (pelo menos eu acho que é hexa) então qualquer variação por menor que seja da diferença.
Fiquei imaginando como comparar numeros do tipo $00FFAA3232 com $FF008484 é um pouco assustador p quem não esta acostumado e ver esses tipo de numeros todos dia.... mas assim que parei um pouco e pensei um pouco mais vi que era simples a resposta. Era so ver qual era o maior numero subtrair um do outro e ver os resultados. Fiz isso algumas vezes até chegar a um resultado que era o maior. Então adotei este resultado como sendo meu coeficiente MAGICO.
Bom esta funcionando assim.
Mas ainda não quero achar outras soluções.... E sim até que esta rapido para detectar os movimentos
Bom por hj é so pessoal.
assim que tiver mais novidade eu posto aqui.
Gostei + 0
23/07/2009
Pedroso
http://forum.devmedia.com.br/viewtopic.php?t=97081&highlight=
http://forum.devmedia.com.br/viewtopic.php?t=95775&highlight=
fiquem a vontade.
Gostei + 0
23/07/2009
Osocram
Interessante... assim chegar em casa vou me cadastrar la.
(PS. postei sem querer no seu topico antigo)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)