Silnik OCR systemu Windows a Tesseract: szczegółowe porównanie
W dzisiejszej erze cyfrowej technologia optycznego rozpoznawania znaków (OCR) stała się integralną częścią różnych branż, umożliwiając konwersję obrazów i zeskanowanych dokumentów na tekst, który można edytować i przeszukiwać.
Wśród wielu dostępnych programów do OCR, takich jak Google Cloud Vision (Cloud Vision API), Adobe Acrobat Pro DC, ABBYY Finereader, Windows OCR Engine, Tesseract i IronOCR, wyróżniają się jako czołowi konkurenci, z których każdy oferuje unikalne funkcje i możliwości wspomagające analizę dokumentów.
Celem tego artykułu jest przedstawienie kompleksowej analizy porównawczej tych trzech silników OCR, oceniającej ich dokładność, wydajność i łatwość integracji.
1. Wprowadzenie do silników OCR
Silniki OCR to narzędzia programowe zaprojektowane do rozpoznawania i wyodrębniania zwykłego tekstu z obrazów, plików PDF i innych zeskanowanych dokumentów. Wykorzystują one zaawansowane algorytmy i techniki uczenia maszynowego, aby dokładnie identyfikować znaki i konwertować je na plik tekstowy nadający się do odczytu maszynowego. Windows OCR Engine, Tesseract i IronOCR to trzy powszechnie stosowane rozwiązania OCR, z których każde ma swoje mocne strony i zastosowania.
2. Silnik OCR dla systemu Windows
Silnik OCR systemu Windows, zintegrowany z systemem operacyjnym Windows, oferuje wygodne i przyjazne dla użytkownika rozwiązanie do wyodrębniania tekstu z obrazów wejściowych i zeskanowanych dokumentów. Wykorzystując zaawansowane techniki przetwarzania obrazu, potrafi dokładnie rozpoznawać tekst w różnych językach i stylach czcionek. Silnik OCR systemu Windows jest dostępny za pośrednictwem interfejsu API Windows Runtime, co umożliwia płynną integrację z aplikacjami systemu Windows z wykorzystaniem możliwości narzędzia wiersza poleceń.
2.1 Kluczowe funkcje silnika OCR systemu Windows
- Obsługa języków: Silnik OCR systemu Windows obsługuje wiele języków, dzięki czemu nadaje się do dokumentów wielojęzycznych.
- Przetwarzanie obrazu: Wykorzystuje zaawansowane algorytmy przetwarzania obrazu w celu zwiększenia dokładności rozpoznawania tekstu drukowanego, nawet w przypadku obrazów o niskiej jakości.
- Integracja z aplikacjami Windows: Silnik OCR dla Windows płynnie integruje się z aplikacjami Windows, umożliwiając programistom pełne włączenie funkcji OCR do ich oprogramowania.
2.2 Przykład kodu
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;
class Program
{
static async Task Main(string[] args)
{
// Provide the path to the image file
string imagePath = "sample.png";
try
{
// Call the ExtractText method to extract text from the image
string extractedText = await ExtractText(imagePath);
// Display the extracted text
Console.WriteLine("Extracted Text:");
Console.WriteLine(extractedText);
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}
}
public static async Task<string> ExtractText(string image)
{
// Initialize StringBuilder to store extracted text
StringBuilder text = new StringBuilder();
try
{
// Open the image file stream
using (var fileStream = File.OpenRead(image))
{
// Create a BitmapDecoder from the image file stream
var bmpDecoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
// Get the software bitmap from the decoder
var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
// Create an OCR engine from user profile languages
var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
// Recognize text from the software bitmap
var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
// Append each line of recognized text to the StringBuilder
foreach (var line in ocrResult.Lines)
{
text.AppendLine(line.Text);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error during OCR process: " + ex.Message);
}
// Return the extracted text
return text.ToString();
}
}
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;
class Program
{
static async Task Main(string[] args)
{
// Provide the path to the image file
string imagePath = "sample.png";
try
{
// Call the ExtractText method to extract text from the image
string extractedText = await ExtractText(imagePath);
// Display the extracted text
Console.WriteLine("Extracted Text:");
Console.WriteLine(extractedText);
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}
}
public static async Task<string> ExtractText(string image)
{
// Initialize StringBuilder to store extracted text
StringBuilder text = new StringBuilder();
try
{
// Open the image file stream
using (var fileStream = File.OpenRead(image))
{
// Create a BitmapDecoder from the image file stream
var bmpDecoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
// Get the software bitmap from the decoder
var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
// Create an OCR engine from user profile languages
var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
// Recognize text from the software bitmap
var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
// Append each line of recognized text to the StringBuilder
foreach (var line in ocrResult.Lines)
{
text.AppendLine(line.Text);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error during OCR process: " + ex.Message);
}
// Return the extracted text
return text.ToString();
}
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Imports Windows.Graphics.Imaging
Imports Windows.Media.Ocr
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
' Provide the path to the image file
Dim imagePath As String = "sample.png"
Try
' Call the ExtractText method to extract text from the image
Dim extractedText As String = Await ExtractText(imagePath)
' Display the extracted text
Console.WriteLine("Extracted Text:")
Console.WriteLine(extractedText)
Catch ex As Exception
Console.WriteLine("An error occurred: " & ex.Message)
End Try
End Function
Public Shared Async Function ExtractText(ByVal image As String) As Task(Of String)
' Initialize StringBuilder to store extracted text
Dim text As New StringBuilder()
Try
' Open the image file stream
Using fileStream = File.OpenRead(image)
' Create a BitmapDecoder from the image file stream
Dim bmpDecoder = Await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream())
' Get the software bitmap from the decoder
Dim softwareBmp = Await bmpDecoder.GetSoftwareBitmapAsync()
' Create an OCR engine from user profile languages
Dim ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages()
' Recognize text from the software bitmap
Dim ocrResult = Await ocrEngine.RecognizeAsync(softwareBmp)
' Append each line of recognized text to the StringBuilder
For Each line In ocrResult.Lines
text.AppendLine(line.Text)
Next line
End Using
Catch ex As Exception
Console.WriteLine("Error during OCR process: " & ex.Message)
End Try
' Return the extracted text
Return text.ToString()
End Function
End Class
2.2.1 Wynik

3. Tesseract
Tesseract, silnik OCR typu open source opracowany przez Google, zyskał szeroką popularność dzięki swojej dokładności i wszechstronności. Obsługuje ponad 100 języków i może przetwarzać różne formaty obrazów, w tym TIFF, JPEG i PNG. Silnik OCR Tesseract wykorzystuje algorytmy głębokiego uczenia się i sieci neuronowe, aby osiągnąć wysoki poziom dokładności rozpoznawania tekstu, dzięki czemu nadaje się do szerokiego zakresu zastosowań.
3.1 Kluczowe funkcje Tesseract
- Obsługa języków: Silnik Tesseract obsługuje ponad 100 języków, w tym skomplikówane skrypty, takie jak arabski i chiński.
- Wstępne przetwarzanie obrazów: Oferuje szerokie możliwości wstępnego przetwarzania obrazów, w tym prostowanie, binarizację i redukcję szumów, w celu poprawy dokładności rozpoznawania tekstu.
- Opcje dostosowywania: Tesseract pozwala użytkownikom precyzyjnie dostosowywać parametry OCR i trenować niestandardowe modele do konkretnych zastosowań, zwiększając dokładność i wydajność.
3.2 Przykład kodu
using Patagames.Ocr;
class TesseractExample
{
static void Main(string[] args)
{
// Create an OCR API instance
using (var api = OcrApi.Create())
{
// Initialize the OCR engine for the English language
api.Init(Patagames.Ocr.Enums.Languages.English);
// Extract text from the image
string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(plainText);
}
}
}
using Patagames.Ocr;
class TesseractExample
{
static void Main(string[] args)
{
// Create an OCR API instance
using (var api = OcrApi.Create())
{
// Initialize the OCR engine for the English language
api.Init(Patagames.Ocr.Enums.Languages.English);
// Extract text from the image
string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(plainText);
}
}
}
Imports Patagames.Ocr
Friend Class TesseractExample
Shared Sub Main(ByVal args() As String)
' Create an OCR API instance
Using api = OcrApi.Create()
' Initialize the OCR engine for the English language
api.Init(Patagames.Ocr.Enums.Languages.English)
' Extract text from the image
Dim plainText As String = api.GetTextFromImage("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
' Display the extracted text
Console.WriteLine(plainText)
End Using
End Sub
End Class
3.2.1 Wynik

4. IronOCR
IronOCR, potężny silnik OCR opracowany przez Iron Software, wyróżnia się wyjątkową dokładnością, łatwością obsługi i wszechstronną obsługą języków. Oferuje lokalną funkcjonalność OCR i obsługuje ponad 125 języków, dzięki czemu nadaje się do zastosowań globalnych. IronOCR wykorzystuje zaawansowane algorytmy uczenia maszynowego i technologię przetwarzania obrazu w chmurze, aby zapewnić precyzyjne wyniki rozpoznawania tekstu, nawet w trudnych warunkach.
4.1 Kluczowe funkcje IronOCR
- Wysoka dokładność: IronOCR zapewnia wiodącą w branży dokładność rozpoznawania tekstu, gwarantując wiarygodne wyniki w przypadku różnych typów dokumentów i języków.
- Wszechstronna obsługa języków: Obsługuje ponad 125 języków i zapewnia kompleksowe pakiety językowe umożliwiające płynne rozpoznawanie tekstu w wielu językach.
- Prosta integracja: IronOCR oferuje prostą integrację z aplikacjami .NET, z intuicyjnymi interfejsami API i obszerną dokumentacją, aby usprawnić proces tworzenia oprogramowania poprzez przetwarzanie wstępne i końcowe oryginalnych obrazów w celu wyodrębnienia tekstu.
4.2 Zainstaluj IronOCR
Zanim przejdziemy do przykładu kodu, zobaczmy, jak zainstalować IronOCR za pomocą menedżera pakietów NuGet.
- W programie Visual Studio przejdź do menu Narzędzia i wybierz opcję Menedżer pakietów NuGet.
- Pojawi się nowa lista, na której należy wybrać NuGet Package Manager for solutions.

- Pojawi się nowe okno, przejdź do zakładki "Przeglądaj" i wpisz "IronOCR" w pasku wyszukiwania.
- Pojawi się lista pakietów. Wybierz najnowszy pakiet IronOCR i kliknij "Zainstaluj".

4.3 Przykład kodu (C#)
using IronOcr;
class IronOCRExample
{
static void Main(string[] args)
{
// Create an IronTesseract instance
var ocr = new IronTesseract();
// Set the language for OCR recognition
ocr.Language = OcrLanguage.English;
// Perform OCR on the specified image
var result = ocr.Read(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(result.Text);
}
}
using IronOcr;
class IronOCRExample
{
static void Main(string[] args)
{
// Create an IronTesseract instance
var ocr = new IronTesseract();
// Set the language for OCR recognition
ocr.Language = OcrLanguage.English;
// Perform OCR on the specified image
var result = ocr.Read(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(result.Text);
}
}
Imports IronOcr
Friend Class IronOCRExample
Shared Sub Main(ByVal args() As String)
' Create an IronTesseract instance
Dim ocr = New IronTesseract()
' Set the language for OCR recognition
ocr.Language = OcrLanguage.English
' Perform OCR on the specified image
Dim result = ocr.Read("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
' Display the extracted text
Console.WriteLine(result.Text)
End Sub
End Class
4.3.1 Wynik

5. Ocena porównawcza
5.1 Dokładność i wydajność
- Silnik OCR systemu Windows i Tesseract oferują przyzwoitą dokładność, ale mogą mieć trudności z złożonymi układami stron.
- IronOCR: Wyróżnia się dokładnością, zapewniając wiarygodne wyniki w przypadku różnych typów dokumentów i języków, w tym obrazów o niskiej jakości.
5.2 Łatwość integracji
- Silnik OCR dla systemu Windows: płynnie integruje się z aplikacjami systemu Windows, ale nie oferuje opcji dostosowywania.
- Tesseract: Wymaga dodatkowej konfiguracji i zależności w celu integracji, ale oferuje szerokie możliwości dostosowania.
- IronOCR: Zapewnia prostą integrację z aplikacjami .NET, oferując intuicyjne interfejsy API i obszerną dokumentację.
5.3 Obsługa języków
- Silnik OCR systemu Windows obsługuje ograniczoną liczbę języków w porównaniu z Tesseract i IronOCR.
- Tesseract: Obsługuje ponad 100 języków.
- IronOCR: Obsługuje ponad 125 języków, dzięki czemu nadaje się do zastosowań globalnych.
6. Podsumowanie
Podsumowując, podczas gdy Windows OCR Engine i Tesseract są popularnymi wyborami do rozpoznawania tekstu, IronOCR wyróżnia się jako najdokładniejszy i najbardziej wszechstronny silnik OCR. Jego wiodąca w branży dokładność, obszerna obsługa języków oraz prosta integracja sprawiają, że jest to wyjątkowe rozwiązanie dla firm i programistów poszukujących niezawodnej funkcjonalności OCR. Wykorzystując IronOCR, organizacje mogą usprawnić procesy przetwarzania dokumentów, zwiększyć dokładność pozyskiwania danych oraz uzyskać cenne informacje ze skanowanych dokumentów i obrazów.
IronOCR oferuje bezpłatną wersję próbną. Aby dowiedzieć się więcej o IronOCR i jego funkcjach, kliknij tutaj.




