Saltar al pie de página
USO DE IRONBARCODE

Creación de un escáner de códigos de barras con Webcam en C#

Un escáner de códigos de barras que utiliza una cámara web en C# elimina la necesidad de escáneres de códigos de barras físicos, ya que convierte cualquier cámara conectada en un potente lector de códigos de barras. En este artículo, le mostraremos cómo construir un escáner de códigos de barras con cámara web basado en consola que captura fotogramas de vídeo en directo y decodifica códigos de barras y códigos QR en tiempo real, todo ello con tan solo unas pocas líneas de código.

Tanto si estás creando un prototipo de sistema de inventario, construyendo un quiosco de registro o simplemente tienes curiosidad por saber cómo funciona el escaneo de códigos de barras internamente, esta guía te proporciona código fuente funcional que puedes ejecutar de inmediato.

Empiece con IronBarcode ahora.
green arrow pointer

¿Puede una cámara web reemplazar a un escáner de código de barras específico?

Absolutamente. Cualquier cámara web estándar o dispositivo de captura de vídeo USB conectado a un ordenador con Windows, macOS o Linux puede funcionar como escáner de códigos de barras si se combina con el software adecuado. El proceso consiste en capturar fotogramas de vídeo de la cámara, convertir cada fotograma en una imagen de mapa de bits y, a continuación, pasar esa imagen a una biblioteca de lectura de códigos de barras para su decodificación.

Las configuraciones tradicionales de escaneo de códigos de barras que utilizan herramientas como Dynamsoft Barcode Reader SDK o DirectShow .NET a menudo requieren que configure manualmente un gráfico de filtros, configure un gráfico de captura y conecte una canalización de devolución de llamada de fotogramas solo para obtener fotogramas de la cámara. IronBarcode simplifica esto drásticamente; no es necesario construir una infraestructura compleja de transmisión de vídeo. Usted proporciona los datos de la imagen y la clase BarcodeReader se encarga del resto, admitiendo desde códigos de barras estándar hasta códigos QR con un único método de lectura .

¿Cómo configurar la cámara e instalar las dependencias?

Para obtener fotogramas de vídeo de una cámara web e importarlos a una aplicación de consola .NET , se necesita una biblioteca de acceso a la cámara. OpenCvSharp4 es una capa de abstracción .NET ligera y multiplataforma para OpenCV que simplifica este proceso. En combinación con IronBarcode, te proporciona todo lo necesario para crear un escáner de códigos de barras en tiempo real sin tener que lidiar con la enumeración de dispositivos de captura de vídeo de bajo nivel o la configuración de la velocidad de fotogramas.

Instale ambos paquetes a través de 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

Una vez instalados esos tres paquetes, su proyecto obtiene acceso a la cámara a través de OpenCvSharp y decodificación de códigos de barras a través de IronBarcode. No requiere dependencias adicionales del sistema ni la configuración de SDK externos; simplemente instálalo y listo.

¿Cómo capturar fotogramas de vídeo y leer datos de códigos de barras en tiempo real?

El siguiente ejemplo de código crea un escáner de códigos de barras basado en consola en Visual Studio que abre la cámara web predeterminada, captura fotogramas continuamente y escanea cada uno de ellos en busca de códigos de barras. Cuando se detecta un código de barras, los datos se escriben en la consola y el fotograma se guarda como una instantánea.

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#

Construir un Escáner de Código de Barras Usando Webcam en C#: Imagen 1 - Usando nuestro escáner de código de barras usando webcam en C#

Este código utiliza sentencias de nivel superior para mantener la claridad. El objeto VideoCapture abre la primera fuente de cámara conectada y comienza a extraer fotogramas en un bucle. Cada fotograma se convierte de un objeto Mat de OpenCvSharp a un Bitmap y luego se encapsula en un AnyBitmap, el formato de imagen multiplataforma que acepta el método BarcodeReader.Read de IronBarcode.

El objeto BarcodeReaderOptions controla el comportamiento de escaneo. Configurar la velocidad a ReadingSpeed.Faster optimiza el vídeo en tiempo real, donde se necesitan respuestas rápidas por fotograma. La propiedad ExpectBarcodeTypes está configurada como BarcodeEncoding.All, lo que significa que el escáner detectará todos los formatos compatibles, desde Code 128 y EAN-13 hasta Data Matrix y códigos QR. Si su caso de uso solo involucra un formato específico, acotarlo mejorará el rendimiento del escaneo. Para obtener más información sobre cómo configurar estas opciones, consulte la referencia BarcodeReaderOptions .

El bucle foreach itera sobre cada BarcodeResult en la colección devuelta. La propiedad Value contiene los datos del código de barras decodificados, mientras que BarcodeType identifica el formato. Este método devuelve una colección BarcodeResults, lo que facilita el procesamiento de varios códigos de barras si fuera necesario.

¿Cómo optimizar el lector de códigos de barras para diferentes casos de uso?

El escaneo de códigos de barras en el mundo real a menudo implica condiciones imperfectas, iluminación deficiente, ángulos desviados o etiquetas dañadas. Las opciones de lector de IronBarcode te permiten encontrar el equilibrio entre velocidad y precisión, dependiendo del tipo de documento con el que estés trabajando.

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

Salida para la lectura de diferentes códigos de barras: Ejemplo con código QR

Construir un Escáner de Código de Barras Usando Webcam en C#: Imagen 2 - Lectura de código QR con nuestro escáner de código de barras

