LusoRobótica - Robótica em Português

Software => C/C++ => Tópico iniciado por: senso em 21 de Outubro de 2010, 20:38

Título: Iniciação ao openCV - Ajuda
Enviado por: senso em 21 de Outubro de 2010, 20:38
Boas noites a todos, venho-vos pedir ajuda com uns tutoriais de introdução ao openCv, de preferência em ambiente ubuntu e usando C++, como têm aparecido por aqui muitos projectos que usam opneCV é porque nem é muito dificil, mas a wiki do openCv é basicamente um amontoado de links e mais links, e depois um é em C, outro em python, um em Mac outro no windows, mais uns em ubuntu 9.04, se alguem tiver por ai algo para se ler digam  ;)
Já saquei o livro do openCv, eu sei que o devia ter comprado...
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: microbyte em 21 de Outubro de 2010, 21:43
Para que é que queres aprender processamento de imagem?  :P
É desta que vamos começar a usar o OpenCV, senso?
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 21 de Outubro de 2010, 21:52
Espero que sim, após uma horita de volta disto já está instalado(ou melhor dizendo compilado do source, que instalar é para os lados dos windows), agora tenho umas 500 páginas de manual á mainha frente :s
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: microbyte em 21 de Outubro de 2010, 22:00
Por acaso acho que nunca vi aqui nenhum projecto que usasse o OpenCV...
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 21 de Outubro de 2010, 22:05
Andam aqui uns quantos que seguem faces o ICU, o Touro do outro rapaz, que segue um pano vermelho e anda ai mais um ou dois que detectam faces usando OpenCV.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: microbyte em 21 de Outubro de 2010, 22:06
Andam aqui uns quantos que seguem faces o ICU, o Touro do outro rapaz, que segue um pano vermelho e anda ai mais um ou dois que detectam faces usando OpenCV.
Esse é uma versão do OpenCV para o Processing, creio que não é o OpenCV a sério...
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 21 de Outubro de 2010, 22:08
Sim é para processing, é simplificado imagino eu.
Bem, só pelo suporte a multiprocessador já ganhou dois centimos..
Tese de doutouramento: portar OpenCV para Cuda lol.
Ninguem recomenda nada para começar?
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: XicoMBD em 21 de Outubro de 2010, 22:25

Andam aqui uns quantos que seguem faces o ICU, o Touro do outro rapaz, que segue um pano vermelho e anda ai mais um ou dois que detectam faces usando OpenCV.
Embora já tenha mexido nela, a que utilizei no meu "touro" não foi a biblioteca de openCV para processing, mas sim uma chamada JMyron.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Marvin em 21 de Outubro de 2010, 23:25
Costumo usar openCV nos meus projectos, como podem ver pelos meus posts aqui no forum. Tem um wrapper de .net mas chama as funçoes base em c++.

De facto a informação está um pouco espalhada e tenho-me baseado muito em papers e em algoritmos de reconhecimento facial, tendo em conta que já estao implementados no opencv é só chamar as funções. Tal como o Haarcascades, OpticalFlow, etc.

Aquilo é basicamente um "mundo" onde tens praticamente tudo o q foi estudado em computer vision, daí não aconselhar os "tutoriais" ou tentar ler o manual pois é deveras extenso e muita coisa não faz sentido se não perceberes os conceitos por tras.

A melhor forma é ver a coisa ao contrario, o que queres fazer com opencv? Reconhecer caras? Vigilancia? Seguir cores? Editar imagens?

Com base nisto então pesquisas os algoritmos e implementas no opencv. Pelo menos tem sido essa a minha forma de desenvolver.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 21 de Outubro de 2010, 23:54
E como é que encontro os algoritmos que quero, procuro opencv e o que quero fazer?
O que quero fazer é relativamente complexo, mete duas cameras a funcionar em paralelo, um ambiente com muito movimento e "ruido", será detectar linhas, obstaculos, formas, e depois tratar isso, tambem deve meter mascaras com força em cima, passagem entre diferentes modelos de cores(RGB, HSL, raw e sei lá que mais, que ainda nem sei bem o que tenho pela frente, mas sei que não é algo que vou fazer em 15 dias, nem em 6 meses lol)
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Marvin em 22 de Outubro de 2010, 00:48
E como é que encontro os algoritmos que quero, procuro opencv e o que quero fazer?
O que quero fazer é relativamente complexo, mete duas cameras a funcionar em paralelo, um ambiente com muito movimento e "ruido", será detectar linhas, obstaculos, formas, e depois tratar isso, tambem deve meter mascaras com força em cima, passagem entre diferentes modelos de cores(RGB, HSL, raw e sei lá que mais, que ainda nem sei bem o que tenho pela frente, mas sei que não é algo que vou fazer em 15 dias, nem em 6 meses lol)

