Jak odczytać wiele kodów kreskowych jednocześnie w C
IronBarcode umożliwia jednoczesne odczytywanie wielu kodów kreskowych ze zdjęć i PDF-ów poprzez ustawienie ExpectMultipleBarcodes = true, upraszczając przetwarzanie danych dla aplikacji logistycznych, detalicznych i zarządzania zapasami. Niezależnie od tego, czy budujesz systemy magazynowe, aplikacje punktów sprzedaży detalicznej, czy rozwiązania do przetwarzania dokumentów, zaawansowane możliwości odczytu IronBarcode zapewniają niezawodność i wydajność, jakiej potrzebujesz.
Szybki start: Łatwe odczytywanie wszystkich kodów kreskowych z obrazu
Ten przykład pokazuje, jak szybko można użyć IronBarcode do zeskanowania obrazu w celu wykrycia każdego kodu kreskowego, który zawiera. Wystarczy ustawić ExpectMultipleBarcodes = true wraz z typami kodów kreskowych, które chcesz — bez zbędnego szablonu, bez problemów.
-
Install IronBarcode with NuGet Package Manager
PM > Install-Package BarCode -
Skopiuj i uruchom ten fragment kodu.
var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { ExpectMultipleBarcodes = true, ExpectBarcodeTypes = IronBarCode.BarcodeEncoding.AllOneDimensional }); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz bibliotekę C# do odczytu wielu kodów kreskowych
- Użyj metody
Readdo wyodrębniania wartości kodów kreskowych z różnych formatów obrazów - Skorzystaj z właściwości
ExpectMultipleBarcodes, aby skonfigurować odczyt pojedynczych lub wielu kodów kreskowych - Ustaw właściwość
ExpectMultipleBarcodesna false, aby zwiększyć wydajność - Wydrukuj wartości kodów kreskowych
Jak odczytać wiele kodów kreskowych z obrazu?
Domyślnie IronBarcode ciągle skanuje dokument, aby odczytać wiele kodów kreskowych. Zdarzały się jednak sytuacje, gdy zwracana była tylko jedna wartość kodu kreskowego, nawet jeśli obecne były więcej kodów. Aby rozwiązać ten problem, dostosuj ustawienia, aby umożliwić odczyt wielu kodów kreskowych, jak pokazano poniżej. Właściwość ExpectMultipleBarcodes występuje zarówno w klasach BarcodeReaderOptions, jak i PdfBarcodeReaderOptions, pozwalając na jej użycie do odczytu kodów kreskowych zarówno z obrazów, jak i dokumentów PDF.
:path=/static-assets/barcode/content-code-examples/how-to/read-multiple-barcodes-read-multiple-barcodes.cs
using IronBarCode;
using System;
// Set the option to read multiple barcodes
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
};
// Read barcode
var results = BarcodeReader.Read("testbc1.png", options);
foreach (var result in results)
{
Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
' Set the option to read multiple barcodes
Private options As New BarcodeReaderOptions() With {
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional
}
' Read barcode
Private results = BarcodeReader.Read("testbc1.png", options)
For Each result In results
Console.WriteLine(result.ToString())
Next result
Ustawienie ExpectMultipleBarcodes na true pozwala IronBarcode skanować cały dokument pod kątem wielu kodów kreskowych i zapisywać je w zmiennej BarcodeResults. Za pomocą pętli foreach można łatwo uzyskać dostęp i wydrukować wszystkie wartości kodów kreskowych na konsolę.
Zaawansowane scenariusze odczytu wielu kodów kreskowych
Pracując z wieloma kodami kreskowymi, możesz napotkać sytuacje wymagające dodatkowej konfiguracji. Oto szczegółowy przykład demonstrujący, jak odczytać wiele kodów kreskowych o różnych formatach z złożonego dokumentu:
using IronBarCode;
using System;
using System.Linq;
// Configure advanced options for mixed barcode types
BarcodeReaderOptions advancedOptions = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = true,
// Read both 1D and 2D barcodes
ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode | BarcodeEncoding.DataMatrix,
// Apply image correction filters for better accuracy
ImageFilters = new ImageFilterCollection() {
new SharpenFilter(),
new ContrastFilter()
},
// Set speed vs accuracy balance
Speed = ReadingSpeed.Balanced
};
// Read from various sources
var imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions);
var pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions);
// Process results with error handling
foreach (var result in imageResults)
{
Console.WriteLine($"Barcode Type: {result.BarcodeType}");
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Console.WriteLine($"Page: {result.PageNumber}");
Console.WriteLine("---");
}
using IronBarCode;
using System;
using System.Linq;
// Configure advanced options for mixed barcode types
BarcodeReaderOptions advancedOptions = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = true,
// Read both 1D and 2D barcodes
ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode | BarcodeEncoding.DataMatrix,
// Apply image correction filters for better accuracy
ImageFilters = new ImageFilterCollection() {
new SharpenFilter(),
new ContrastFilter()
},
// Set speed vs accuracy balance
Speed = ReadingSpeed.Balanced
};
// Read from various sources
var imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions);
var pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions);
// Process results with error handling
foreach (var result in imageResults)
{
Console.WriteLine($"Barcode Type: {result.BarcodeType}");
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Console.WriteLine($"Page: {result.PageNumber}");
Console.WriteLine("---");
}
Imports IronBarCode
Imports System
Imports System.Linq
' Configure advanced options for mixed barcode types
Dim advancedOptions As New BarcodeReaderOptions() With {
.ExpectMultipleBarcodes = True,
' Read both 1D and 2D barcodes
.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional Or BarcodeEncoding.QRCode Or BarcodeEncoding.DataMatrix,
' Apply image correction filters for better accuracy
.ImageFilters = New ImageFilterCollection() From {
New SharpenFilter(),
New ContrastFilter()
},
' Set speed vs accuracy balance
.Speed = ReadingSpeed.Balanced
}
' Read from various sources
Dim imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions)
Dim pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions)
' Process results with error handling
For Each result In imageResults
Console.WriteLine($"Barcode Type: {result.BarcodeType}")
Console.WriteLine($"Value: {result.Value}")
Console.WriteLine($"Confidence: {result.Confidence}%")
Console.WriteLine($"Page: {result.PageNumber}")
Console.WriteLine("---")
Next
Ten zaawansowany przykład przedstawia kilka ważnych funkcji:
- Obsługa mieszanych formatów kodów kreskowych: Łączenie różnych typów kodowania kodów kreskowych
- Filtry korekcji obrazów: Użycie filtrów obrazów w celu poprawy dokładności odczytu
- Optymalizacja prędkości odczytu: Równoważenie prędkości i dokładności dzięki opcjom prędkości odczytu
- Wyniki pewności: Uzyskiwanie dostępu do progu pewności dla każdego wykrytego kodu kreskowego
Jak mogę odczytać pojedynczy kod kreskowy dla lepszej wydajności?
IronBarcode odczytuje zarówno pojedyncze, jak i wielokrotne kody kreskowe na obrazach lub PDF-ach. Domyślnie silnik skanuje cały dokument, nawet jeśli istnieje tylko jeden kod kreskowy. Aby zwiększyć wydajność podczas odczytu pojedynczego kodu kreskowego, ustaw ExpectMultipleBarcodes na false. To zatrzymuje silnik przed skanowaniem całego dokumentu po wykryciu pierwszego kodu kreskowego, co skutkuje szybszym pozyskaniem kodu. Poniższy kod demonstruje to podejście.
:path=/static-assets/barcode/content-code-examples/how-to/read-multiple-barcodes-read-single-barcode.cs
using IronBarCode;
using System;
// Set the option to read single barcode
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = false,
ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
};
// Read barcode
var results = BarcodeReader.Read("testbc1.png", options);
foreach (var result in results)
{
Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
' Set the option to read single barcode
Private options As New BarcodeReaderOptions() With {
.ExpectMultipleBarcodes = False,
.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional
}
' Read barcode
Private results = BarcodeReader.Read("testbc1.png", options)
For Each result In results
Console.WriteLine(result.ToString())
Next result
W tym przykładzie użyliśmy tego samego obrazu z wieloma BARCODAMI, co poprzednio, ale ustawiliśmy ExpectMultipleBARCODES na false. W rezultacie zwracana jest tylko wartość pierwszego BARCODE'a, a proces skanowania zatrzymuje się po pobraniu pierwszego BARCODE'a.
Optymalizacja odczytu pojedynczego BarCoda za pomocą obszarów przycięcia
Aby uzyskać jeszcze lepszą wydajność podczas odczytu pojedynczych BarCodes, połącz ustawienie ExpectMultipleBarCodes = false ze specyfikacjami obszaru przycinania. Ta technika jest szczególnie przydatna, gdy znasz przybliżoną lokalizację BarCoda:
using IronBarCode;
using IronSoftware.Drawing;
// Define a crop region where the barcode is likely located
var cropRegion = new Rectangle(100, 100, 300, 200);
// Configure options for optimal single barcode reading
BarcodeReaderOptions optimizedOptions = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = false,
ExpectBarcodeTypes = BarcodeEncoding.Code128,
CropArea = cropRegion,
Speed = ReadingSpeed.Faster
};
// Read with optimized settings
var result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault();
if (result != null)
{
Console.WriteLine($"Barcode found: {result.Value}");
Console.WriteLine($"Read time: {result.ReadTime}ms");
}
using IronBarCode;
using IronSoftware.Drawing;
// Define a crop region where the barcode is likely located
var cropRegion = new Rectangle(100, 100, 300, 200);
// Configure options for optimal single barcode reading
BarcodeReaderOptions optimizedOptions = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = false,
ExpectBarcodeTypes = BarcodeEncoding.Code128,
CropArea = cropRegion,
Speed = ReadingSpeed.Faster
};
// Read with optimized settings
var result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault();
if (result != null)
{
Console.WriteLine($"Barcode found: {result.Value}");
Console.WriteLine($"Read time: {result.ReadTime}ms");
}
Imports IronBarCode
Imports IronSoftware.Drawing
' Define a crop region where the barcode is likely located
Dim cropRegion As New Rectangle(100, 100, 300, 200)
' Configure options for optimal single barcode reading
Dim optimizedOptions As New BarcodeReaderOptions() With {
.ExpectMultipleBarcodes = False,
.ExpectBarcodeTypes = BarcodeEncoding.Code128,
.CropArea = cropRegion,
.Speed = ReadingSpeed.Faster
}
' Read with optimized settings
Dim result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault()
If result IsNot Nothing Then
Console.WriteLine($"Barcode found: {result.Value}")
Console.WriteLine($"Read time: {result.ReadTime}ms")
End If
O ile szybsze jest odczytywanie pojedynczego BarCoda?
Ustawienie wartości ExpectMultipleBARCODES na false znacznie poprawia wydajność odczytu pojedynczych BARCODE-ów. Wzrost wydajności jest szczególnie zauważalny podczas pracy z obrazami o wysokiej rozdzielczości lub podczas wdrażania asynchronicznego odczytu BarCode w aplikacjach o dużej przepustowości.
Korzystając z dostarczonego fragmentu kodu, oto przybliżone oszacowanie różnicy w wydajności między ustawieniem ExpectMultipleBarcodes na true i false na tym samym komputerze:
| ExpectMultipleBarcodes = true | ExpectMultipleBarcodes = false |
|---|---|
| 00,91 sekundy | 00,10 sekundy |
Oznacza to około 9-krotną poprawę wydajności podczas odczytu pojedynczych BARCODE-ów. Rzeczywisty wzrost wydajności zależy od:
- Rozdzielczość i złożoność obrazów
- Liczba BarCodes obecnych na obrazie
- Wybrane formaty BarCode
- Zastosowane filtry obrazu
- Specyfikacje sprzętowe
Najlepsze praktyki dotyczące odczytu wielu BarCodes
Wdrażając funkcję odczytu wielu BarCodes w aplikacjach produkcyjnych, należy wziąć pod uwagę następujące najlepsze praktyki:
-
Określ oczekiwane typy kodów kreskowych: Zamiast używać
BarcodeEncoding.All, określ tylko formaty, których oczekujesz. Znacznie poprawia to wydajność. -
Używaj odpowiednich formatów obrazów: Aby uzyskać najlepsze wyniki, używaj obrazów o wysokim kontraście. Dowiedz się więcej o tworzeniu optymalnych obrazów BarCode.
-
Obsługa uszkodzonych BARCODE-ów: W rzeczywistości BARCODE-y mogą być uszkodzone lub źle wydrukowane. Należy zastosować techniki korekcji obrazu w celu poprawy wskaźników skuteczności czytania.
-
Przetwarzanie strumieniowe: W przypadku dużych partii danych warto rozważyć odczyt ze strumieni, aby zoptymalizować wykorzystanie pamięci.
- Obsługa błędów: Zawsze należy wdrożyć odpowiednią obsługę błędów w sytuacjach, gdy nie można odczytać kodów kreskowych:
try
{
var results = BarcodeReader.Read("barcodes.png", new BarcodeReaderOptions
{
ExpectMultipleBarcodes = true
});
if (!results.Any())
{
Console.WriteLine("No barcodes found in the image");
}
else
{
Console.WriteLine($"Found {results.Count()} barcodes");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading barcodes: {ex.Message}");
// Log error for debugging
}
try
{
var results = BarcodeReader.Read("barcodes.png", new BarcodeReaderOptions
{
ExpectMultipleBarcodes = true
});
if (!results.Any())
{
Console.WriteLine("No barcodes found in the image");
}
else
{
Console.WriteLine($"Found {results.Count()} barcodes");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading barcodes: {ex.Message}");
// Log error for debugging
}
Imports System
Try
Dim results = BarcodeReader.Read("barcodes.png", New BarcodeReaderOptions With {
.ExpectMultipleBarcodes = True
})
If Not results.Any() Then
Console.WriteLine("No barcodes found in the image")
Else
Console.WriteLine($"Found {results.Count()} barcodes")
End If
Catch ex As Exception
Console.WriteLine($"Error reading barcodes: {ex.Message}")
' Log error for debugging
End Try
Postępując zgodnie z tymi praktykami i wykorzystując wszechstronne funkcje IronBarcode, można tworzyć solidne aplikacje, które skutecznie radzą sobie z wieloma scenariuszami odczytu kodów kreskowych w różnych branżach i zastosowaniach.
Często Zadawane Pytania
Jak mogę odczytać wiele kodów kreskowych z jednego obrazu w C#?
Z IronBarcode możesz odczytać wiele kodów kreskowych z jednego obrazu, ustawiając ExpectMultipleBarcodes = true w BarcodeReaderOptions. To pozwala IronBarcode zeskanować cały dokument i zwrócić wszystkie znalezione kody kreskowe w kolekcji BarcodeResults, przez którą można iterować.
Jaki jest najszybszy sposób skanowania wszystkich kodów kreskowych na obrazie?
Najszybszym podejściem jest użycie metody Read IronBarcode z ExpectMultipleBarcodes = true: var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { ExpectMultipleBarcodes = true }). Ten minimalny kod wyodrębnia wszystkie wartości kodów kreskowych bez skomplikowanej konfiguracji.
Czy mogę odczytać wiele kodów kreskowych z dokumentów PDF oraz z obrazów?
Tak, IronBarcode wspiera odczyt wielu kodów kreskowych zarówno z obrazów, jak i dokumentów PDF. Właściwość ExpectMultipleBarcodes jest dostępna zarówno w klasach BarcodeReaderOptions, jak i PdfBarcodeReaderOptions, pozwalając na konfigurację odczytu wielu kodów kreskowych dla dowolnego typu dokumentu.
Co się stanie, jeśli nie ustawię ExpectMultipleBarcodes na true?
Domyślnie IronBarcode ciągle skanuje dokumenty pod kątem wielu kodów kreskowych. Jednak w niektórych przypadkach tylko jedna wartość kodu kreskowego może być zwrócona, nawet gdy istnieją wiele kodów kreskowych. Ustawienie ExpectMultipleBarcodes = true wyraźnie zapewnia, że IronBarcode skanuje i zwraca wszystkie kody kreskowe w dokumencie.
Jak uzyskać dostęp do poszczególnych wartości kodów kreskowych po odczytaniu wielu kodów kreskowych?
Po odczytaniu wielu kodów kreskowych za pomocą IronBarcode, wyniki są przechowywane w zmiennej BarcodeResults. Możesz łatwo uzyskać dostęp do poszczególnych wartości kodów kreskowych, używając pętli foreach do przeiterowania przez kolekcję i przetworzenia każdej wartości, tekstu i właściwości formatu kodu kreskowego.
Czy odczyt wielu kodów kreskowych jest odpowiedni dla aplikacji sprzedaży detalicznej i logistycznych?
Tak, możliwość odczytu wielu kodów kreskowych przez IronBarcode jest idealna dla systemów punktów sprzedaży detalicznej, zarządzania magazynem, śledzenia logistyki i aplikacji zarządzania zapasami. Uproszcza przetwarzanie danych przez efektywne skanowanie wszystkich kodów kreskowych na etykietach wysyłkowych, katalogach produktów lub arkuszach zapasów jednocześnie.
Czy mogę określić, jakich typów kodów kreskowych szukać podczas odczytywania wielu kodów kreskowych?
Tak, IronBarcode pozwala określić oczekiwane typy kodów kreskowych za pomocą właściwości ExpectBarcodeTypes. Możesz ustawić ją na skanowanie określonych formatów, takich jak AllOneDimensional, QRCode, lub dowolną kombinację obsługiwanych typów kodów kreskowych, aby zoptymalizować wydajność skanowania.
Czy ustawienie ExpectMultipleBarcodes wpływa na wydajność skanowania?
Ustawienie ExpectMultipleBarcodes = false może zwiększyć wydajność, gdy wiesz, że w dokumencie istnieje tylko jeden kod kreskowy. IronBarcode zakończy skanowanie po znalezieniu pierwszego kodu kreskowego, co sprawia, że jest szybsze dla scenariuszy z jednym kodem kreskowym, zachowując jednocześnie elastyczność dla odczytu kilku kodów kreskowych, gdy jest to potrzebne.

