Ir para o conteúdo do rodapé
USANDO O IRONBARCODE

Crie um leitor de código de barras usando webcam em C#

Um leitor de código de barras que utiliza webcam em C# elimina a necessidade de leitores de código de barras físicos, transformando qualquer câmera conectada em um poderoso leitor de código de barras. Neste artigo, vamos mostrar como criar um leitor de código de barras baseado em webcam para console, que captura quadros de vídeo ao vivo e decodifica códigos de barras e códigos QR em tempo real, tudo com apenas algumas linhas de código.

Seja para criar um protótipo de sistema de inventário, construir um quiosque de check-in ou simplesmente por curiosidade sobre como funciona a leitura de código de barras, este guia fornece um código-fonte funcional que você pode executar imediatamente.

!{--010011000100100101000010010100100100000101010010010110010101111101000111010001010101010100010111110101001101010100010000010101001001010100010001010100010001011111010101110100100 101010100010010000101111101010000010100100111101000100010101010100001101010100010111110101010001010010010010010010010100000101001100010111110100001001001100010011110100001101001011--}

Uma webcam pode substituir um leitor de código de barras dedicado?

Absolutamente. Qualquer webcam padrão ou dispositivo de captura de vídeo USB conectado a um computador Windows, macOS ou Linux pode funcionar como um leitor de código de barras quando combinado com o software correto. O processo funciona capturando quadros de vídeo da câmera, convertendo cada quadro em uma imagem bitmap e, em seguida, passando essa imagem para uma biblioteca de leitura de código de barras para decodificação.

As configurações tradicionais de leitura de código de barras que envolvem ferramentas como o SDK Dynamsoft Barcode Reader ou o DirectShow .NET geralmente exigem que você configure manualmente um gráfico de filtros, configure um gráfico de captura e conecte um pipeline de retorno de chamada de quadros apenas para obter quadros da câmera. O IronBarcode simplifica isso drasticamente, não há necessidade de construir uma infraestrutura complexa de transmissão de vídeo. Você fornece os dados da imagem e a classe BarcodeReader cuida do resto, suportando desde códigos de barras padrão até códigos QR a partir de um único método de leitura .

Como configurar a câmera e instalar as dependências?

Para obter quadros de vídeo de uma webcam e exibi-los em um aplicativo de console .NET , é necessário utilizar uma biblioteca de acesso à câmera. OpenCvSharp4 é um wrapper .NET leve e multiplataforma para OpenCV que simplifica bastante esse processo. Em conjunto com o IronBarcode, ele oferece tudo o que você precisa para criar um leitor de código de barras em tempo real sem se preocupar com a enumeração de dispositivos de captura de vídeo de baixo nível ou com a configuração da taxa de quadros.

Instale ambos os pacotes via NuGet:

dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarCode
dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarCode
```
dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarCode
```
$vbLabelText   $csharpLabel

Com esses três pacotes instalados, seu projeto obtém acesso à câmera através do OpenCvSharp e decodificação de código de barras através do IronBarcode. Sem dependências de sistema adicionais ou SDKs externos para configurar, basta instalar e usar.

Como capturar quadros de vídeo e ler dados de códigos de barras em tempo real?

O exemplo de código a seguir cria um leitor de código de barras baseado em console no Visual Studio que abre sua webcam padrão, captura quadros continuamente e lê cada um deles em busca de códigos de barras. Quando um código de barras é detectado, os dados são gravados no console e o quadro é salvo como um instantâneo.