http://opencv.willowgarage.com/wiki/VideoSurveillance (http://opencv.willowgarage.com/wiki/VideoSurveillance)  -> isto vai-te ajudar com as formas, obstaculos e movimentos.

Aconselho-te a ler sobre SURF, nao o desporto mas sim Speed Up Robust Features. --> http://opencv.willowgarage.com/documentation/cpp/feature_detection.html (http://opencv.willowgarage.com/documentation/cpp/feature_detection.html)

Em relação aos filtros, tens imensos mas tem de se perceber o que queres fazer, mas em ultimo caso manda-te para o machine learning  -> http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_ml.htm (http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_ml.htm)

Espero q isto ajude.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 22 de Outubro de 2010, 00:55
Acho que dá para tirar um curso só em opencv....
Obrigado pela ajuda ;)
Tenho mesmo muito que ler.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Ricardo em 22 de Outubro de 2010, 09:35
Eu tenho o opencv meio implementado no meu robot, mas o processamento é todo feito do lado do PC. Pouco mais faz que detectar movimento e mover a camara para esse local (a ideia será seguir esse movimento com o robo). Existe algum pic mais evoluido que também consiga fazer isso? e que utilize o opencv, ainda que adaptado?
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Marvin em 22 de Outubro de 2010, 09:54
Acho que dá para tirar um curso só em opencv....
Obrigado pela ajuda ;)
Tenho mesmo muito que ler.

Em computer vision ha imensa gente a fazer mestrados, doutoramentos e pos docs, como opencv é a implentação desses algoritmos logo tens toda a razão. :) Dá para tirar um curso.

Eu tenho o opencv meio implementado no meu robot, mas o processamento é todo feito do lado do PC. Pouco mais faz que detectar movimento e mover a camara para esse local (a ideia será seguir esse movimento com o robo). Existe algum pic mais evoluido que também consiga fazer isso? e que utilize o opencv, ainda que adaptado?

Eu tambem implemento dessa forma, sendo o computador o "cerebro" pois ainda n encontrei nenhum microcontrolador acessivel que tenha essa capacidade de processamento. Mas pelo que percebo a BeagleBoard ja é capaz de processar a imagem correctamente, mas já estamos a falar de um computador, ainda que pequeno. O surveyor (baseado em Blackfin) já faz processamento de imagem mas ainda não me debrucei sobre isso.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: KammutierSpule em 22 de Outubro de 2010, 11:02
Este projecto que estou a desenvolver anunciado aqui:
http://lusorobotica.com/index.php?topic=1358.msg13391#msg13391 (http://lusorobotica.com/index.php?topic=1358.msg13391#msg13391)
usa openCV.

A minha experiencia com o openCV tem revelado que a documentação não é espetacular. Mas isto deve-se À natureza "volatil" de desenvolvimento da biblioteca, que está em constante avanço e acrescento de funcionalidades. Sim, já tem suporte para cuda e android. (SVN)

Provavelmente se encontrares tutorials na net estes estão "desactualizados", isto é, funcionam, mas provavelmente já nao é a maneira mais correcta de fazer as coisas. (falo por exemplo na declaração de tipos de variaveis do openCV... etc)

Como disseram depende bastante se o uso é em C ou C++ ou etc..

Na minha opinião os passos para se trabalhar e integrar com o openCV são (do básico até ao utilizador avançado)

. Procurar tutorials na net para ter uma visão geral do funcionamento da biblioteca.
. Ambientar-se com a referencia online da biblioteca para a linguagem q se esta a usar.
. Estudar exemplos basicos de codigo que vem juntamente com a biblioteca openCV (versoes do SVN)
. Procurem slides de aulas de universidades (estranjeiras e tambem algumas tugas) que falem de processamento de visão assim por alto
. Quando usarem funcionalidades avançadas, leiam antes um artigo (generico) relacionado com as funcionalidades que vao tentar implementar

Senso:
Citar
O que quero fazer é relativamente complexo, mete duas cameras a funcionar em paralelo, um ambiente com muito movimento e "ruido", será detectar linhas, obstaculos, formas, e depois tratar isso, tambem deve meter mascaras com força em cima, passagem entre diferentes modelos de cores(RGB, HSL, raw e sei lá que mais, que ainda nem sei bem o que tenho pela frente, mas sei que não é algo que vou fazer em 15 dias, nem em 6 meses lol)