Cambiar a Velocidad de lectura.Detallado le indica al decodificador que aplique un análisis de imagen más exhaustivo, lo cual es ideal para manejar datos de entrada ruidosos o sesgados. Al activar la función AutoRotate, IronBarcode puede corregir automáticamente los códigos de barras girados en la imagen, una situación común cuando los usuarios sostienen los artículos en ángulos extraños frente a la cámara. Esta es una de las áreas en las que IronBarcode realmente destaca como biblioteca de códigos QR y lector de códigos de barras: su preprocesamiento de imágenes integrado resuelve estos problemas sin necesidad de conectar filtros de corrección de imagen externos.

También puedes escanear códigos de barras desde archivos de imagen guardados , PDF y TIFF multifotograma utilizando la misma API de BarcodeReader, lo que la hace versátil mucho más allá de los casos de uso de la cámara web. Si, en cambio, está creando un escáner basado en la web, la guía de integración de IronBarcode Blazor cubre el escaneo mediante cámara web a través de un navegador utilizando la interoperabilidad de JavaScript .

¿Qué hace que este enfoque sea más sencillo que otras alternativas?

Muchos tutoriales sobre escáneres de códigos de barras para webcam en C# se basan en combinaciones de varias bibliotecas, normalmente ZXing .NET para la decodificación junto con AForge .NET o DirectShow .NET para el acceso a la cámara. Este enfoque requiere configurar un gráfico de filtros para la captura de vídeo, configurar manualmente las funciones de devolución de llamada de fotogramas para extraerlos del flujo de vídeo y gestionar la enumeración de dispositivos mediante las API de Windows de bajo nivel. El SDK de Dynamsoft Barcode Reader sigue un patrón similar, requiriendo la integración con DirectShow .NET para acceder a la cámara web.

IronBarcode simplifica esa complejidad. La lógica de escaneo de códigos de barras reside completamente en BarcodeReader.Read, que acepta un Bitmap, una matriz de bytes, una ruta de archivo o un Stream. No es necesario crear ningún gráfico de captura, ni enviar objetos, ni usar EventArgs ni configurar el cableado de eventos para la captura de fotogramas; simplemente se le proporcionan los datos de la imagen y se obtiene la información del código de barras a cambio. Esto significa menos código que escribir, menos dependencias que mantener y más tiempo dedicado a las funciones que realmente importan en tu aplicación.

Para los equipos que desarrollan aplicaciones en .NET Core, .NET Framework o .NET 8+, IronBarcode ofrece compatibilidad multiplataforma consistente en Windows, macOS, Linux, Docker, Azure y AWS. Explora todas las funciones o consulta ejemplos de código adicionales para ver qué más es posible.

¿Listo para construir tu propio escáner de códigos de barras?

Convertir una cámara web en un escáner de código de barras en C# requiere un mínimo de código si se tienen las herramientas adecuadas. IronBarcode se encarga del trabajo pesado de decodificación, desde códigos de barras estándar hasta códigos QR, mientras que OpenCvSharp gestiona el acceso a la cámara de forma eficiente. Juntos, crean un escáner fácil de construir, fácil de ampliar y listo para la producción.

Comience una prueba gratuita para probarlo con su propio proyecto, o explore las opciones de licencia cuando esté listo para implementarlo.

Preguntas Frecuentes

¿Cómo puedo crear un escáner de código de barras utilizando una webcam en C#?

Puede crear un escáner de código de barras utilizando una cámara web en C# aprovechando IronBarcode. Se trata de capturar fotogramas de vídeo de la cámara web y descodificar códigos de barras y códigos QR en tiempo real con un mínimo de líneas de código.

¿Cuáles son las ventajas de utilizar una cámara web para escanear códigos de barras?

El uso de una cámara web para escanear códigos de barras elimina la necesidad de hardware dedicado, lo que permite que cualquier cámara conectada se convierta en un potente lector de códigos de barras. Esto resulta rentable y versátil para diversas aplicaciones.

¿Es posible descodificar códigos QR con una cámara web en C#?

Sí, con IronBarcode puedes descodificar códigos QR utilizando una cámara web en C#. La biblioteca captura fotogramas de vídeo en directo y los procesa para extraer los datos del código QR sin problemas.

¿Qué tipo de aplicaciones pueden beneficiarse de un escáner de códigos de barras con cámara web en C#?

Las aplicaciones de comercio minorista, gestión de inventarios y logística pueden beneficiarse de un escáner de códigos de barras con cámara web en C#. Proporciona una solución flexible y rentable para escanear códigos de barras y códigos QR.

¿Es IronBarcode compatible con la descodificación de códigos de barras en tiempo real?

Sí, IronBarcode permite descodificar códigos de barras en tiempo real. Procesa fotogramas de vídeo en directo de la cámara web para descodificar códigos de barras y códigos QR al instante.

¿Está disponible el código fuente para crear un escáner de códigos de barras con cámara web?

Sí, se proporciona el código fuente completo para crear un escáner de códigos de barras con cámara web basado en consola en C#. Esto ayuda a los desarrolladores a entender e implementar la solución de manera eficiente.

¿Qué tipos de códigos de barras pueden descodificarse utilizando IronBarcode con una cámara web?

IronBarcode puede descodificar varios tipos de códigos de barras, incluidos códigos QR, UPC, EAN y Code 128, entre otros, utilizando una cámara web en C#.

¿Necesito conocimientos avanzados de programación para crear un escáner de códigos de barras con IronBarcode?

No, no necesita conocimientos avanzados de programación para crear un escáner de códigos de barras con IronBarcode. El proceso implica unas pocas líneas de código, por lo que es accesible para desarrolladores de todos los niveles de habilidad.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame