Zbuduj czytnik kodów kreskowych używając kamery internetowej w C#
Skaner kodów kreskowych wykorzystujący kamerę internetową w C# eliminuje potrzebę fizycznych skanerów kodów kreskowych przekształcając każdą podłączoną kamerę w potężny czytnik kodów kreskowych. W tym artykule przeprowadzimy cię przez budowanie skanera kodów kreskowych opartego na konsoli korzystającego z kamery internetowej, który pobiera klatki wideo na żywo i dekoduje kody kreskowe oraz kody QR w czasie rzeczywistym, wszystko przy użyciu zaledwie kilku linii kodu.
Niezależnie od tego, czy piszesz prototyp systemu inwentaryzacji, budujesz kiosk do rejestracji, czy po prostu jesteś ciekawy, jak działa skanowanie kodów kreskowych od strony technicznej, ten przewodnik dostarcza działający kod źródłowy, który możesz natychmiast uruchomić.
Czy kamera internetowa może zastąpić dedykowany skaner kodów kreskowych?
Zdecydowanie. Każda standardowa kamera internetowa lub urządzenie do przechwytywania wideo USB podłączone do komputera z systemem Windows, macOS lub Linux może służyć jako skaner kodów kreskowych, gdy zostanie sparowane z odpowiednim oprogramowaniem. Proces polega na przechwytywaniu klatek wideo z kamery, konwertowaniu każdej klatki na obraz bitmapowy, a następnie przekazywaniu tego obrazu do biblioteki do odczytu kodów kreskowych w celu dekodowania.
Tradycyjne ustawienia skanowania kodów kreskowych z wykorzystaniem narzędzi takich jak Dynamsoft Barcode Reader SDK lub DirectShow.NET często wymagają ręcznej konfiguracji grafu filtrów, ustanowienia grafu przechwytywania i połączenia strumienia powrotnego klatek tylko po to, aby uzyskać klatki z kamery. IronBarcode upraszcza to dramatycznie, nie ma potrzeby budowania skomplikowanej infrastruktury strumienia wideo. Dostarczasz dane obrazowe, a klasa BarcodeReader zajmuje się resztą, wspierając wszystko od standardowych kodów kreskowych po kody QR za pomocą jednej metody odczytu.
Jak skonfigurować kamerę i zainstalować zależności?
Pobieranie klatek wideo z kamery internetowej do aplikacji konsolowej .NET wymaga biblioteki dostępu do kamery. OpenCvSharp4 to lekka, wieloplatformowa nakładka .NET wokół OpenCV, która to upraszcza. W połączeniu z IronBarcode, dostarcza wszystko, co jest potrzebne do stworzenia skanera kodów kreskowych w czasie rzeczywistym, bez walki z enumeracją urządzeń przechwytywania wideo na niskim poziomie lub konfiguracją częstotliwości ramek.
Zainstaluj oba pakiety przez NuGet:
dotnet add package OpenCvSharp4.Windows, OpenCvSharp4.Extensions, BarCode
Z tymi trzema pakietami zainstalowanymi, twój projekt zyskuje dostęp do kamery przez OpenCvSharp i dekodowanie kodów kreskowych dzięki IronBarcode. Nie ma dodatkowych zależności systemowych ani zewnętrznych SDK do konfiguracji, po prostu zainstaluj i gotowe.
Jak przechwytywać klatki wideo i odczytywać dane z kodów kreskowych w czasie rzeczywistym?
Poniższy przykład kodu tworzy oparty na konsoli skaner kodów kreskowych w Visual Studio, który otwiera twoją domyślną kamerę internetową, ciągle przechwytuje klatki i skanuje każdą z nich pod kątem kodów kreskowych. Gdy kod kreskowy zostanie wykryty, dane są zapisane na konsolę, a klatka jest zapisywana jako migawka.
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.")
Using Webcam for Barcode Scanning in C

Ten kod używa najwyższego poziomu instrukcji, aby utrzymać przejrzystość. Obiekt VideoCapture otwiera pierwsze podłączone źródło kamery i zaczyna pobierać ramki w pętli. Każda ramka jest konwertowana z OpenCvSharp Mat na Bitmapę, a następnie opakowywana w AnyBitmap, format obrazu kompatybilny z BarcodeReader.Read w bibliotekach IronBarcode.
Obiekt BarcodeReaderOptions kontroluje zachowanie skanowania. Ustawienie Speed na ReadingSpeed.Faster optymalizuje działanie w przypadku wideo w czasie rzeczywistym, gdzie potrzebne są szybkie odpowiedzi dla każdej ramki. Właściwość ExpectBarcodeTypes ustawiona jest na BarcodeEncoding.All, co oznacza, że skaner wykryje każdy obsługiwany format, od Code 128 i EAN-13 po Data Matrix i kody QR. Jeśli Twój przypadek użycia dotyczy tylko określonego formatu, zawężenie tego wyboru zwiększy wydajność skanowania. Aby dowiedzieć się więcej o konfigurowaniu tych opcji, sprawdź dokumentację BarcodeReaderOptions.
Pętla foreach iteruje przez każdy BarcodeResult w zwróconej kolekcji. Właściwość Value zawiera zdekodowane dane z kodu kreskowego, podczas gdy BarcodeType identyfikuje format. Metoda zwraca kolekcję BarcodeResults, ułatwiając przetwarzanie wielu kodów kreskowych w razie potrzeby.
Jak dostosować czytnik kodów kreskowych do różnych przypadków użycia?
Skanowanie kodów kreskowych w rzeczywistych warunkach często obejmuje niedoskonałe warunki, słabe oświetlenie, przekrzywione kąty czy uszkodzone etykiety. Opcje czytnika IronBarcode pozwalają zbalansować szybkość z dokładnością w zależności od tego, z czym pracujesz.
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
Wyjście dla różnych kodów kreskowych: Przykład z kodem QR