Neste texto todo não explicas o que queres fazer, dizes o que vais fazer mas não o que isso pretende fazer. O que fazes com as linhas detectadas? com os obstaculos detectados? e tratas essas detecções para que finalidade?


Marvim:
Já implementaste com sucesso algum sistema com usando "feature points" ?
alguem?

KS
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Ricardo em 22 de Outubro de 2010, 11:16
Marvim:
Já implementaste com sucesso algum sistema com usando "feature points" ?
alguem?
KS

Com "feature points" presumo que estás a falar da identificação de "objectos" pre-definidos, é isso?
Uma das coisas que gostava que o meu robô fizesse era olhar em volta e perceber onde estava, através da observação de determinados objectos entretanto carregados. E se este processo fosse incremental, ou seja, ir aprendendo ao longo da sua vida, ainda melhor. Mas só o facto de ser necessário "milhares" de fotos de cada objecto a memorizar (pelo menos de forma a utilizar o método haas), crialogo sérios obstaculos.

Existe uma forma  melhor? É possivel processar uma imagem e ver, por exemplo, uma porta? Um quadro? Um interruptor?

Vou voltar também a pesquisar sobre este assunto.




Título: Re: Iniciação ao openCV - Ajuda
Enviado por: KammutierSpule em 22 de Outubro de 2010, 12:12
"Com "feature points" presumo que estás a falar da identificação de "objectos" pre-definidos, é isso?"

Não só isso... ou não necessáriamente

http://en.wikipedia.org/wiki/Feature_detection_(computer_vision) (http://en.wikipedia.org/wiki/Feature_detection_(computer_vision))
http://en.wikipedia.org/wiki/Interest_point_detection (http://en.wikipedia.org/wiki/Interest_point_detection)
http://en.wikipedia.org/wiki/Scale-invariant_feature_transform (http://en.wikipedia.org/wiki/Scale-invariant_feature_transform)

"Uma das coisas que gostava que o meu robô fizesse era olhar em volta e perceber onde estava, através da observação de determinados objectos entretanto carregados. E se este processo fosse incremental, ou seja, ir aprendendo ao longo da sua vida, ainda melhor. Mas só o facto de ser necessário "milhares" de fotos de cada objecto a memorizar (pelo menos de forma a utilizar o método haas), crialogo sérios obstaculos.

Existe uma forma  melhor? É possivel processar uma imagem e ver, por exemplo, uma porta? Um quadro? Um interruptor?"

Claro que é,

http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping (http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping)

visualiza também estes videos:
Realtime AR Tracking in Sejong University (http://www.youtube.com/watch?v=NF1z0rgZZEs&feature=player_embedded#)
http://mi.eng.cam.ac.uk/~sjt59/hips.html (http://mi.eng.cam.ac.uk/~sjt59/hips.html)

KS
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Marvin em 22 de Outubro de 2010, 15:30

Marvim:
Já implementaste com sucesso algum sistema com usando "feature points" ?
alguem?



O projecto .netRC ( http://lusorobotica.com/index.php?topic=2834.msg30431 (http://lusorobotica.com/index.php?topic=2834.msg30431) )  trabalha com feature points para seguir a direcção da cara, mas dai a ter "sucesso" não sei bem... os bugs são imensos devido a variação da luz e movimento da camara ou seja ruido.

Tenho de estar constantemente a fazer reset as features, mas quando "agarra" processa bem e rapido.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 22 de Outubro de 2010, 23:59
Este projecto que estou a desenvolver anunciado aqui:
http://lusorobotica.com/index.php?topic=1358.msg13391#msg13391 (http://lusorobotica.com/index.php?topic=1358.msg13391#msg13391)
usa openCV.

A minha experiencia com o openCV tem revelado que a documentação não é espetacular. Mas isto deve-se À natureza "volatil" de desenvolvimento da biblioteca, que está em constante avanço e acrescento de funcionalidades. Sim, já tem suporte para cuda e android. (SVN)

Provavelmente se encontrares tutorials na net estes estão "desactualizados", isto é, funcionam, mas provavelmente já nao é a maneira mais correcta de fazer as coisas. (falo por exemplo na declaração de tipos de variaveis do openCV... etc)

Como disseram depende bastante se o uso é em C ou C++ ou etc..

Na minha opinião os passos para se trabalhar e integrar com o openCV são (do básico até ao utilizador avançado)

. Procurar tutorials na net para ter uma visão geral do funcionamento da biblioteca.
. Ambientar-se com a referencia online da biblioteca para a linguagem q se esta a usar.
. Estudar exemplos basicos de codigo que vem juntamente com a biblioteca openCV (versoes do SVN)
. Procurem slides de aulas de universidades (estranjeiras e tambem algumas tugas) que falem de processamento de visão assim por alto
. Quando usarem funcionalidades avançadas, leiam antes um artigo (generico) relacionado com as funcionalidades que vao tentar implementar

Senso:
Citar
O que quero fazer é relativamente complexo, mete duas cameras a funcionar em paralelo, um ambiente com muito movimento e "ruido", será detectar linhas, obstaculos, formas, e depois tratar isso, tambem deve meter mascaras com força em cima, passagem entre diferentes modelos de cores(RGB, HSL, raw e sei lá que mais, que ainda nem sei bem o que tenho pela frente, mas sei que não é algo que vou fazer em 15 dias, nem em 6 meses lol)

Neste texto todo não explicas o que queres fazer, dizes o que vais fazer mas não o que isso pretende fazer. O que fazes com as linhas detectadas? com os obstaculos detectados? e tratas essas detecções para que finalidade?


Marvim:
Já implementaste com sucesso algum sistema com usando "feature points" ?
alguem?

KS
Linhas para saber que está dentro do campo e para detecção espacial, obstaculos para não bater nos amigos ou nos adversários, terá de distinguir amigo de inimigo, bola, pois é isso que ele anda á procura de uma bola para agarrar, saber o que é uma baliza, isto tudo com uma camera frontal e uma omnidireccional, tambem quero usar máscaras pois nem todos os dados das cameras são uteis.
Já agora, assim o mais basico para treinar primeiro no meu portatil com a webcam, para capturar imagem/video em tempo real para tentar uma simples detecção de faces e começar a usar transformadas para procurar bordas(edges) ou linhas.
Obrigado a todos pela ajuda fornecida! ;)
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Marvin em 23 de Outubro de 2010, 02:39
Linhas para saber que está dentro do campo e para detecção espacial, obstaculos para não bater nos amigos ou nos adversários, terá de distinguir amigo de inimigo, bola, pois é isso que ele anda á procura de uma bola para agarrar, saber o que é uma baliza, isto tudo com uma camera frontal e uma omnidireccional, tambem quero usar máscaras pois nem todos os dados das cameras são uteis.
Já agora, assim o mais basico para treinar primeiro no meu portatil com a webcam, para capturar imagem/video em tempo real para tentar uma simples detecção de faces e começar a usar transformadas para procurar bordas(edges) ou linhas.
Obrigado a todos pela ajuda fornecida! ;)

A bola tem uma cor especifica? Se sim é facil, senão vais ter de ir por edge detection. Lembra-te é q a velocidade de processamento da imagem para coisas deste tipo em movimento pode ser pesada.

Para a detecção de face e captura de video pesquisa estes temas:

cvCreateCameraCapture -> para a camara
cvHaarDetectObjects -> para a detecção de face (usas um haarcascade treinado)

Se quiseres/puderes usar C#, usa o Emgucv, se precisares de sample code para alem do q ja vem com o emgu eu posso-te fornecer algumas coisas.

Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 23 de Outubro de 2010, 02:53
Estou a utilizar c/c++ em ambiente linux/ubuntu, a bola actualmente tem uma cor predominante saturada, mas pode ter mais que uma cor, mas tem sempre uma cor dominante, tenho de usar edge detection, pois a bola pode mudar de jogo para jogo, ou podem mudar as regras.
Acho que o melhor mesmo é ler o livro do opencv, sempre é uma base de começo e dai começar a brincar.
Edit:
Já agora, o livro é este:
http://www.amazon.com/gp/product/0596516134/ref=olp_product_details?ie=UTF8&me=&seller= (http://www.amazon.com/gp/product/0596516134/ref=olp_product_details?ie=UTF8&me=&seller=)
Já é de 2008  :-X
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: KammutierSpule em 24 de Outubro de 2010, 12:24
Citação de: senso
obstaculos para não bater nos amigos ou nos adversários, terá de distinguir amigo de inimigo, bola, pois é isso que ele anda á procura de uma bola para agarrar, saber o que é uma baliza....

pois a bola pode mudar de jogo para jogo, ou podem mudar as regras.

Peço desculpas, mas continuo sem perceber qual a finalidade ou contexto da coisa. Falas em regras, estás a falar de algum concurso em especifico? quais sao as regras e objectivos e cenario?

KS
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: GnGz em 24 de Outubro de 2010, 13:02
Tambem gostava de aprender ... mexo em vb.net
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: VascoP em 24 de Outubro de 2010, 13:29
Citação de: senso
obstaculos para não bater nos amigos ou nos adversários, terá de distinguir amigo de inimigo, bola, pois é isso que ele anda á procura de uma bola para agarrar, saber o que é uma baliza....

pois a bola pode mudar de jogo para jogo, ou podem mudar as regras.

Peço desculpas, mas continuo sem perceber qual a finalidade ou contexto da coisa. Falas em regras, estás a falar de algum concurso em especifico? quais sao as regras e objectivos e cenario?

KS

Quase de certeza que se refere a futebol robótico.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: Marvin em 24 de Outubro de 2010, 16:08
Tambem gostava de aprender ... mexo em vb.net

Não querendo ser "elitista" mas mais valia dares o passo para C#. Praticamente a mesma coisa mas tens mto mais documentação na web com projectos em C# do q em vb.net. Claro esta q podes usar as duas linguagens mas fica mais legivel se apenas fizeres numa.

Para .net o melhor é usares a biblioteca Emgu http://www.emgu.com/wiki/index.php/Main_Page (http://www.emgu.com/wiki/index.php/Main_Page) (acho q tem exemplos em vb.net)
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: GnGz em 24 de Outubro de 2010, 17:24
Tambem gostava de aprender ... mexo em vb.net

Não querendo ser "elitista" mas mais valia dares o passo para C#. Praticamente a mesma coisa mas tens mto mais documentação na web com projectos em C# do q em vb.net. Claro esta q podes usar as duas linguagens mas fica mais legivel se apenas fizeres numa.

Para .net o melhor é usares a biblioteca Emgu http://www.emgu.com/wiki/index.php/Main_Page (http://www.emgu.com/wiki/index.php/Main_Page) (acho q tem exemplos em vb.net)

Tens toda a razão . Acho que vou ir para o C# e depois até é mais facil de ir para o micro .net framework
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: microbyte em 24 de Outubro de 2010, 20:58
O projecto que o senso fala é futebol robótico, liga média.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: KammutierSpule em 24 de Outubro de 2010, 22:34
O projecto que o senso fala é futebol robótico, liga média.

E estao a desenvolver robots, por alguma universidade/instituição ou é particular?

KS
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 24 de Outubro de 2010, 22:47
Universidade de Aveiro, robots feitos, hardware mais que escolhido e definido, linguagem usada é c/c++, a ideia é pegar no OpenCv para melhorar alguns aspectos da visão, já ando a ler partes da wiki e tal, mas compilar código em ubuntu está dificil, tenho de ir desenterrar um makefile decente.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: KammutierSpule em 25 de Outubro de 2010, 10:37
Universidade de Aveiro, robots feitos, hardware mais que escolhido e definido, linguagem usada é c/c++, a ideia é pegar no OpenCv para melhorar alguns aspectos da visão, já ando a ler partes da wiki e tal, mas compilar código em ubuntu está dificil, tenho de ir desenterrar um makefile decente.

ah Ooks, traduzindo: Estás a estudar a transação das bibliotecas gráficas já desenvolvidas no Cambada, para passarem a usar apenas openCV.
Já tinha conhecimento que isso estava a ser feito =)

Bom trabalho!

KS
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 25 de Outubro de 2010, 17:27
Já agora, podes dizer o teu nome, como tens Aveiro na localização, não estudas na UA?
Pelo que percebi tentaram usar OpenCV quando ele estava a ser criado á muitos anos atrás e como aquilo era muito limitado deixaram a ideia de parte.
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: KammutierSpule em 25 de Outubro de 2010, 20:43
Já agora, podes dizer o teu nome, como tens Aveiro na localização, não estudas na UA?
Pelo que percebi tentaram usar OpenCV quando ele estava a ser criado á muitos anos atrás e como aquilo era muito limitado deixaram a ideia de parte.

Já acabei o curso,... mas mantenho ligações "superiores" aos assuntos delicados :P
Eu uso openCV À cerca de um ano e tal.. e desde então que todos os dias evolui qq coisita! se usares a versão SVN quase todos os dias tens updates a fazer...

Continua a ser limitado em muitos aspectos (alguns ja discutidos aqui) mas é uma boa base de trabalho! ... talvez a melhor que há.. não há muitas mais (opensource/freeware)

KS

ps: nome,... googla e encontrarás! :O
Título: Re: Iniciação ao openCV - Ajuda
Enviado por: senso em 25 de Outubro de 2010, 20:52
Quando googlo e meto ubuntu junto no nome aquilo deixa de dar resultados, o que está a complicar a coisa.