Jak dostosować prędkość czytania w języku C# za pomocą IronBarcode
IronBarcode zapewnia cztery opcje szybkości odczytu (Faster, Balanced, Detailed, ExtremeDetail), które pozwalają kontrolować kompromis między szybkością przetwarzania a dokładnością podczas odczytu kodów kreskowych w C#, z Balanced jako zalecanym punktem wyjścia dla większości aplikacji.
Wprowadzenie
Dokładność ma kluczowe znaczenie podczas odczytu dużych zbiorów BarCodes, ale równie ważne są kwestie alokacji zasobów i wydajności przetwarzania. Jakość obrazów wejściowych decyduje o tym, w jaki sposób czytnik kodów kreskowych powinien je przetwarzać — czy pominąć przetwarzanie wstępne w przypadku wyraźnych obrazów, czy też zastosować opcje wymagające większych zasobów w celu poprawy dokładności w przypadku kodów kreskowych o obniżonej jakości.
IronBarcode zapewnia elastyczność w wyborze szybkości przetwarzania i poziomu dokładności, umożliwiając kontrolę nad każdym aspektem procesu odczytu kodów kreskowych. Możesz podejmować decyzje na podstawie dostarczonych obrazów i dostępnych zasobów. W przypadku bardziej zaawansowanych scenariuszy odczytu BarCode zapoznaj się z naszym obszernym samouczkiem dotyczącym odczytu BarCode, który obejmuje różne formaty i techniki.
W tym artykule przedstawiono wytyczne dotyczące wyboru optymalnej prędkości czytania w różnych sytuacjach. Wykorzystamy przykłady kodów QR, aby zademonstrować, jak zmiana prędkości odczytu wpływa na wyniki. Jeśli pracujesz konkretnie z kodami QR, zapoznaj się z naszym samouczkiem dotyczącym generatora kodów QR w języku C#, aby utworzyć próbki testowe.
Szybki start: Odczyt BarCoda z wyważoną prędkością
Użyj BarcodeReaderOptions IronBarcode, aby natychmiast ustawić poziom Speed dla swojego skanu. Ten przykład pokazuje, jak szybko odczytywać kody kreskowe, używając ustawienia Balanced dla szybkich i niezawodnych wyników.
-
Install IronBarcode with NuGet Package Manager
PM > Install-Package BarCode -
Skopiuj i uruchom ten fragment kodu.
var results = IronBarCode.BarcodeReader.Read("path/to/image.png", new IronBarCode.BarcodeReaderOptions { Speed = IronBarCode.ReadingSpeed.Balanced }); -
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#, aby dostosować prędkość czytania
- Użyj klasy BarcodeReaderOptions, aby ustawić prędkość odczytu
- Użyj metody
Readdo wyodrębniania wartości kodów kreskowych z różnych formatów obrazów - Wydrukuj wartości kodów kreskowych
- Oceń kompromis między wydajnością a różnymi prędkościami czytania
Jakie są dostępne opcje prędkości czytania?
IronBarcode oferuje cztery opcje ReadingSpeed: Faster, Balanced, Detailed i ExtremeDetail. Przeanalizujemy każdą opcję, korzystając z zestawu przykładów zawierającego głównie zniekształcone obrazy BARCODE-ów oraz kilka wyraźnych obrazów, aby zademonstrować możliwości biblioteki. Pełną listę obsługiwanych formatów można znaleźć na naszej stronie poświęconej obsługiwanym formatom BarCode.
Wykorzystamy bibliotekę testów porównawczych .NET do pomiaru czasu przetwarzania i zużycia pamięci, pokazując porównanie poszczególnych opcji oraz identyfikując idealne scenariusze dla każdej prędkości odczytu. Przedstawimy kod testowy oraz prostą metodę zliczania poprawnie odczytanych uszkodzonych BARCODE-ów. Aby uzyskać więcej informacji na temat konfiguracji opcji czytnika, zapoznaj się z naszym przykładem ustawień czytnika BarCode.
Kiedy należy używać opcji szybszego tłumaczenia?
Opcja Faster zapewnia najszybszy odczyt kodów kreskowych przy minimalnych zasobach, ale zmniejsza dokładność. Proces ten pomija wstępne przetwarzanie obrazów i działa najlepiej, gdy obrazy wejściowe są już ostre i wyraźne.
Ten przykład ustawia właściwość Speed na ReadingSpeed.Faster, importuje katalog kodów kreskowych i drukuje znalezione kody kreskowe z ich wartościami, typami i liczbą na obraz. Aby lepiej zrozumieć odczytywanie BARCODE-ów z różnych formatów obrazów, zapoznaj się z naszym przewodnikiem dotyczącym odczytywania BARCODE-ów z obrazów.
:path=/static-assets/barcode/content-code-examples/how-to/reading-speed-option-faster.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
var optionsFaster = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster
};
// Directory containing PDF files
string folderPath = @"YOUR_FILE_PATH";
// Get all PDF files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");
int countFaster = 0;
var stopwatch = Stopwatch.StartNew();
foreach (var file in pdfFiles)
{
// Read the barcode
var results = BarcodeReader.Read(file, optionsFaster);
if (results.Any())
{
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
foreach (var result in results)
{
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}");
countFaster++;
}
}
else
{
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}");
}
}
stopwatch.Stop();
// Print number of images the barcode reader could decode
Console.WriteLine($"Faster could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq
Dim optionsFaster As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Faster
}
' Directory containing PDF files
Dim folderPath As String = "YOUR_FILE_PATH"
' Get all PDF files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")
Dim countFaster As Integer = 0
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
For Each file In pdfFiles
' Read the barcode
Dim results = BarcodeReader.Read(file, optionsFaster)
If results.Any() Then
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
For Each result In results
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}")
countFaster += 1
Next
Else
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}")
End If
Next
stopwatch.Stop()
' Print number of images the barcode reader could decode
Console.WriteLine($"Faster could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms")
Opcja Faster wykryła 146 wyników kodów kreskowych z 430 w ciągu 25 sekund, osiągając 33,95% dokładności. Chociaż metoda ta jest szybka, nadaje się tylko do obrazów w idealnym stanie. W przypadku wielu BarCodes na jednym obrazie warto zapoznać się z naszym przewodnikiem dotyczącym odczytu wielu BarCodes, aby uzyskać optymalną konfigurację.
Dlaczego opcja "Zrównoważona" jest zalecaną opcją szybkości?
Opcja Balanced balansuje między dokładnością a wydajnością odczytu. IronBarcode stosuje lekkie przetwarzanie obrazu w celu wyostrzenia obszaru kodu kreskowego, ułatwiając jego wykrywanie i odczyt. To ustawienie jest zalecane dla większości współczesnych obrazów, ponieważ przetwarzanie w trybie jasnym zazwyczaj daje dokładne wyniki.
Użyjmy tych samych obrazów, aby pokazać, jak Balanced wpływa na wyniki wyjściowe. W przypadku operacji asynchronicznych zapoznaj się z naszym przewodnikiem dotyczącym asynchroniczności i wielowątkowości w IronBarcode.
:path=/static-assets/barcode/content-code-examples/how-to/reading-speed-option-balanced.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
var optionsFaster = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced
};
// Directory containing PDF files
string folderPath = @"YOUR_FILE_PATH";
// Get all PDF files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");
int countFaster = 0;
var stopwatch = Stopwatch.StartNew();
foreach (var file in pdfFiles)
{
// Read the barcode
var results = BarcodeReader.Read(file, optionsFaster);
if (results.Any())
{
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
foreach (var result in results)
{
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}");
countFaster++;
}
}
else
{
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}");
}
}
stopwatch.Stop();
// Print number of images the barcode reader could decode
Console.WriteLine($"Balanced could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq
Dim optionsFaster As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced
}
' Directory containing PDF files
Dim folderPath As String = "YOUR_FILE_PATH"
' Get all PDF files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")
Dim countFaster As Integer = 0
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
For Each file In pdfFiles
' Read the barcode
Dim results = BarcodeReader.Read(file, optionsFaster)
If results.Any() Then
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
For Each result In results
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}")
countFaster += 1
Next
Else
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}")
End If
Next
stopwatch.Stop()
' Print number of images the barcode reader could decode
Console.WriteLine($"Balanced could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms")
Opcja Balanced wykryła 237 wyników kodów kreskowych z 430 w ciągu 43 sekund. Zapewnia 55,11% dokładności—znacznie lepszy wynik w porównaniu do Faster—przy tylko niewielkim zwiększeniu czasu. Ta opcja zapewnia optymalną równowagę między pamięcią a szybkością, dzięki czemu idealnie nadaje się do większości sytuacji i jest zalecanym punktem wyjścia. To wyważone podejście sprawdza się szczególnie dobrze w połączeniu z odpowiednimi technikami przetwarzania wstępnego obrazów.
Kiedy potrzebuję opcji szczegółowej szybkości?
Gdy obrazy są mocno rozmyte lub zniekształcone i Balanced nie może zapewnić wyraźnych wyników, użyj opcji Detailed. Stosuje średni poziom przetwarzania wstępnego w celu wyostrzenia obszaru BarCode i zredukowania szumu cyfrowego, co poprawia wykrywalność. W przypadku obrazów o bardzo niskiej jakości zapoznaj się z naszym przewodnikiem po korekcji obrazów, który obejmuje różne techniki przetwarzania wstępnego.
Zastosujmy ustawienie Detailed i zaobserwujmy jego wpływ na wyjście.
:path=/static-assets/barcode/content-code-examples/how-to/reading-speed-option-detailed.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
var optionsFaster = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Detailed
};
// Directory containing PDF files
string folderPath = @"YOUR_FILE_PATH";
// Get all PDF files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");
int countFaster = 0;
var stopwatch = Stopwatch.StartNew();
foreach (var file in pdfFiles)
{
// Read the barcode
var results = BarcodeReader.Read(file, optionsFaster);
if (results.Any())
{
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
foreach (var result in results)
{
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}");
countFaster++;
}
}
else
{
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}");
}
}
stopwatch.Stop();
// Print number of images the barcode reader could decode
Console.WriteLine($"Detailed could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq
Dim optionsFaster As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Detailed
}
' Directory containing PDF files
Dim folderPath As String = "YOUR_FILE_PATH"
' Get all PDF files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")
Dim countFaster As Integer = 0
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
For Each file In pdfFiles
' Read the barcode
Dim results = BarcodeReader.Read(file, optionsFaster)
If results.Any() Then
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
For Each result In results
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}")
countFaster += 1
Next
Else
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}")
End If
Next
stopwatch.Stop()
' Print number of images the barcode reader could decode
Console.WriteLine($"Detailed could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms")
Opcja Detailed wykryła 237 wyników kodów kreskowych z 430 w ciągu 5 minut i 30 sekund. Jego 55,11% wskaźnik skuteczności w przypadku poważnie uszkodzonych BARCODE-ów świadczy o jego dokładności. Jednak ze względu na znacznie wydłużony czas przetwarzania opcja ta powinna być zarezerwowana wyłącznie dla obrazów BarCode o obniżonej jakości. W przypadku pracy z niedoskonałymi kodami kreskowymi zapoznaj się z naszym przykładem obsługi niedoskonałych kodów kreskowych, aby poznać dodatkowe strategie.
W jakich sytuacjach potrzebna jest szybkość ExtremeDetail?
Ustawienie ExtremeDetail stosuje intensywne przetwarzanie obrazów kodów kreskowych, znacznie zmniejszając wydajność odczytu. Ta opcja, wymagająca dużej mocy obliczeniowej procesora, sprawdza się najlepiej w przypadku skanowania wielu niewyraźnych lub zamazanych BARCODE-ów w jednym pliku wejściowym. Należy z niej korzystać w ostateczności, gdy inne opcje nie dają pożądanych rezultatów. W przypadku przetwarzania dużych ilości danych warto rozważyć odczytywanie BARCODE-ów z plików PDF, które często zawierają wiele BARCODE-ów na jednej stronie.
Zastosujmy ustawienie ExtremeDetail, aby zaobserwować jego wpływ.
:path=/static-assets/barcode/content-code-examples/how-to/reading-speed-option-extreme-detailed.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
var optionsFaster = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail
};
// Directory containing PDF files
string folderPath = @"YOUR_FILE_PATH";
// Get all PDF files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");
int countFaster = 0;
var stopwatch = Stopwatch.StartNew();
foreach (var file in pdfFiles)
{
// Read the barcode
var results = BarcodeReader.Read(file, optionsFaster);
if (results.Any())
{
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
foreach (var result in results)
{
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}");
countFaster++;
}
}
else
{
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}");
}
}
stopwatch.Stop();
// Print number of images the barcode reader could decode
Console.WriteLine($"ExtremeDetail could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq
Dim optionsFaster As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail
}
' Directory containing PDF files
Dim folderPath As String = "YOUR_FILE_PATH"
' Get all PDF files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")
Dim countFaster As Integer = 0
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
For Each file In pdfFiles
' Read the barcode
Dim results = BarcodeReader.Read(file, optionsFaster)
If results.Any() Then
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
For Each result In results
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}")
countFaster += 1
Next
Else
Console.WriteLine($"No barcode found in: {Path.GetFileName(file)}")
End If
Next
stopwatch.Stop()
' Print number of images the barcode reader could decode
Console.WriteLine($"ExtremeDetail could read = {countFaster} out of {pdfFiles.Length} in {stopwatch.ElapsedMilliseconds}ms")
Opcja ExtremeDetail zidentyfikowała 313 z 430 obrazów kodów kreskowych w około 10 minut. Chociaż osiąga imponującą dokładność na poziomie 72,79% w przypadku poważnie uszkodzonych BARCODE-ów, to ze względu na duże zużycie zasobów nadaje się do stosowania wyłącznie w ostateczności. Przed skorzystaniem z tej opcji warto rozważyć wstępne przetworzenie obrazów.
Jak wypadają różne prędkości w porównaniu?
| Tryb | Znalezione BarCodes | Średni czas | Czas na plik | GC Pressure | Zysk w zakresie dokładności |
|---|---|---|---|---|---|
| Szybciej | 147/430 (33,95%) | 25 s | 0,058 s | Wysoka (Gen2: 177K) | Wersja wyjściowa |
| Zrównoważony | 237/430 (55,11%) | 43 s | 0,1 s | Wysoka (Gen2: 151 tys.) | +62,32% w porównaniu z Faster |
| Szczegółowe | 237/430 (55,11%) | 5,50 min | 0,767 s | Bardzo wysoka (Gen2: 297 tys.) | +0% vs Zrównoważone |
| ExtremeDetail | 313/430 (72,79%) | 10,14 min | 1,414 s | Extreme (Gen2: 4,74 mln) | +32,08% w porównaniu ze szczegółowym |
Jak wybrać odpowiednią prędkość dla mojej aplikacji?
Na podstawie powyższych porównań, zacznij od ustawienia Faster i przejdź przez Balanced, Detailed i ExtremeDetail, aby zidentyfikować znaczące różnice w wynikach wyjściowych. W większości przypadków Balanced radzi sobie z wszystkim wystarczająco dobrze. Używaj Detailed i ExtremeDetail tylko dla mocno zniekształconych obrazów. Dla cienkich lub niskiej jakości kodów kreskowych połącz ustawienie szybkości z MinScanLines = 1, aby zwiększyć czułość detekcji.
Chociaż Detailed i ExtremeDetail stosują średnie i ciężkie przetwarzanie, czasem bardziej efektywne jest podzielenie procesu—zastosuj filtry obrazu ręcznie przed odczytem kodu kreskowego zamiast używania jednego procesu. Więcej informacji na temat wstępnego przetwarzania obrazów można znaleźć w tym przewodniku.
Które ustawienie prędkości pasuje do mojego zastosowania?
Często Zadawane Pytania
Jakie są cztery dostępne opcje prędkości odczytu kodów kreskowych?
IronBarcode oferuje cztery opcje ReadingSpeed: Faster, Balanced, Detailed i ExtremeDetail. Każda z nich zapewnia inną równowagę między prędkością przetwarzania a dokładnością, z Balanced zalecanym jako domyślny punkt wyjścia dla większości aplikacji.
Jak ustawić prędkość odczytu podczas skanowania kodów kreskowych?
Prędkość odczytu można ustawić za pomocą klasy BarcodeReaderOptions w IronBarcode. Wystarczy stworzyć nowy obiekt BarcodeReaderOptions i ustawić właściwość Speed na wybraną wartość ReadingSpeed (Faster, Balanced, Detailed lub ExtremeDetail), a następnie przekazać go do metody Read.
Którą opcję prędkości odczytu powinienem użyć w mojej aplikacji?
IronBarcode zaleca rozpoczęcie od ustawienia Balanced dla większości aplikacji. Jeśli posiadasz wysokiej jakości, wyraźne obrazy kodów kreskowych, możesz użyć trybu Faster. Dla zniszczonych lub niskiej jakości obrazów rozważ użycie trybów Detailed lub ExtremeDetail w celu uzyskania lepszej dokładności.
Jaki jest kompromis między różnymi opcjami prędkości odczytu?
Kompromis w szybkościach odczytu w IronBarcode polega na prędkości przetwarzania i dokładności. Tryb Faster przetwarza obrazy szybko, ale może nie wykryć kodów kreskowych w niskiej jakości obrazach. Tryb ExtremeDetail zapewnia najwyższą dokładność, ale wymaga więcej czasu przetwarzania i zasobów pamięci.
Czy mogę odczytywać różne formaty kodów kreskowych z różnymi ustawieniami prędkości?
Tak, IronBarcode obsługuje odczyt różnych formatów kodów kreskowych, w tym kodów QR z wszystkimi ustawieniami prędkości. Ustawienie prędkości wpływa na podejście do przetwarzania, ale nie ogranicza typów kodów kreskowych, które można odczytać. Odwiedź stronę obsługiwanych formatów kodów kreskowych, aby poznać pełną listę.
Jak jakość obrazu wpływa na wybór prędkości odczytu?
Jakość obrazu bezpośrednio wpływa na wybór prędkości w IronBarcode. Wyraźne, wysokiej jakości obrazy kodów kreskowych mogą być przetwarzane wydajnie z trybem Faster. Zdegradowane, zamazane lub niskiego kontrastu obrazy wymagają trybów Detailed lub ExtremeDetail, aby zapewnić dokładne wykrywanie i odczyt kodów kreskowych.
Jaki jest minimalny przepływ pracy dla odczytu kodów kreskowych z opcjami prędkości?
Minimalny przepływ pracy z IronBarcode obejmuje 5 kroków: 1) Pobierz bibliotekę C#, 2) Użyj BarcodeReaderOptions, aby ustawić prędkość odczytu, 3) Wywołaj metodę Read z ścieżką do obrazu, 4) Wyodrębnij i wydrukuj wartości kodów kreskowych, 5) Oceń kompromisy wydajności między różnymi prędkościami.
Jak zmierzyć wpływ wydajności różnych prędkości odczytu?
Wydajność IronBarcode z różnymi prędkościami odczytu można zmierzyć przy użyciu bibliotek benchmarkowych .NET do śledzenia czasu przetwarzania i zużycia pamięci. Pomaga to zidentyfikować optymalne ustawienie prędkości dla twojego specyficznego przypadku użycia i ograniczeń zasobów.

