Aplicação com câmera usando Qt5

câmera

Introdução

QCamera é uma classe do Qt5 que prove para o desenvolvedor toda estrutura necessária para listar dispositivos webcams e cada câmera conectada ao PC, selecionar o dispositivo desejado e executar tarefas como capturar imagem, reproduzir ou até mesmo gravar.

Configuração do sistema

Para sucesso na execução deste artigo, utilizarei a distribuição Linux Mint 17 Qiana 64 bits, mas não há problemas em realizar o procedimento em um Ubuntu ou outra distribuição suportada pelo Qt5. A seguir são listados os seus pré-requisitos:

  • Qt5.4 ou Qt5.5 instalado com o Qt Creator;
  • QCamera instalado;
  • Distribuição Linux suportada pelo Qt5.

O básico do QCamera

Para utilizar o QCamera, que não é um Widget para arrastar e soltar na aplicação, devemos incluir algumas dependências em nosso projeto. Então, vamos criar nosso projeto.

Clique em File > New File or Project…, selecione Application, em seguida Qt Widgets Application e prossiga. Na janela seguinte dê um nome para o projeto (estarei usando o nome myCam) e avance, deixe selecionado os Kits default e avance. Em Base Classe selecione QWidget, avance e Finish.

Primeira alteração que devemos realizar é adicionar multimedia ao QT do myCam.pro.

Em seguida no widget.cpp adicionar o header QCamera:

Pronto, as dependências eram essas, agora vamos a uma primeira aplicação, onde irei listar as câmeras e imprimir no output do console.

O seu widget.h deve ficar como abaixo:

E agora o widget.cpp:

Pressionando Ctrl+b construímos a aplicação e Ctrl+r a executamos. A saída da aplicação, no meu caso sem câmera, conectando 1 câmera e depois 2 câmeras:

Para realizar estes testes em meu notebook, primeiro eu removi o módulo uvcvideo:

Executei a aplicação e nenhuma câmera foi detectada. Em seguida, subi o módulo novamente:

Executei a aplicação e uma câmera foi detectada. Na sequência pluguei uma webcam na porta USB e executei novamente a aplicação. Ela detectou 2 dispositivos.

Quem fez todo o trabalho foi o QCameraInfo::availableCameras() e usando a função count() conseguimos saber quantos dispositivos foram detectados. Validar essa verificação antes de iniciar a aplicação é importante.

Obtendo informações das câmeras

Acima conseguimos listar as câmeras presentes no notebook no qual estamos executando a aplicação, e se quiséssemos obter mais detalhes sobre cada dispositivo, como o nome do dispositivo e descrição.

Vamos editar o widget.cpp da seguinte maneira:

Usei a mesma aplicação, mas caso sejam encontradas câmeras, irei montar uma QList e imprimir na tela varias informações, que pode ser vista na lista 13 a 19.

Uma análise rápida que podemos fazer é que a webcam do meu notebook é o device /dev/video0 e a webcam USB é /dev/video1. A câmera default é a do meu notebook /dev/video0, tenho a description de cada uma, que facilita saber quem é quem. Position não tem definido, mas é algo muito útil, pois podemos ter QCamera::BackFace e QCamera::FrontFace, uma forma de dizer se a câmera esta atrás da tela ou na frente, igual nos celulares. Além do parâmetro orientation.

Existem 4 possíveis maneiras de selecionar uma câmera com o QCamera():

  • QCamera() : Sendo a default selecionada;
  • QCamera(const QbyteArray &devicename) : Fornecendo um device name da câmera;
  • QCamera(const QcameraInfo &cameraInfo) : Fornecendo o camerainfo da câmera;
  • QCamera(QCamera::Position position) : Fornecendo QCamera::FrontFace ou QCamera::BackFace.

Construindo aplicação básica com QCamera

Em poucas linhas vamos desenvolver uma aplicação para abrir nossa câmera padrão e mostrar no Widget de nossa aplicação.

Vamos criar o projeto myCamDefault em File > New File or Project… > Application > Qt Widgets Application > name: myCamDefault > Base Class selecione Qwidget > Finish.

