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();
}
}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 ClassImports 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 Class2.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 skomplikowane 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 ClassImports 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 Class3.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 ClassImports 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 Class4.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.