Zum Fußzeileninhalt springen
IRONBARCODE VERWENDEN

Erstellen eines Barcode-Scanners mit Webcam in C#

Ein Barcode-Scanner, der Webcams in C# nutzt, macht physische Barcode-Scanner überflüssig, indem er jede angeschlossene Kamera in einen leistungsstarken Barcode-Leser verwandelt. In diesem Artikel zeigen wir Ihnen Schritt für Schritt, wie Sie mit nur wenigen Codezeilen einen konsolenbasierten Webcam-Barcodescanner erstellen, der Live-Videobilder erfasst und Barcodes sowie QR-Codes in Echtzeit dekodiert.

Egal, ob Sie ein Inventarsystem prototypisch entwickeln, einen Check-in-Kiosk bauen oder einfach nur neugierig sind, wie das Scannen von Barcodes unter der Haube funktioniert – dieser Leitfaden liefert Ihnen sofort einsatzbereiten Quellcode.

Starten Sie jetzt mit IronBarcode.
green arrow pointer

Kann eine Webcam einen dedizierten Barcode-Scanner ersetzen?

Absolut. Jede handelsübliche Webcam oder jedes USB-Videoaufnahmegerät, das an einen Windows-, macOS- oder Linux-Rechner angeschlossen ist, kann in Verbindung mit der richtigen Software als Barcode-Scanner dienen. Das Verfahren funktioniert, indem Videobilder von der Kamera erfasst, jedes Bild in ein Bitmap-Bild umgewandelt und dieses Bild dann zur Dekodierung an eine Barcode-Lesebibliothek übergeben wird.

Bei herkömmlichen Barcode-Scanning-Systemen mit Tools wie dem Dynamsoft Barcode Reader SDK oder DirectShow .NET ist es oft notwendig, manuell einen Filtergraphen zu konfigurieren, einen Aufnahmegraphen einzurichten und eine Frame-Callback-Pipeline zu erstellen, nur um Frames von der Kamera zu erhalten. IronBarcode vereinfacht dies drastisch, es ist nicht nötig, eine komplexe Videostream-Infrastruktur aufzubauen. Sie liefern die Bilddaten, und die BarcodeReader-Klasse kümmert sich um den Rest und unterstützt alles von Standard-Barcodes bis hin zu QR-Codes mit einer einzigen Lesemethode .

Wie richte ich die Kamera ein und installiere die erforderlichen Abhängigkeiten?

Um Videobilder von einer Webcam in eine .NET Konsolenanwendung einzulesen, wird eine Kamerazugriffsbibliothek benötigt. OpenCvSharp4 ist ein leichtgewichtiger, plattformübergreifender .NET Wrapper für OpenCV, der dies unkompliziert macht. In Kombination mit IronBarcode erhalten Sie alles, was Sie benötigen, um einen Echtzeit-Barcodescanner zu erstellen, ohne sich mit der Aufzählung von Videoaufnahmegeräten auf niedriger Ebene oder der Konfiguration der Bildrate auseinandersetzen zu müssen.

Installieren Sie beide Pakete über 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

Mit der Installation dieser drei Pakete erhält Ihr Projekt Zugriff auf die Kamera über OpenCvSharp und Barcode-Dekodierung über IronBarcode. Es sind keine zusätzlichen Systemabhängigkeiten oder externen SDKs zu konfigurieren, einfach installieren und loslegen.

Wie lassen sich Videobilder erfassen und Barcode-Daten in Echtzeit auslesen?

Das folgende Codebeispiel erstellt einen konsolenbasierten Barcode-Scanner in Visual Studio, der Ihre Standard-Webcam öffnet, kontinuierlich Frames aufnimmt und jeden Frame nach Barcodes durchsucht. Wird ein Barcode erkannt, werden die Daten in die Konsole geschrieben und das Bild als Momentaufnahme gespeichert.

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#

Build a Barcode Scanner Using Webcam in C#: Bild 1 - Verwendung unseres Barcode-Scanners mit Webcam in C#

Dieser Code verwendet Anweisungen auf oberster Ebene, um den Code übersichtlich zu halten. Das VideoCapture-Objekt öffnet die erste angeschlossene Kameraquelle und beginnt, in einer Schleife Einzelbilder aufzunehmen. Jedes Einzelbild wird von einer OpenCvSharp-Mat in eine Bitmap konvertiert und anschließend in ein AnyBitmap-Objekt verpackt, dem plattformübergreifenden Bildformat, das die BarcodeReader.Read-Methode von IronBarcode akzeptiert.

Das BarcodeReaderOptions-Objekt steuert das Scanverhalten. Die Einstellung "Geschwindigkeit" auf "ReadingSpeed.Faster" optimiert für Echtzeitvideos, bei denen schnelle Reaktionen pro Frame erforderlich sind. Die Eigenschaft ExpectBarcodeTypes ist auf BarcodeEncoding.All gesetzt, was bedeutet, dass der Scanner alle unterstützten Formate erkennt, von Code 128 und EAN-13 bis hin zu Data Matrix und QR-Codes. Wenn Ihr Anwendungsfall nur ein bestimmtes Format umfasst, steigert eine Eingrenzung die Scanleistung. Weitere Informationen zur Konfiguration dieser Optionen finden Sie in der Referenz zu BarcodeReaderOptions .

Die foreach-Schleife durchläuft jedes BarcodeResult in der zurückgegebenen Sammlung. Die Eigenschaft "Value" enthält die dekodierten Barcode-Daten, während "BarcodeType" das Format angibt. Die Methode gibt eine BarcodeResults-Sammlung zurück, wodurch die Verarbeitung mehrerer Barcodes bei Bedarf vereinfacht wird.

Wie lässt sich der Barcode-Leser für verschiedene Anwendungsfälle optimal einstellen?

Beim Scannen von Barcodes in der Praxis herrschen oft unvollkommene Bedingungen, schlechte Lichtverhältnisse, schräge Winkel oder beschädigte Etiketten. Die Lesegeräteoptionen von IronBarcode ermöglichen es Ihnen, Geschwindigkeit und Genauigkeit je nach Art des zu verarbeitenden Objekts in Einklang zu bringen.

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

Ausgabe beim Lesen verschiedener Barcodes: Beispiel mit QR-Code

Build a Barcode Scanner Using Webcam in C#: Bild 2 - Lesen von QR-Code mit unserem Barcode-Scanner

Durch Umschalten der Geschwindigkeit auf ReadingSpeed.Detailed wird dem Decoder mitgeteilt, dass er eine gründlichere Bildanalyse durchführen soll, was ideal für die Verarbeitung verrauschter oder verzerrter Eingangsdaten ist. Durch Aktivieren der automatischen Drehung kann IronBarcode gedrehte Barcodes im Bild automatisch korrigieren. Dies ist ein häufiges Szenario, wenn Benutzer Gegenstände in ungewöhnlichen Winkeln vor die Kamera halten. Dies ist einer der Bereiche, in denen IronBarcode als QR-Code-Bibliothek und Barcode-Lesegerät wirklich heraussticht: Die integrierte Bildvorverarbeitung bewältigt diese Herausforderungen, ohne dass Sie externe Bildkorrekturfilter anschließen müssen.

Mit der BarcodeReader-API können Sie auch Barcodes aus gespeicherten Bilddateien , PDFs und TIFFs mit mehreren Einzelbildern scannen, wodurch sie weit über die Anwendung mit Webcams hinaus vielseitig einsetzbar ist. Falls Sie stattdessen einen webbasierten Scanner entwickeln, beschreibt der IronBarcode Blazor Integrationsleitfaden das Scannen mit der Webcam über einen Browser mithilfe von JavaScript Interop.

Warum ist dieser Ansatz einfacher als Alternativen?

Viele Tutorials zum Scannen von Barcodes über Webcams in C# setzen auf die Kombination mehrerer Bibliotheken, typischerweise ZXing .NET zum Dekodieren in Verbindung mit AForge .NET oder DirectShow .NET für den Kamerazugriff. Dieser Ansatz erfordert die Einrichtung eines Filtergraphen für die Videoaufnahme, die manuelle Konfiguration von Frame-Callbacks zur Extraktion von Frames aus dem Videostream und die Geräteaufzählung über Low-Level-Windows-APIs. Das Dynamsoft Barcode Reader SDK folgt einem ähnlichen Muster und benötigt DirectShow .NET -Infrastruktur für den Zugriff auf die Webcam.

IronBarcode durchbricht diese Komplexität. Die Logik zum Scannen von Barcodes befindet sich vollständig in BarcodeReader.Read, das eine Bitmap, ein Byte-Array, einen Dateipfad oder einen Stream akzeptiert. Es muss kein Erfassungsdiagramm erstellt werden, es gibt keinen Objektsender und keine EventArgs-Ereignisverdrahtung für die Frame-Erfassung, man übergibt einfach die Bilddaten und erhält die Barcode-Informationen zurück. Das bedeutet weniger Code zu schreiben, weniger Abhängigkeiten zu pflegen und mehr Zeit für die Funktionen, die in Ihrer Anwendung wirklich wichtig sind.

Für Teams, die mit .NET Core, .NET Framework oder .NET 8+ arbeiten, bietet IronBarcode konsistente plattformübergreifende Unterstützung für Windows, macOS, Linux, Docker, Azure und AWS. Entdecken Sie den vollen Funktionsumfang oder sehen Sie sich weitere Codebeispiele an, um zu sehen, was sonst noch möglich ist.

Bereit, Ihren eigenen Barcode-Scanner zu bauen?

Mit den richtigen Werkzeugen lässt sich eine Webcam in einen Barcode-Scanner in C# verwandeln. Dafür ist nur minimaler Code erforderlich. IronBarcode übernimmt die aufwendige Dekodierung, von Standard-Barcodes bis hin zu QR-Codes, während OpenCvSharp den Kamerazugriff sauber verwaltet. Zusammen ergeben sie einen Scanner, der einfach zu bauen, leicht zu erweitern und produktionsreif ist.

Starten Sie eine kostenlose Testphase , um es mit Ihrem eigenen Projekt auszuprobieren, oder informieren Sie sich über die Lizenzoptionen, wenn Sie bereit für die Veröffentlichung sind.

Häufig gestellte Fragen

Wie kann ich einen Barcode-Scanner mit einer Webcam in C# erstellen?

Sie können einen Barcode-Scanner mit einer Webcam in C# erstellen, indem Sie IronBarcode nutzen. Dabei werden Videobilder von der Webcam erfasst und Barcodes und QR-Codes in Echtzeit mit minimalen Codezeilen dekodiert.

Was sind die Vorteile der Verwendung einer Webcam zum Scannen von Barcodes?

Die Verwendung einer Webcam zum Scannen von Barcodes macht eine spezielle Hardware überflüssig, so dass jede angeschlossene Kamera zu einem leistungsstarken Barcode-Lesegerät werden kann. Dies ist kostengünstig und vielseitig für verschiedene Anwendungen.

Ist es möglich, QR-Codes mit einer Webcam in C# zu dekodieren?

Ja, mit IronBarcode können Sie QR-Codes mit einer Webcam in C# dekodieren. Die Bibliothek nimmt Live-Videobilder auf und verarbeitet sie, um QR-Code-Daten nahtlos zu extrahieren.

Welche Art von Anwendungen kann von einem Webcam-Barcodescanner in C# profitieren?

Anwendungen im Einzelhandel, der Bestandsverwaltung und der Logistik können von einem Webcam-Barcodescanner in C# profitieren. Er bietet eine flexible und kostengünstige Lösung zum Scannen von Barcodes und QR-Codes.

Unterstützt IronBarcode die Dekodierung von Barcodes in Echtzeit?

Ja, IronBarcode unterstützt die Dekodierung von Barcodes in Echtzeit. Es verarbeitet Live-Videobilder von der Webcam, um Barcodes und QR-Codes sofort zu dekodieren.

Ist der Quellcode für die Erstellung eines Webcam-Barcodescanners verfügbar?

Ja, der vollständige Quellcode für die Erstellung eines konsolenbasierten Webcam-Barcodescanners in C# wird bereitgestellt. Dies hilft Entwicklern, die Lösung zu verstehen und effizient zu implementieren.

Welche Arten von Barcodes können mit IronBarcode und einer Webcam dekodiert werden?

IronBarcode kann verschiedene Arten von Barcodes dekodieren, darunter QR-Codes, UPC, EAN und Code 128, unter anderem mit einer Webcam in C#.

Benötige ich fortgeschrittene Programmierkenntnisse, um einen Barcode-Scanner mit IronBarcode zu erstellen?

Nein, Sie brauchen keine fortgeschrittenen Programmierkenntnisse, um mit IronBarcode einen Barcode-Scanner zu erstellen. Der Prozess umfasst nur wenige Codezeilen, so dass er für Entwickler aller Qualifikationsstufen zugänglich ist.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an