using OpenCvSharp;
using OpenCvSharp.Extensions;
using IronBarCode;
using IronSoftware.Drawing;
// Open the default camera (device index 0)
using var capture = new VideoCapture(0);
if (!capture.IsOpened())
{
    Console.WriteLine("No camera found. Check connected devices.");
    return;
}
// Configure the barcode reader for real-time scanning
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.All,
    Speed = ReadingSpeed.Faster
};
Console.WriteLine("Barcode scanner active. Press 'Q' to quit.");
using var frame = new Mat();
bool scanning = true;
while (scanning)
{
    capture.Read(frame);
    if (frame.Empty())
        continue;
    // Convert the captured frame to a bitmap for barcode processing
    var bitmap = BitmapConverter.ToBitmap(frame);
    var anyBitmap = new AnyBitmap(bitmap);
    // Scan the frame for barcodes
    var results = BarcodeReader.Read(anyBitmap, options);
    foreach (var result in results)
    {
        Console.WriteLine($"Barcode detected: {result.Value}");
        Console.WriteLine($"  Format: {result.BarcodeType}");
        // Save a snapshot of the frame where the barcode was found
        bitmap.Save("barcode_snapshot.png");
        Console.WriteLine("  Snapshot saved to barcode_snapshot.png");
    }
    // Check for quit key
    if (Cv2.WaitKey(1) == 'q')
        scanning = false;
}
Console.WriteLine("Scanner stopped.");
using OpenCvSharp;
using OpenCvSharp.Extensions;
using IronBarCode;
using IronSoftware.Drawing;
// Open the default camera (device index 0)
using var capture = new VideoCapture(0);
if (!capture.IsOpened())
{
    Console.WriteLine("No camera found. Check connected devices.");
    return;
}
// Configure the barcode reader for real-time scanning
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.All,
    Speed = ReadingSpeed.Faster
};
Console.WriteLine("Barcode scanner active. Press 'Q' to quit.");
using var frame = new Mat();
bool scanning = true;
while (scanning)
{
    capture.Read(frame);
    if (frame.Empty())
        continue;
    // Convert the captured frame to a bitmap for barcode processing
    var bitmap = BitmapConverter.ToBitmap(frame);
    var anyBitmap = new AnyBitmap(bitmap);
    // Scan the frame for barcodes
    var results = BarcodeReader.Read(anyBitmap, options);
    foreach (var result in results)
    {
        Console.WriteLine($"Barcode detected: {result.Value}");
        Console.WriteLine($"  Format: {result.BarcodeType}");
        // Save a snapshot of the frame where the barcode was found
        bitmap.Save("barcode_snapshot.png");
        Console.WriteLine("  Snapshot saved to barcode_snapshot.png");
    }
    // Check for quit key
    if (Cv2.WaitKey(1) == 'q')
        scanning = false;
}
Console.WriteLine("Scanner stopped.");
Imports OpenCvSharp
Imports OpenCvSharp.Extensions
Imports IronBarCode
Imports IronSoftware.Drawing

' Open the default camera (device index 0)
Using capture As New VideoCapture(0)
    If Not capture.IsOpened() Then
        Console.WriteLine("No camera found. Check connected devices.")
        Return
    End If

    ' Configure the barcode reader for real-time scanning
    Dim options As New BarcodeReaderOptions With {
        .ExpectMultipleBarcodes = False,
        .ExpectBarcodeTypes = BarcodeEncoding.All,
        .Speed = ReadingSpeed.Faster
    }
    Console.WriteLine("Barcode scanner active. Press 'Q' to quit.")

    Using frame As New Mat()
        Dim scanning As Boolean = True
        While scanning
            capture.Read(frame)
            If frame.Empty() Then
                Continue While
            End If

            ' Convert the captured frame to a bitmap for barcode processing
            Dim bitmap = BitmapConverter.ToBitmap(frame)
            Dim anyBitmap As New AnyBitmap(bitmap)

            ' Scan the frame for barcodes
            Dim results = BarcodeReader.Read(anyBitmap, options)
            For Each result In results
                Console.WriteLine($"Barcode detected: {result.Value}")
                Console.WriteLine($"  Format: {result.BarcodeType}")

                ' Save a snapshot of the frame where the barcode was found
                bitmap.Save("barcode_snapshot.png")
                Console.WriteLine("  Snapshot saved to barcode_snapshot.png")
            Next

            ' Check for quit key
            If Cv2.WaitKey(1) = AscW("q"c) Then
                scanning = False
            End If
        End While
    End Using
End Using

Console.WriteLine("Scanner stopped.")
$vbLabelText   $csharpLabel

Using Webcam for Barcode Scanning in C#

Crie um leitor de código de barras usando webcam em C#: Imagem 1 - Usando nosso leitor de código de barras com webcam em C#

Este código utiliza instruções de nível superior para manter a organização. O objeto VideoCapture abre a primeira fonte de câmera conectada e começa a capturar frames em um loop. Cada frame é convertido de um OpenCvSharp Mat para um Bitmap e, em seguida, encapsulado em um AnyBitmap, o formato de imagem multiplataforma aceito pelo método BarcodeReader.Read do IronBarcode.

