Szybka konfiguracja OCR w języku C# dla optymalnej wydajności
Szybka konfiguracja IronOCR pozwala na uzyskanie do 17% szybszej prędkości przetwarzania OCR bez utraty dokładności, korzystając z trybu językowego EnglishFast i wyłączając niepotrzebne funkcje, takie jak odczyt kodu kreskowego. Ta optymalizacja jest idealna do przetwarzania dużych ilości danych, gdzie czas ma kluczowe znaczenie.
IronOCR działa skutecznie od razu po uruchomieniu. Gdy szybkość ma pierwszeństwo przed absolutną dokładnością, IronOCR oferuje szybką konfigurację. To ustawienie zapewnia znaczny wzrost wydajności skanowania przy minimalnym wpływie na dokładność, dzięki czemu jest znacznie szybsze niż standardowa konfiguracja OCR.
W tym artykule pokazano, jak skonfigurować tryb szybki, oraz porównano wyniki testów porównawczych między konfiguracjami IronOCR w trybie szybkim i standardowym. Niezależnie od tego, czy przetwarzasz zeskanowane dokumenty, pliki PDF czy obrazy, te optymalizacje mogą znacznie poprawić wydajność Twojej aplikacji.
Jak skonfigurować szybką konfigurację OCR
- Zainstaluj bibliotekę OCR za pomocą NuGet, aby skonfigurować IronOCR
- Zainicjuj silnik OCR
- Ustaw
językna angielski Szybko - Ustaw właściwość
ReadBarCodesnafalse - Załaduj obraz i wyodrębnij tekst
Szybki start: Konfiguracja funkcji Fast OCR w języku C#
Główny komponent do szybkiej konfiguracji to właściwość Language. Ustawienie właściwości Language na OcrLanguage.EnglishFast priorytetyzuje szybkość ponad niewielkim potencjalnym kosztem dokładności. Dzięki temu IronOCR może znacznie szybciej odczytywać duże ilości danych, co jest szczególnie przydatne w aplikacjach o znaczeniu krytycznym, gdzie czas ma kluczowe znaczenie.
Oprócz ustawienia szybkiego języka, można uzyskać dodatkowe przyspieszenie poprzez wyłączenie zbędnych konfiguracji, takich jak ReadBarCodes. Pozwól IronOCR automatycznie wykryć podział strony, aby konfiguracja była prosta. Aby uzyskać informacje na temat bardziej zaawansowanych opcji konfiguracyjnych, zapoznaj się z naszym szczegółowym przewodnikiem konfiguracji Tesseract.
Poniższy przykład kodu przetwarza następujący obraz wejściowy:
Jakiego formatu pliku użyć?
Jakiego kodu potrzebuję do szybkiej konfiguracji?
-
Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr -
Skopiuj i uruchom ten fragment kodu.
/* :path=/static-assets/ocr/content-code-examples/how-to/ocr-fast-configuration.cs */ using IronOcr; using System; var ocrTesseract = new IronTesseract(); // Fast Dictionary ocrTesseract.Language = OcrLanguage.EnglishFast; // Turn off unneeded options ocrTesseract.Configuration.ReadBarCodes = false; // Assume text is laid out neatly in an orthogonal document ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto; using var ocrInput = new OcrInput(); ocrInput.LoadImage("image.png"); var ocrResult = ocrTesseract.Read(ocrInput); Console.WriteLine(ocrResult.Text); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną
Jakiego wyniku mogę się spodziewać?
Poniżej znajduje się tekst wyodrębniony z powyższego fragmentu. Silnik OCR dokładnie przechwytuje tekst literacki, zachowując oryginalne formatowanie i strukturę. Szybka konfiguracja zapewnia doskonałe wyniki w przypadku wyraźnego tekstu o wysokim kontraście, takiego jak w tym przykładzie.
Czym różni się konfiguracja szybka od standardowej?
Aby zademonstrować rzeczywisty wpływ, porównujemy wydajność konfiguracji standardowej z konfiguracją szybką. Używamy zestawu 10 przykładowych obrazów, z których każdy zawiera kilka akapitów, aby porównać wydajność i zwizualizować kompromisy związane z użyciem szybkiej konfiguracji.
Dla standardowej konfiguracji, inicjalizujemy IronTesseract z jego domyślnymi ustawieniami, bez stosowania właściwości zorientowanych na szybkość. To podejście oparte na benchmarkach jest podobne do naszego przewodnika po monitorowaniu wydajności, który pokazuje, jak monitorować operacje OCR w czasie rzeczywistym.
Oto przykładowe dane wejściowe, których używamy do przeprowadzenia testu. Obrazy te przedstawiają typowe scenariusze dokumentów, z którymi można się spotkać podczas przetwarzania dokumentów wielostronicowych lub operacji wsadowych.
Jak uruchomić test porównawczy?
:path=/static-assets/ocr/content-code-examples/how-to/ocr-fast-configuration-benchmark.cs
using IronOcr;
using System;
using System.Diagnostics;
using System.IO;
// --- Tesseract Engine Setup ---
var ocrTesseract = new IronTesseract();
ocrTesseract.Language = OcrLanguage.EnglishFast;
ocrTesseract.Configuration.ReadBarCodes = false;
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
// --- 1. Define folder and get files ---
string folderPath = @"images"; // IMPORTANT: Set this to your image directory
string filePattern = "*.png"; // Change to "*.jpg", "*.bmp", etc. as needed
string outputFilePath = "ocr_results.txt"; // The new results file
// Get all image files in the directory
var imageFiles = Directory.GetFiles(folderPath, filePattern);
Console.WriteLine($"Found {imageFiles.Length} total images to process...");
Console.WriteLine($"Results will be written to: {outputFilePath}");
// --- 2. Start timer and process images, writing to file ---
// Open the output file *before* the loop for efficiency
using (StreamWriter writer = new StreamWriter(outputFilePath))
{
var stopwatch = Stopwatch.StartNew();
foreach (var file in imageFiles)
{
string fileName = Path.GetFileName(file);
using var ocrInput = new OcrInput();
ocrInput.LoadImage(file);
var ocrResult = ocrTesseract.Read(ocrInput);
// Check if any text was actually found
if (!string.IsNullOrEmpty(ocrResult.Text))
{
// Write to Console
Console.WriteLine($"--- Text found in: {fileName} ---");
Console.WriteLine(ocrResult.Text.Trim());
Console.WriteLine("------------------------------------------");
// Write to File
writer.WriteLine($"--- Text found in: {fileName} ---");
writer.WriteLine(ocrResult.Text.Trim());
writer.WriteLine("------------------------------------------");
writer.WriteLine(); // Add a blank line for readability
}
else
{
// Write to Console
Console.WriteLine($"No text found in: {fileName}");
// Write to File
writer.WriteLine($"No text found in: {fileName}");
writer.WriteLine();
}
}
stopwatch.Stop();
// --- 3. Print and write final benchmark summary ---
string lineSeparator = "\n========================================";
string title = "Batch OCR Processing Complete";
string summary = $"Fast configuration took {stopwatch.Elapsed.TotalSeconds:F2} seconds";
// Write summary to Console
Console.WriteLine(lineSeparator);
Console.WriteLine(title);
Console.WriteLine("========================================");
Console.WriteLine(summary);
// Write summary to File
writer.WriteLine(lineSeparator);
writer.WriteLine(title);
writer.WriteLine("========================================");
writer.WriteLine(summary);
if (imageFiles.Length > 0)
{
string avgTime = $"Average time per image: {(stopwatch.Elapsed.TotalSeconds / (double)imageFiles.Length):F3} seconds";
Console.WriteLine(avgTime);
writer.WriteLine(avgTime);
}
}
Console.WriteLine($"\nSuccessfully saved results to {outputFilePath}");
Imports IronOcr
Imports System
Imports System.Diagnostics
Imports System.IO
' --- Tesseract Engine Setup ---
Dim ocrTesseract As New IronTesseract()
ocrTesseract.Language = OcrLanguage.EnglishFast
ocrTesseract.Configuration.ReadBarCodes = False
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
' --- 1. Define folder and get files ---
Dim folderPath As String = "images" ' IMPORTANT: Set this to your image directory
Dim filePattern As String = "*.png" ' Change to "*.jpg", "*.bmp", etc. as needed
Dim outputFilePath As String = "ocr_results.txt" ' The new results file
' Get all image files in the directory
Dim imageFiles = Directory.GetFiles(folderPath, filePattern)
Console.WriteLine($"Found {imageFiles.Length} total images to process...")
Console.WriteLine($"Results will be written to: {outputFilePath}")
' --- 2. Start timer and process images, writing to file ---
' Open the output file *before* the loop for efficiency
Using writer As New StreamWriter(outputFilePath)
Dim stopwatch = Stopwatch.StartNew()
For Each file In imageFiles
Dim fileName As String = Path.GetFileName(file)
Using ocrInput As New OcrInput()
ocrInput.LoadImage(file)
Dim ocrResult = ocrTesseract.Read(ocrInput)
' Check if any text was actually found
If Not String.IsNullOrEmpty(ocrResult.Text) Then
' Write to Console
Console.WriteLine($"--- Text found in: {fileName} ---")
Console.WriteLine(ocrResult.Text.Trim())
Console.WriteLine("------------------------------------------")
' Write to File
writer.WriteLine($"--- Text found in: {fileName} ---")
writer.WriteLine(ocrResult.Text.Trim())
writer.WriteLine("------------------------------------------")
writer.WriteLine() ' Add a blank line for readability
Else
' Write to Console
Console.WriteLine($"No text found in: {fileName}")
' Write to File
writer.WriteLine($"No text found in: {fileName}")
writer.WriteLine()
End If
End Using
Next
stopwatch.Stop()
' --- 3. Print and write final benchmark summary ---
Dim lineSeparator As String = vbLf & "========================================"
Dim title As String = "Batch OCR Processing Complete"
Dim summary As String = $"Fast configuration took {stopwatch.Elapsed.TotalSeconds:F2} seconds"
' Write summary to Console
Console.WriteLine(lineSeparator)
Console.WriteLine(title)
Console.WriteLine("========================================")
Console.WriteLine(summary)
' Write summary to File
writer.WriteLine(lineSeparator)
writer.WriteLine(title)
writer.WriteLine("========================================")
writer.WriteLine(summary)
If imageFiles.Length > 0 Then
Dim avgTime As String = $"Average time per image: {(stopwatch.Elapsed.TotalSeconds / CDbl(imageFiles.Length)):F3} seconds"
Console.WriteLine(avgTime)
writer.WriteLine(avgTime)
End If
End Using
Console.WriteLine(vbLf & $"Successfully saved results to {outputFilePath}")
Ten kod testowy ilustruje kilka ważnych koncepcji:
-
Przetwarzanie wsadowe: Kod przetwarza wiele obrazów w ramach jednej operacji, podobnie jak w naszym przykładzie wielowątkowego OCR, który pokazuje, jak wykorzystać przetwarzanie równoległe w celu uzyskania jeszcze większego przyspieszenia.
-
Pomiary wydajności: Użycie klasy
Stopwatchzapewnia dokładne pomiary czasu aż do milisekund, co jest niezbędne do porównania różnych konfiguracji. - Rejestrowanie wyników: Zarówno wyjście konsolowe, jak i plikowe zapewniają możliwość późniejszej analizy wyników i weryfikacji różnic w dokładności między konfiguracjami.
Jakiego wzrostu wydajności mogę się spodziewać?
| Tryb | Całkowity czas | Średni czas / Obraz | Oszczędność czasu w porównaniu ze standardem | Zysk dokładności w porównaniu ze standardem |
|---|---|---|---|---|
| Standardowy | 10,40 s | 1,040 s | Wersja wyjściowa | Wersja wyjściowa |
| Szybko | 8,60 s | 0,860 s | +17,31% (szybciej) | +0% (Identyczne) |
Porównanie wydajności między konfiguracją standardową a szybką wykazuje znaczną przewagę wydajnościową konfiguracji szybkiej. Przyjmując tryb standardowy jako punkt odniesienia (łączny czas 10,40 sekundy), konfiguracja szybka przetworzyła tę samą partię 10 obrazów w zaledwie 8,60 sekundy. Oznacza to znaczną oszczędność czasu wynoszącą 17,31%. Co najważniejsze, ta poprawa szybkości nie wpłynęła negatywnie na jakość; dokładność była identyczna w obu trybach, a obie konfiguracje generowały ten sam tekst wyjściowy.
Aby zweryfikować wyniki, można pobrać zarówno szybką wersję tekstową, jak i standardową wersję tekstową.
Kiedy należy używać funkcji szybkiej konfiguracji?
Szybka konfiguracja jest szczególnie korzystna dla:
- Przetwarzanie dokumentów o dużej objętości, gdzie tysiące stron wymagają szybkiego przetworzenia
- Aplikacje działające w czasie rzeczywistym, w których czas odpowiedzi ma kluczowe znaczenie
- Aplikacje internetowe, które muszą zapewniać responsywne doświadczenia użytkownika
- Systemy przetwarzania wsadowego działające zgodnie z napiętym harmonogramem
W przypadku bardziej złożonych scenariuszy obejmujących wiele języków, skany niskiej jakości lub specjalistyczne typy dokumentów, takie jak tablice rejestracyjne lub paszporty, warto skorzystać ze standardowej konfiguracji, aby zapewnić maksymalną dokładność.
IronOCR ułatwia przełączanie się między konfiguracjami — wystarczy zmienić kilka właściwości, a aplikacja dostosuje się do różnych wymagań dotyczących wydajności bez konieczności wprowadzania większych zmian w kodzie.
Często Zadawane Pytania
O ile szybsza jest szybka konfiguracja OCR w porównaniu do standardowych ustawień?
Szybka konfiguracja IronOCR może osiągnąć do 17% szybsze prędkości przetwarzania w porównaniu do standardowych ustawień OCR, z minimalnym wpływem na dokładność. Zysk wydajności osiąga się dzięki trybowi językowemu EnglishFast oraz wyłączeniu niepotrzebnych funkcji.
Jaka jest główna ustawienie umożliwiające szybkie przetwarzanie OCR?
Głównym komponentem dla szybkiej konfiguracji w IronOCR jest ustawienie właściwości Language na OcrLanguage.EnglishFast. To priorytetyzuje prędkość kosztem małego potencjalnego spadku dokładności, co czyni tę opcję idealną do przetwarzania masowego i aplikacji krytycznych czasowo.
Jak mogę jeszcze bardziej zoptymalizować prędkość OCR poza użyciiem trybu EnglishFast?
Możesz uzyskać dodatkowe ulepszenia prędkości wyłączając niepotrzebne funkcje w IronOCR, takie jak ustawienie ReadBarCodes na false, jeśli nie potrzebujesz detekcji kodów kreskowych. Ponadto, pozwól IronOCR automatycznie wykrywać segmentację stron za pomocą TesseractPageSegmentationMode.Auto.
Kiedy powinienem używać szybkiej konfiguracji OCR zamiast standardowych ustawień?
Szybka konfiguracja OCR w IronOCR jest idealna w scenariuszach przetwarzania dużych wolumenów, gdzie czas jest kluczowy i akceptowalny jest drobny koszt w dokładności. Jest szczególnie przydatna w aplikacjach krytycznych misji, które potrzebują szybko przetwarzać skanowane dokumenty, PDF-y lub obrazy.
Czy szybka konfiguracja działa ze wszystkimi typami dokumentów?
Tak, szybka konfiguracja IronOCR działa skutecznie z różnymi typami dokumentów, w tym ze skanowanymi dokumentami, PDF-ami i obrazami. Korzyści z optymalizacji mają zastosowanie niezależnie od formatu wejściowego, który przetwarzasz.
Czy następuje jakikolwiek spadek dokładności przy używaniu szybkiego trybu OCR?
Szybka konfiguracja IronOCR zapewnia znaczące zyski w wydajności skanowania przy minimalnym wpływie na dokładność. Chociaż może wystąpić mały potencjalny koszt w dokładności przy używaniu trybu EnglishFast, kompromis ten jest często opłacalny dla aplikacji, które priorytetyzują szybkość.

