Acesso à WebCam pelo C#

Já vimos em uma aula anterior como fazer a captura de tela do computador, veja aqui. Hoje veremos como realizar o acesso à WebCam USB ou integrada de um notebook. O processo é bem simples.

O captura de imagens pela WebCam pode servir para várias situações, principalmente para cadastro de clientes, visitantes, pacientes, enfim… ou, para tirar fotos de produtos, código de barras, entre outras aplicações.

Para este projeto vamos utilizar a biblioteca AFORGE.Net, uma poderosa biblioteca que possui várias classes para processamento de imagens, capturas de vídeos.

Preparando o projeto,

  1. Faça o download da biblioteca AFORGE.NET – http://www.aforgenet.com/framework/downloads.html
  2. Crie um novo projeto C# no Visual Studio
  3. Descompacte o arquivo ZIP que contem os arquivos da biblioteca dentro do seu projeto.
  4. Clique em Project > Add Reference
  5. Clique em Browser
  6. Navegue até a pasta descompactada do AFORGE, dentro da pasta REALESE adicione as seguintes DLLs: AForge.dll, AForge.Video.DirectShow.dll e AForge.Video.dll
  7. Agora crie a seguinte interface:
  8. Acrescente no seu código a duas clausulas using a seguir;
    using AForge.Video;
    using AForge.Video.DirectShow;
  9. Dentro a partial class do seu projeto crie os seguintes objetos;
    private bool DeviceExist = false;
    private FilterInfoCollection videoDevices;
    private VideoCaptureDevice videoSource = null;
  10. A biblioteca AForce, orienta que seja criado um método para capturar os quadros de vídeo da WebCam, como você já sabe, a webCam captura uma série de fotos e as mostra em um tempo rápido o suficiente para termos a sensação de vídeo. Portanto, quando queremos capturar uma imagem o que queremos na verdade é capturar um quadro. Crie o método dentro da sua partial class:
    // método para captura de quadro da webcam
    private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
    {
       Bitmap img = (Bitmap)eventArgs.Frame.Clone();
       pictureBox1.Image = img;
    }
  11. Agora com o projeto devidamente preparado vamos agora codificar os compornentes

Hands On

Hands on, ou mão na massa. Agora com o projeto devidamente preparado vamos codificar os componentes que adicionamos ao Window Form

  1. No evento load do form, vamos programar o combobox para listar todos os dispositivos de WebCam existentes no sistema. Dê dois cliques sobre o formulário e acrescente o seguinte código;
     //código do carregamento (load) do Form
     //lista os dispositivos de captura de imagem do computador/notebook
     try 
     {
       videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
       comboBox1.Items.Clear();
       if (videoDevices.Count == 0)
         throw new ApplicationException();
    
      DeviceExist = true;
        foreach (FilterInfo device in videoDevices)
        {
          comboBox1.Items.Add(device.Name);
        }
      comboBox1.SelectedIndex = 0; //make dafault to first cam
     }
     catch (ApplicationException)
     {
       DeviceExist = false;
       comboBox1.Items.Add("Nenhum dispositivo encontrado!");
     }
  2. Adicione ao seu projeto o componente SaveFileDialog ao formulário, este componente pode ser encontrado na Caixa de Ferramentas.
  3. Altere o nome do botão de Captura para btnCapturar
  4. Com o nome do botão já alterado, cole o código a seguir;
    if (btnCapturar.Text == "Capturar")
     {
       if (DeviceExist)
       {
         videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
         videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
     
         //Encerra o sinal da camera.
         if (!(videoSource == null))
         if (videoSource.IsRunning)
         {
           videoSource.SignalToStop();
           videoSource = null;
         }
         videoSource.DesiredFrameSize = new Size(160, 120);
         videoSource.DesiredFrameRate = 10;
         videoSource.Start();
     
         btnCapturar.Text = "Gravar";   
       }
     else
     {
     MessageBox.Show("Nenhum dispositivo encontrado!");
     }
    }
    else 
    {
      if (videoSource.IsRunning)
       {
         //Encerra o sinal da camera.
         // Note que este bloco de código se repetiu, você pode cirar um método para ele.
         if (!(videoSource == null))
         if (videoSource.IsRunning)
         {
           videoSource.SignalToStop();
           videoSource = null;
    
           // salva a imagem;
           saveFileDialog1.Filter = "JPEG (*.jpg;*.jpeg;*jpeg;*.jfif)|*.jpg;*.jpeg;*jpeg;*.jfif";
           DialogResult res = saveFileDialog1.ShowDialog();
           if (res == DialogResult.OK)
           {
             pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
           }
         }
       } 
     }
    }

Pronto! Seu projeto está funcional

Download – Como Acessar a WebCam com C#

O download do projeto está neste link: https://drive.google.com/open?id=0B-pXnVAyx_ouMGdtTmFVTDVvODg

Problemas conhecidos: Caso o projeto não execute na primeira tentativa, você terá que adicionar as referências novamente. Isso porque o projeto mudou de computador e o caminho das referências serão alterados.

Mais exemplos de uso

Se deseja mais exemplos, acesse o site do desenvolver com projetos prontos para download, vale a pena conferir se você estiver precisando de soluções de capturas para o seu projeto: http://www.aforgenet.com/framework/samples/video.html