O objeto BarcodeReaderOptions controla o comportamento de leitura. A configuração de velocidade "ReadingSpeed.Faster" otimiza para vídeos em tempo real, onde você precisa de respostas rápidas a cada quadro. A propriedade ExpectBarcodeTypes está definida como BarcodeEncoding.All, o que significa que o leitor detectará todos os formatos suportados, desde Code 128 e EAN-13 até Data Matrix e códigos QR. Se o seu caso de uso envolver apenas um formato específico, restringir isso aumentará o desempenho da digitalização. Para obter mais informações sobre como configurar essas opções, consulte a referência BarcodeReaderOptions .

O loop foreach itera sobre cada BarcodeResult na coleção retornada. A propriedade Value contém os dados do código de barras decodificados, enquanto BarcodeType identifica o formato. O método retorna uma coleção BarcodeResults, facilitando o processamento de múltiplos códigos de barras, se necessário.

Como ajustar o leitor de código de barras para diferentes casos de uso?

A leitura de códigos de barras no mundo real geralmente envolve condições imperfeitas, iluminação inadequada, ângulos distorcidos ou etiquetas danificadas. As opções de leitura da IronBarcode permitem equilibrar velocidade e precisão, dependendo do que você estiver utilizando.

using IronBarCode;
// Optimized options for scanning QR codes from a camera feed
var qrOptions = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.PDF417,
    Speed = ReadingSpeed.Detailed,
    AutoRotate = true
};
// Decode barcodes from a saved image captured by the webcam
var imageResults = BarcodeReader.Read("barcode_snapshot.png", qrOptions);
foreach (var barcode in imageResults)
{
    Console.WriteLine($"Data: {barcode.Value}");
    Console.WriteLine($"Type: {barcode.BarcodeType}");
    Console.WriteLine($"Page: {barcode.PageNumber}");
}
using IronBarCode;
// Optimized options for scanning QR codes from a camera feed
var qrOptions = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.PDF417,
    Speed = ReadingSpeed.Detailed,
    AutoRotate = true
};
// Decode barcodes from a saved image captured by the webcam
var imageResults = BarcodeReader.Read("barcode_snapshot.png", qrOptions);
foreach (var barcode in imageResults)
{
    Console.WriteLine($"Data: {barcode.Value}");
    Console.WriteLine($"Type: {barcode.BarcodeType}");
    Console.WriteLine($"Page: {barcode.PageNumber}");
}
Imports IronBarCode

' Optimized options for scanning QR codes from a camera feed
Dim qrOptions As New BarcodeReaderOptions With {
    .ExpectMultipleBarcodes = True,
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.PDF417,
    .Speed = ReadingSpeed.Detailed,
    .AutoRotate = True
}

' Decode barcodes from a saved image captured by the webcam
Dim imageResults = BarcodeReader.Read("barcode_snapshot.png", qrOptions)
For Each barcode In imageResults
    Console.WriteLine($"Data: {barcode.Value}")
    Console.WriteLine($"Type: {barcode.BarcodeType}")
    Console.WriteLine($"Page: {barcode.PageNumber}")
Next
$vbLabelText   $csharpLabel

Saída para leitura de diferentes códigos de barras: Exemplo com código QR

Crie um leitor de código de barras usando uma webcam em C#: Imagem 2 - Lendo um código QR com nosso leitor de código de barras.

A opção "Switching Speed ​​to ReadingSpeed.Detailed" instrui o decodificador a aplicar uma análise de imagem mais completa, ideal para lidar com dados de entrada ruidosos ou distorcidos. Habilitar a Rotação Automática permite que o IronBarcode corrija automaticamente códigos de barras rotacionados na imagem, um cenário comum quando os usuários seguram os itens em ângulos estranhos em frente à câmera. Esta é uma das áreas em que o IronBarcode realmente se destaca como biblioteca de código QR e leitor de código de barras: seu pré-processamento de imagem integrado lida com esses desafios sem exigir que você conecte filtros externos de correção de imagem.

Você também pode ler códigos de barras de arquivos de imagem salvos , PDFs e TIFFs com vários quadros usando a mesma API BarcodeReader, tornando-a versátil muito além dos casos de uso com webcam. Se você estiver criando um scanner baseado na web, o guia de integração do IronBarcode Blazor aborda a leitura por webcam através de um navegador usando interoperabilidade com JavaScript .

O que torna essa abordagem mais simples do que as alternativas?