Caso tenha dúvida no procedimento para criar uma aplicação Widget, acesse o artigo Qt5 Console e Widgets.

Editando o arquivo myCamDefault.pro:

No .pro adicionamos multimedia e multimediawidgets, que são dependências para QCamera, e agora vamos ao widget.cpp:

Tudo começa na linha 15 onde crio o objeto QCamera cam e passo o w, que é o widget atual da minha aplicação. Na linha 20 crio um objeto QCameraViewFinder viewf, que é nosso visualizador, e passo o w novamente. Na linha 25 e 26 é uma macete para que o QCameraViewFinder ocupe o Widget inteiro, ou melhor, seja do tamanho dele. Na linha 32 passo para meu objeto cam quem será meu visualizado, no caso, viewf e logo em seguida inicio a câmera.

Construindo e executando nossa aplicação (Ctrl+b e Ctrl+r), temos a aplicação com a reprodução da câmera, conforme a Figura 1.

camera usando Qt5: QCamera e ViewFinder
Figura 1: Qt5 Widget com QCameraViewFinder reproduzindo webcam

Selecionando uma câmera e visualizando

Agora vamos criar outro projeto, onde podemos listar as câmeras disponíveis, escolher uma e reproduzir na aplicação.

Vamos criar o projeto myCamSelect em File > New File or Project… > Application > Qt Widgets Application > name: myCamSelect > Base Class selecione Qwidget > Finish.

OBS: Deve-se adicionar multimediawidgets ao QT do myCamSelect.pro, para trabalhar com o QCameraViewFinder como Widget.

Primeiramente vamos “desenhar” nossa tela clicando no widget.ui, que possuirá:

ComponenteNome
QpushButtonbtnOpenCam
QpushButtonbtnCloseCam
QpushButtonbtnCaptureImage
QpushButtonbtnClose
QComboBoxcbListCam
QStackedWidgetstackedWidget
QWidgetviewfinderPage
QCameraViewFindercamViewFinder

Caso tenha alguma dificuldade em posicionar ou configurar a interface gráfica (.ui), o projeto completo será disponibilizado no final do artigo. Segue na Figura 2 como ficou a tela.

camera usando Qt5: Qt5UIQCamera
Figura 2: Desenho da tela Cameras no Qt5 com QCamera

Agora segue o código com comentários em cada função ou uma importante etapa da aplicação, começando pelo widget.h:

Editando  o widget.cpp:

Em main.cpp não houve alterações.

Para entender o que foi feito, criamos dois ponteiros, um para QCamera que será o objeto cam e um para QCameraViewFinder que será o objeto viewFinder. No widget.cpp setamos o cam com o device selecionado no QComboBox e configuramos nossa viewFinder com o QCameraViewFinder no QStackedWidget, e os botões possuem ações de iniciar e parar a câmera. O botão Captura Image é um aperitivo para o próximo artigo.

Compilando e executando nossa aplicação:

câmera usando Qt5: câmera externa
Figura 3: Selecionando /dev/video1 no Qt5 QCamera
câmera usando Qt5: câmera onboard
Figura 4: Selecionando /dev/video0 no Qt5 QCamera

Como não tenho mais um Tux, o Sidney (Figura 3) auxiliou na captura da webcam externa 🙂 e eu na webcam onboard.

As aplicações aqui apresentadas têm por fim mostrar as possibilidades da ferramenta em uma abordagem didática. A partir desta base pode-se customizar e explorar os recursos de acordo com a necessidade da aplicação ou projeto.

Referências

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
SSL
SSL
03/12/2020 09:32

Parabéns, companheiro! Este tutorial me foi verdadeiramente útil.

MIGUEL EDUARDO GUTIERREZ PAREDES
MIGUEL EDUARDO GUTIERREZ PAREDES
05/05/2020 20:55

O arquivo de descarga nao esta disponivel, acho que o link ficou no html errado

MIGUEL EDUARDO GUTIERREZ PAREDES
MIGUEL EDUARDO GUTIERREZ PAREDES
05/05/2020 20:55

O arquivo deste tuto nao esta disponivel?

Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services