Przełączenie Speed na ReadingSpeed.Detailed informuje dekoder, aby zastosował bardziej szczegółową analizę obrazu, co idealnie nadaje się do obsługi szumów i przekrzywionych danych wejściowych. Włączenie AutoRotate pozwala IronBarcode automatycznie korygować obrócone kody kreskowe na obrazie, co jest częstym scenariuszem, gdy użytkownicy trzymają przedmioty pod dziwnymi kątami przed kamerą. To jest jedna z dziedzin, w których IronBarcode naprawdę się wyróżnia jako biblioteka kodów QR i czytnik kodów kreskowych: jego wbudowane przetwarzanie obrazu radzi sobie z tymi wyzwaniami bez konieczności podłączania zewnętrznych filtrów korygujących obraz.
Możesz również skanować kody kreskowe z zapisanych plików graficznych, PDF-ów i wieloramkowych TIFF-ów używając tego samego API BarcodeReader, co czyni go wszechstronnym znacznie poza przypadkami używania kamer internetowych. Jeśli budujesz zamiast tego skaner oparty na webie, przewodnik po integracji z IronBarcode dla Blazor obejmuje skanowanie kamerą internetową przez przeglądarkę, używając interop JavaScript.
Co sprawia, że to podejście jest prostsze niż inne?
Wiele samouczków dotyczących skanerów kodów kreskowych w C# polega na połączeniu wielu bibliotek, zazwyczaj ZXing.NET do dekodowania połączonego z AForge.NET lub DirectShow.NET do uzyskiwania dostępu do kamery. To podejście wymaga ustawienia grafu filtrów dla przechwytywania wideo, ręcznego konfigurowania wywołań ramek do ekstrakcji ramek ze strumienia wideo i obsługi enumeracji urządzeń za pomocą niskopoziomowych API Windows. SDK Dynamsoft Barcode Reader postępuje podobnie, wymagając instalacji DirectShow.NET do uzyskiwania dostępu do kamery internetowej.
IronBarcode omija tę złożoność. Logika skanowania kodów kreskowych znajduje się w BarcodeReader.Read, która przyjmuje Bitmapę, tablicę bajtów, ścieżkę do pliku lub Stream. Nie ma potrzeby budowania grafu przechwytywania, żadnych obiektów typu sender i EventArgs e do wywołań ramek, po prostu przekazujesz dane obrazu i otrzymujesz informacje o kodzie kreskowym z powrotem. To oznacza mniej kodu do napisania, mniej zależności do utrzymania i więcej czasu na funkcje, które naprawdę mają znaczenie w Twojej aplikacji.
Dla zespołów budujących na .NET Core, .NET Framework czy .NET 8+, IronBarcode zapewnia spójne wsparcie międzyplatformowe na Windows, macOS, Linux, Docker, Azure i AWS. Odkryj pełny zestaw funkcji lub przeszukaj dodatkowe przykłady kodu, aby zobaczyć, co jeszcze jest możliwe.
Gotowy do zbudowania własnego skanera kodów kreskowych?
Zmiana kamery internetowej w skaner kodów kreskowych w C# wymaga minimalnej ilości kodu, gdy masz odpowiednie narzędzia. IronBarcode zajmuje się ciężką pracą związaną z dekodowaniem, od standardowych kodów kreskowych po kody QR, podczas gdy OpenCvSharp czysto zarządza dostępem do kamery. Razem tworzą skaner, który jest łatwy do zbudowania, łatwy do rozszerzenia i gotowy do produkcji.
Rozpocznij darmowy okres próbny, aby wypróbować go w swoim własnym projekcie, lub zbadaj opcje licencjonowania, gdy będziesz gotowy do wdrożenia.
Często Zadawane Pytania
Jak mogę stworzyć skaner kodów kreskowych z użyciem kamery internetowej w C#?
Można stworzyć skaner kodów kreskowych z użyciem kamery internetowej w C# korzystając z IronBarcode. Obejmuje to przechwytywanie klatek wideo z kamery internetowej i dekodowanie kodów kreskowych oraz kodów QR w czasie rzeczywistym przy minimalnej ilości kodu.
Jakie są korzyści z używania kamery internetowej do skanowania kodów kreskowych?
Użycie kamery internetowej do skanowania kodów kreskowych eliminuje potrzebę stosowania dedykowanego sprzętu, pozwalając dowolnej podłączonej kamerze stać się potężnym czytnikiem kodów kreskowych. Jest to ekonomiczne i wszechstronne rozwiązanie dla różnych aplikacji.
Czy można dekodować kody QR za pomocą kamery internetowej w C#?
Tak, z IronBarcode można dekodować kody QR za pomocą kamery internetowej w C#. Biblioteka przechwytuje klatki wideo na żywo i przetwarza je, aby płynnie wyodrębnić dane z kodów QR.
Jakie aplikacje mogą skorzystać z kamery internetowej do skanowania kodów kreskowych w C#?
Aplikacje w sprzedaży detalicznej, zarządzaniu zapasami i logistyce mogą skorzystać z kamery internetowej do skanowania kodów kreskowych w C#. Zapewnia to elastyczne i ekonomiczne rozwiązanie do skanowania kodów kreskowych i kodów QR.
Czy IronBarcode obsługuje dekodowanie kodów kreskowych w czasie rzeczywistym?
Tak, IronBarcode obsługuje dekodowanie kodów kreskowych w czasie rzeczywistym. Przetwarza klatki wideo na żywo z kamery internetowej, aby natychmiast dekodować kody kreskowe i kody QR.
Czy kod źródłowy do budowy skanera kodów kreskowych z użyciem kamery internetowej jest dostępny?
Tak, zapewniony jest pełny kod źródłowy do budowy opartego na konsoli skanera kodów kreskowych z użyciem kamery internetowej w C#. To pomaga programistom zrozumieć i efektywnie wdrożyć rozwiązanie.
Jakie rodzaje kodów kreskowych można dekodować za pomocą IronBarcode z kamerą internetową?
IronBarcode może dekodować różne rodzaje kodów kreskowych, w tym kody QR, UPC, EAN i Code 128, między innymi, z użyciem kamery internetowej w C#.
Czy potrzebuję zaawansowanych umiejętności programistycznych, aby stworzyć skaner kodów kreskowych z użyciem IronBarcode?
Nie, nie potrzebujesz zaawansowanych umiejętności programistycznych, aby stworzyć skaner kodów kreskowych z użyciem IronBarcode. Proces obejmuje kilka linijek kodu, dzięki czemu jest dostępny dla programistów o wszystkich poziomach zaawansowania.