Muitos tutoriais de leitores de código de barras com webcam em C# dependem de combinações de várias bibliotecas, normalmente ZXing .NET para decodificação, juntamente com AForge .NET ou DirectShow .NET para acesso à câmera. Essa abordagem exige a configuração de um gráfico de filtros para captura de vídeo, a configuração manual de callbacks de quadros para extrair quadros do fluxo de vídeo e o tratamento da enumeração de dispositivos por meio de APIs de baixo nível do Windows. O SDK do leitor de código de barras da Dynamsoft segue um padrão semelhante, exigindo a implementação do DirectShow .NET para acessar a webcam.

O IronBarcode simplifica essa complexidade. A lógica de leitura de código de barras reside inteiramente em BarcodeReader.Read, que aceita um Bitmap, uma matriz de bytes, um caminho de arquivo ou um Stream. Não há necessidade de construir um gráfico de captura, nem de enviar objetos ou configurar eventos EventArgs para a captura de quadros; basta fornecer os dados da imagem e receber as informações do código de barras de volta. Isso significa menos código para escrever, menos dependências para manter e mais tempo dedicado aos recursos que realmente importam para sua aplicação.

Para equipes que desenvolvem em .NET Core, .NET Framework ou .NET 8+, o IronBarcode oferece suporte multiplataforma consistente em Windows, macOS, Linux, Docker, Azure e AWS. Explore o conjunto completo de funcionalidades ou navegue por exemplos de código adicionais para ver o que mais é possível.

Pronto para construir seu próprio leitor de código de barras?

Transformar uma webcam em um leitor de código de barras em C# requer um código mínimo quando você tem as ferramentas certas. O IronBarcode lida com a parte mais complexa da decodificação, desde códigos de barras padrão até códigos QR, enquanto o OpenCvSharp gerencia o acesso à câmera de forma eficiente. Juntos, eles criam um scanner fácil de construir, fácil de expandir e pronto para produção.

Inicie um teste gratuito para experimentar com seu próprio projeto ou explore as opções de licenciamento quando estiver pronto para implantar.

Perguntas frequentes

Como posso criar um leitor de código de barras usando uma webcam em C#?

É possível criar um leitor de código de barras usando uma webcam em C# aproveitando o IronBarcode. Isso envolve a captura de quadros de vídeo da webcam e a decodificação de códigos de barras e códigos QR em tempo real com o mínimo de linhas de código.

Quais são as vantagens de usar uma webcam para leitura de código de barras?

Utilizar uma webcam para leitura de códigos de barras elimina a necessidade de hardware dedicado, permitindo que qualquer câmera conectada se torne um poderoso leitor de códigos de barras. Isso é econômico e versátil para diversas aplicações.

É possível decodificar códigos QR usando uma webcam em C#?

Sim, com o IronBarcode, você pode decodificar códigos QR usando uma webcam em C#. A biblioteca captura quadros de vídeo ao vivo e os processa para extrair os dados do código QR de forma transparente.

Que tipo de aplicações podem se beneficiar de um leitor de código de barras por webcam em C#?

Aplicações nos setores de varejo, gestão de estoque e logística podem se beneficiar de um leitor de código de barras com webcam em C#. Ele oferece uma solução flexível e econômica para leitura de códigos de barras e códigos QR.

O IronBarcode suporta decodificação de código de barras em tempo real?

Sim, o IronBarcode suporta decodificação de códigos de barras em tempo real. Ele processa quadros de vídeo ao vivo da webcam para decodificar códigos de barras e códigos QR instantaneamente.

O código-fonte para construir um leitor de código de barras para webcam está disponível?

Sim, o código-fonte completo para criar um leitor de código de barras baseado em webcam e executado no console, em C#, está disponível. Isso ajuda os desenvolvedores a entender e implementar a solução de forma eficiente.

Que tipos de códigos de barras podem ser decodificados usando o IronBarcode com uma webcam?

O IronBarcode consegue decodificar vários tipos de códigos de barras, incluindo códigos QR, UPC, EAN e Code 128, entre outros, usando uma webcam em C#.

Preciso de conhecimentos avançados de programação para construir um leitor de código de barras usando o IronBarcode?

Não, você não precisa de habilidades avançadas de programação para criar um leitor de código de barras usando o IronBarcode. O processo envolve poucas linhas de código, tornando-o acessível a desenvolvedores de todos os níveis de habilidade.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim