Przejdź do treści stopki
NARZęDZIA OCR

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
$vbLabelText   $csharpLabel

2.2.1 Wynik

Silnik OCR systemu Windows a Tesseract (porównanie funkcji OCR): Rysunek 1 — Wynik działania kodu silnika OCR systemu Windows w konsoli

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
$vbLabelText   $csharpLabel

3.2.1 Wynik

Silnik OCR systemu Windows a Tesseract (porównanie funkcji OCR): Rysunek 2 — Wynik działania kodu Tesseract w konsoli

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.

  1. W programie Visual Studio przejdź do menu Narzędzia i wybierz opcję Menedżer pakietów NuGet.
  2. Pojawi się nowa lista, na której należy wybrać NuGet Package Manager for solutions.

Silnik OCR systemu Windows a Tesseract (porównanie funkcji OCR): Rysunek 3 — Gdzie znaleźć menedżera pakietów NuGet w programie Visual Studio

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

Silnik OCR systemu Windows a Tesseract (porównanie funkcji OCR): Rysunek 4 — Instalacja pakietu IronOCR

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
$vbLabelText   $csharpLabel

4.3.1 Wynik

Silnik OCR systemu Windows a Tesseract (porównanie funkcji OCR): Rysunek 5 – Wynik działania kodu IronOCR w konsoli

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.

Kannaopat Udonpant
Inżynier oprogramowania
Zanim stał się inżynierem oprogramowania, Kannapat ukończył doktorat z zasobów środowiskowych na Uniwersytecie Hokkaido w Japonii. W czasie studiowania, Kannapat również został członkiem Laboratorium Robotyki Pojazdów, które jest częścią Wydziału Inżynierii Bioprodukcji. W 2022 roku wykorzystał swoje umiejętności w ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie