WEBCAM : Como configurar parametros internos ?

Programação C em geral

Moderadores: 51, guest2003

WEBCAM : Como configurar parametros internos ?

Mensagempor andre_luis » 20 Ago 2011 17:26

Olá Pessoal,


Já estou usando uma camera sem problemas pelo C++, e a biblioteca OpenCV.
Assim, a obtenção de dados da camera, está ok.

O problema é que eu gostaria de acessa a camera, para configurá-la.
Isso porque na aplicação final, alguns parametros tem de estar padronizados ( contraste, hue, otimização por velocidade, disabilitar ganho automático, etc... ).
Sei que alguns fazem isso por DLL, e que muito provavelmente dependa do modelo da câmera.

Entretanto, como nesta faze incial teremos um grau de liberdade para escolher o modelo de camera, isso não será problema.

Alguem possui alguma dica de onde procurar por esse tipo de informação ?

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 22 Ago 2011 21:34

http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html

bool VideoCapture::set(int property_id, double value)
Parameters:

property_id –

Property identifier. Can be one of the following:
CV_CAP_PROP_POS_MSEC Film current position in milliseconds or video capture timestamp
CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next
CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file (0 - start of the film, 1 - end of the film)
CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream
CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream
CV_CAP_PROP_FPS Frame rate
CV_CAP_PROP_FOURCC 4-character code of codec
CV_CAP_PROP_FRAME_COUNT Number of frames in the video file
CV_CAP_PROP_FORMAT The format of the Mat objects returned by retrieve()
CV_CAP_PROP_MODE A backend-specific value indicating the current capture mode
CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras)
CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras)
CV_CAP_PROP_SATURATION Saturation of the image (only for cameras)
CV_CAP_PROP_HUE Hue of the image (only for cameras)
CV_CAP_PROP_GAIN Gain of the image (only for cameras)
CV_CAP_PROP_EXPOSURE Exposure (only for cameras)
CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB
CV_CAP_PROP_WHITE_BALANCE Currently unsupported
CV_CAP_PROP_RECTIFICATION TOWRITE (note: only supported by DC1394 v 2.x backend currently)
value – value of the property.

Sets a property in the VideoCapture backend.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 22 Ago 2011 22:44

Muito obrigado.
Não imaginava que até nesse tipo de acesso a biblioteca desse suporte.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor andre_luis » 23 Ago 2011 21:37

Rapaz,


Estou com um problema.
O meu programa foi estruturado usando o tipo manipulador de imagens CvCapture enquanto essa função que voce comentou é para o caso do VideoCapture.
Eu até instanciei um exemplo pronto com esta função, mas as alterações não persistem na camera após executadas.

Vou continuar tentando...
E obrigado pela ajuda que tem dado nesse assunto.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor andre_luis » 27 Ago 2011 13:17

Então...


Pelo jeito, a biblioteca do OpenCV não é muito confiável para essa função de configuração da camera.
Fazendo uma pesquiza na Web por "cvSetCaptureProperty not working" retornou ~4.000 ocorrencias, mas nenhuma solução conclusiva para o Windows.

O mais curioso, é que alguns parametros aceitam alteração nos valores, outros não.
Por exemplo FPS, BRIGHTNESS e CONTRAST retornam "0" após um Set e um Get.
Já para WIDTH e HEIGHT, os valores são aceitos.

O pior é que para o driver do fabricante da camera ( SG310 - SIGma ) não consigo nenhuma documentação. E é excelente o driver e a camera.
Impressionante : A WebCam com melhor qualidade da imagem que conseguimos até agora, custou 10 reais e é Chinesa ( PCTOP C830 ). E olha que comparei com algumas. As demais, apresentavam muitos ruidos impactantes no EdgeDetector, mas essa apresenta um resultado limpo.

Voce já teve problemas com essa funcionalidade de configuração ?


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 28 Ago 2011 21:29

esse é um problema bem comum, não lembro direito mas acho que o openCV usa Video For Windows e/ou DShow para suporte à webcam.

Os parâmetros e o suporte, tanto do driver da webcam quanto do openCV nunca foram muito confiáveis...

A última vez que passei por problema similar (isso sempre deu problema), eu instalei uma versão específica do driver da Webcam e amenizou a situação.

Caso seja interessante, dê uma olhada em produtos de quem já deve ter passado por isso, usando openCV:
http://www.mitov.com/html/videolab.html
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 28 Ago 2011 21:55

Olha, pra tentar agilizar o processo, até procurei na Internet por algum "Command line WebCam configurator", mas só achei pro Linux.
Embora fosse uma solução menos elegante, eu poderia "Terceirizar" esse processo.

Pena que os fabricantes não pensaram em usar AmCap para fazer isso.
Assim, se fosse executado com determinados argumentos, poderia servir apenas/também como uma ferramenta de configuração de captura.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor andre_luis » 02 Set 2011 08:38

Então,


Apenas pra compartilhar o sofrimento :

Eu baixei o código-fonte do AmCAP, para saber como é feito a configuração por essa ferramenta. O motivo dessa abordagem, é que esse aplicativo tem um painel de configuração default, e assim, de certo modo deveria haver alguma API genérica.

Realmente, alí faz referencia ao método IAMVideoProcAmp, que possui as propriedades que preciso :
Código: Selecionar todos
[b] KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION[/b]
[b] KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS[/b]
    KSPROPERTY_VIDEOPROCAMP_COLORENABLE
[b] KSPROPERTY_VIDEOPROCAMP_CONTRAST[/b]
    KSPROPERTY_VIDEOPROCAMP_GAMMA
    KSPROPERTY_VIDEOPROCAMP_HUE
    KSPROPERTY_VIDEOPROCAMP_SATURATION
    KSPROPERTY_VIDEOPROCAMP_SHARPNESS
    KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE
    KSPROPERTY_VIDEOPROCAMP_GAIN


Entretanto, para isso tive de instalar o SDK do Windows, que por sua vez, pediu o SDK do DirectShow, que por sua vez pediu para instalar o Framework DotNET.

Então, depois de tudo instalado, tive de configurar PATHs, variaveis de ambientes, adicionar Includes, tudo isso capturando os erros e achando dicas na Web, e ainda não consegui resolver, pois a solução da cada erro, remete á um novo erro.

Enfim, mais pra frente, estou pensando em fazer um 'bem-bolado', e passar essa tarefa pra outra pessoa que tenha tudo isso instalado, pois está muito chato resolver coisas que não são o foco do trabalho.

Impressionante como a MicroSoft consegue complicar a nossa vida para algo que deveria ser bem mais simples. Dá a impressão de ter de montar uma colcha de retalhos pra chegar aonde se deseja.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor andre_luis » 03 Set 2011 12:34

Consegui compilar o bendito.
Descobri a duras penas, que se tivesse mantido os arquivos na pasta original, tudo estaria resolvido.

Por mais bizarro que seja, a pasta do SDK teve de se tornar a pasta de trabalho, e o backup dos exemplos teve de ser feito para uma pasta particular.

Fica aqui a dica...


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x