IRONSOFTWAREHOME
PORÓWNAJ Z INNYMI KOMPONENTAMI

OCR w Azure vs. IronOCR: Które rozwiązanie do optycznego rozpoznawania znaków najlepiej pasuje do projektów .NET?

Kannaopat Udonpant
Kannapat Udonpant
Updated: 28 czerwca 2026

Windows.Media.OCR jest dostarczany bezpłatnie z każdą instalacją systemu Windows 10 i Windows 11, co czyni go atrakcyjnym rozwiązaniem, dopóki nie spróbujesz wdrożyć tej samej aplikacji na serwerze Linux, w kontenerzeDockerlub w funkcjiAWS Lambda— w tym momencie API po prostu nie istnieje. Uzależnienie od platformy nie jest w przypadku tej biblioteki sytuacją skrajną; jest to decydujące ograniczenie. Każda decyzja architektoniczna wynikająca z wyboru Windows.Media.OCR wynika z wymogu, aby systemem operacyjnym hosta był komputer stacjonarny z systemem Windows 10 lub Windows 11 albo serwer klasy konsumenckiej. Bez Linuksa, bez macOS, bez Docker, bez Azure Functions na Linuksie, bez AWS Lambda. Dla programistów tworzących wewnętrzne narzędzia dla systemu Windows, którzy nie planują wykraczać poza tę granicę, cena 0 USD jest trudna do podważenia. Dla wszystkich pozostałych osób ukrytym kosztem jest przepisywanie OCR do zupełnie innego systemu, gdy zmieniają się wymagania wdrożeniowe.

Zrozumienie Windows.Media.OCR

Windows.Media.Ocr jest częścią interfejsu API Windows Runtime (WinRT) wprowadzonego w Windows 8.1 i udoskonalonego dla Windows 10 i 11. Udostępnia klasę OcrEngine w przestrzeni nazw Windows.Media.Ocr, która akceptuje SoftwareBitmap — sam w sobie typ WinRT z Windows.Graphics.Imaging — i zwraca OcrResult zawierający rozpoznany tekst i geometrię linii.

API jest oparte na kontrakcie async/await platformy WinRT. Każda operacja przepływa przez wywołania async Task wspierane przez mechanizm WinRT IAsyncOperation: ładowanie StorageFile, otwieranie strumienia, tworzenie BitmapDecoder, uzyskiwanie SoftwareBitmap, a dopiero potem wywoływanie RecognizeAsync. Od .NET 6, korzystanie z interfejsów API WinRT wymaga specyficznego dla Windows Monikera Docelowej Ramy (TFM) takiego jak net8.0-windows10.0.19041.0. Plik projektu bez tego TFM nie może kompilować kodu, który odnosi się do Windows.Media.Ocr, w ogóle — typy te po prostu nie istnieją w grafie zestawień.

Kluczowe cechy architektury:

  • Tylko Windows 10/11 — interfejs API WinRT nie jest dostępny w systemieWindows Serverbez środowiska Desktop Experience we wszystkich konfiguracjach, a w systemachLinuximacOSjest całkowicie nieobecny
  • Asynchroniczny model WinRT — całe rozpoznanie przepływa przez wywołania asynchroniczne wspierane przez IAsyncOperation; nie istnieje synchroniczna sciezka
  • Pakiety językowe z systemu operacyjnegoOcrEngine.TryCreateFromLanguage i TryCreateFromUserProfileLanguages rozwiązują dostępne języki z pakietów językowych Windows zainstalowanych przez użytkownika lub administratora IT na tej konkretnej maszynie; nie ma modelu językowego w zestawie lub przenośnego
  • Wejście tylko obrazowe — API akceptuje bezpośrednio SoftwareBitmap; na żadnej warstwie API nie istnieje ścieżka wejściowa PDF
  • Brak potoku przetwarzania wstępnego — surowa mapa bitowa jest przekazywana do modułu rozpoznającego; Korekcja obrotu, usuwanie szumów, poprawianie kontrastu i skalowanie rozdzielczości to zadania programisty, który korzysta z oddzielnych interfejsów API Windows Imaging.
  • Brak możliwości wyszukiwania w pliku PDF — rozpoznany tekst jest zwracany jako zwykły ciąg znaków z geometrią wiersza; nie jest dostępna opcja eksportu do formatu PDF
  • Wymagana specyficzna dla Windows TFM — pliki projektów muszą celować w net*-windows* TFM, co uniemożliwia kompilację tego samego projektu między platformami

Stos asynchroniczny WinRT

Każda podstawowa operacja OCR w Windows.Media.Ocr wymaga przejścia przez wiele warstw interfejsu API WinRT, zanim rozpocznie się rozpoznawanie:

// Windows.Media.Ocr: 6+ async steps before receiving any text
// Requires net8.0-windows10.0.19041.0 TFM — will not compile cross-platform

public async Task<string> ExtractTextAsync(string imagePath)
{
    // Step 1: WinRT file system access
    var file = await StorageFile.GetFileFromPathAsync(imagePath);

    // Step 2: Open WinRT stream
    using var stream = await file.OpenAsync(FileAccessMode.Read);

    // Step 3: Create bitmap decoder
    var decoder = await BitmapDecoder.CreateAsync(stream);

    // Step 4: Decode to SoftwareBitmap
    var bitmap = await decoder.GetSoftwareBitmapAsync();

    // Step 5: Check language availability — null if not installed on this machine
    var engine = OcrEngine.TryCreateFromLanguage(
        new Windows.Globalization.Language("en-US"));
    if (engine == null)
        throw new Exception("OCR engine not available for this language");

    // Step 6: Recognize
    var result = await engine.RecognizeAsync(bitmap);
    return result.Text;
}

Sprawdzenie null dla engine nie jest opcjonalne. Jeżeli celowy pakiet językowy nie jest zainstalowany na maszynie działającej z kodem, TryCreateFromLanguage zwraca null i rozpoznanie nie jest możliwe. Nie ma wersji awaryjnej; aplikacja musi wyświetlić użytkownikowi komunikat o błędzie lub zakończyć działanie bez komunikatu.

Zrozumienie IronOCR

IronOCR to komercyjna biblioteka OCR dla platformy .NET, oparta na zoptymalizowanym silniku Tesseract 5 z warstwą zarządzanego interfejsu API, która obsługuje przetwarzanie wstępne, odczyt plików PDF, rozpoznawanie wielu języków oraz generowanie danych strukturalnych. Instalacja odbywa się jako pojedynczy pakiet NuGet, bez konieczności oddzielnego wdrażania zewnętrznych plików binarnych, zarządzania folderami tessdata oraz stosowania plików TFM specyficznych dla danej platformy.

Kluczowe cechy:

  • Zaprojektowana jako wielopłatformowa — działa na systemach Windows, Linux, macOS, Docker, Azure App Service (Windows lub Linux),AWS Lambdai GCP Cloud Run bez konieczności wprowadzania zmian w kodzie
  • Automatyczne wstępne przetwarzanie — prostowanie, wyciszanie, zwiększanie kontrastu, binaryzacja i skalowanie rozdzielczości są stosowane automatycznie na słabej jakości wejściu, z możliwością ręcznej kontroli dostępnej poprzez metody filtra OcrInput
  • Natywne wejście PDFIronTesseract.Read akceptuje ścieżki PDF bezpośrednio; bez etapu konwersji, bez biblioteki zewnętrznej
  • Ponad 125 wbudowanych języków — pakiety językowe to pakiety NuGet, które są wdrażane wraz z aplikacją; brak zależności od danych językowych zainstalowanych w systemie operacyjnym
  • Wyjście PDF z możliwością przeszukiwaniaOcrResult.SaveAsSearchablePdf tworzy PDF z warstwą tekstową z każdego zeskanowanego wejścia
  • Ustrukturyzowany model wynikowyOcrResult udostępnia Pages, Paragraphs, Lines, Words, oraz oceny pewności per słowo i ramki ograniczające
  • Bezpieczny dla wątków — instancje IronTesseract wspierają równoległe obciążenia robocze bez dodatkowej synchronizacji
  • Licencjonowanie wieczyste — $999 Lite po $4,799 Unlimited, jednorazowy zakup, przetwarzanie nieograniczonej liczby dokumentów

Porównanie funkcji

FunkcjaWindows.Media.OcrIronOCR
PlatformaTylkoWindows 10/11Windows, Linux, macOS, Docker, chmura
CenaBezpłatne$4,799 wieczysty
Plik wejściowy PDFNieJęzyk ojczysty
Model językowyPakiety zainstalowane w systemie operacyjnymPonad 125 pakietów dostępnych za pośrednictwem NuGet
Przetwarzanie wstępneNoneFiltry automatyczne + jawne
Wynik w formacie PDF z możliwością wyszukiwaniaNieTak
Model APIWinRT async.NET Standard

Szczegółowe porównanie funkcji

FunkcjaWindows.Media.OcrIronOCR
Obsługa platform
Windows 10/11TakTak
Windows ServerOgraniczoneTak
LinuxNieTak
macOSNieTak
DockerNieTak
Azure Functions (Linux)NieTak
AWS LambdaNieTak
Formaty danych wejściowych
JPEG / PNG / BMPTak (poprzez potok WinRT)Tak
PDF (zeskanowany)NieTak
PDF (chroniony hasłem)NieTak
TIFF / wielostronicowyNieTak
Strumień / tablica bajtówNie (tylko WinRT StorageFile)Tak
URLNieTak
Obsługa języków
Język źródłowyPakiety językowe zainstalowane w systemie operacyjnymPonad 125 pakietów NuGet w zestawie
Instalacja bez uprawnień administratora systemuNieTak (NuGet)
Wielojęzyczne tłumaczenie symultaniczneNieTak
Przenośność językowa między komputeramiNieTak
Przetwarzanie wstępne
WyrównanieNieTak (input.Deskew())
DenoizeNieTak (input.DeNoise())
Wzmocnienie kontrastuNieTak (input.Contrast())
BinaryzacjaNieTak (input.Binarize())
Skalowanie rozdzielczościNieTak (input.EnhanceResolution(300))
Wynik
Zwykły tekstTakTak
PDF z funkcją wyszukiwaniaNieTak
hOCR / HTMLNieTak
Ramki ograniczające na poziomie WORDCzęściowe (geometria linii)Tak
Wyniki pewności dla poszczególnych słówNieTak
Projektowanie API
Ograniczenie TFMwymagane net*-windows*None
Ścieżka synchronicznaNieTak
Odczytywanie BarCode podczas OCRNieTak
OCR oparte na regionieNieTak

Związanie z platformą a wdrażanie wielopłatformowe

Najważniejszą różnicą między tymi dwiema bibliotekami nie jest dokładność, przetwarzanie wstępne ani obsługa plików PDF — jest nią topologia wdrożenia. Windows.Media.OCR nie istnieje poza systemem Windows 10/11. Nie jest to problem konfiguracyjny ani brakujący pakiet NuGet; Środowisko uruchomieniowe WinRT, które obsługuje API, nie występuje w żadnym innym systemie operacyjnym.

Podejście Windows.Media.OCR

Zależność od WinRT pojawia się w pliku projektu, zanim zostanie uruchomiona choćby jedna linijka kodu. TargetFramework musi określać wersję platformy Windows:

<!-- Project file: MUST use Windows TFM — cross-platform TFMs will not compile -->
<PropertyGroup>
  <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
</PropertyGroup>
XML

Z tym plikiem TFM projekt nie może być używany z kontenera Linux. ObrazDockeroparty na mcr.microsoft.com/dotnet/aspnet:8.0 — standardowym obrazie bazowymLinuxdla wdrożeń ASP.NET — nie ma runtime WinRT. Próba odniesienia do typów Windows.Media.Ocr w projekcie docelowym net8.0 (bez przyrostka Windows) powoduje błędy kompilacji, a nie błędy czasu wykonania. Ograniczenie to jest egzekwowane w czasie kompilacji.

Gdy pojawiają się wymagania dotyczące OCR w architekturze mikrousług, gdzie moduł OCR działa na systemie Linux, lub w potoku CI/CD, który generuje wielopłatformowe obrazy Docker, Windows.Media.Ocr nie wchodzi w grę — jest eliminowany jeszcze przed pierwszym spike'iem.

Podejście IronOCR

IronOCR obsługuje net6.0, net7.0, net8.0, i net9.0 bez specyficznych dla platform TFM. Ten sam pakiet NuGet i ten sam plik binarny aplikacji działają w systemach Windows,Linuxi macOS. Wdrożenie IronOCR do Docker wymaga jednej linii apt-get dla libgdiplus na bazowym obrazie Linux, nic więcej:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
#Linuxdependency for System.Drawing
RUN apt-get update && apt-get install -y libgdiplus

COPY --from=build /app/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]
Text

Sam kod aplikacji pozostaje niezmieniony w wersjach dla systemów Windows i Linux:

// Same code — Windows, Linux, macOS, Docker, AWS Lambda
// Nie platform TFM, no WinRT, no conditional compilation
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
C#

IronOCR działa na AWS Lambda, Azure Functions w systemie Linux oraz bezpośrednio na serwerach Linux bez konieczności modyfikacji kodu. Cel wdrożenia jest kwestią konfiguracji, a nie ograniczeniem architektonicznym.

Obsługa języków: zależność od systemu operacyjnego a pakiety dołączone do oprogramowania

Windows.Media.OCR całkowicie przekazuje dostępność języków komputerowi hosta. Zestaw języków, które aplikacja może rozpoznać, zależy od tego, jakie pakiety językowe użytkownik — lub administrator IT — zainstalował w tej konkretnej instalacji systemu Windows. Powoduje to powstanie klasy błędu produkcyjnego, która nie ma nic wspólnego z Twoim kodem.

Podejście Windows.Media.OCR

OcrEngine.TryCreateFromLanguage zwraca null, gdy żądany język nie jest zainstalowany. TryCreateFromUserProfileLanguages zwraca null, gdy nie istnieje żaden pakiet językowy zdolny do OCR. Obie ścieżki wymagają obsługi wartości null i żadna z nich nie zapewnia płynnego powrotu do normalnego działania — nie ma możliwości zainstalowania języka z kodu ani dołączenia go do aplikacji:

// Windows.Media.Ocr: language availability is a runtime unknown
// Returns null if the language pack is not installed on this machine

var engine = OcrEngine.TryCreateFromLanguage(
    new Windows.Globalization.Language("fr-FR"));

if (engine == null)
{
    // French OCR is simply unavailable — no recovery path
    // User must go to Windows Settings > Language to install French
    throw new InvalidOperationException(
        "French OCR unavailable. Install the French language pack in Windows Settings.");
}

var result = await engine.RecognizeAsync(bitmap);

Wdrożenie wielojęzycznej aplikacji do przetwarzania dokumentów z wykorzystaniem Windows.Media.OCR wymaga koordynacji instalacji pakietów językowych Windows na wszystkich komputerach w środowisku docelowym. Na serwerze współdzielonym lub komputerze użytkownika zarządzanym przez zasady grupy nie leży to w gestii programisty.

Podejście IronOCR

IronOCR dostarcza modele językowe jako dedykowane pakiety NuGet, które są wdrażane wraz z plikiem binarnym aplikacji. Dane językowe są przenoszone wraz z artefaktem kompilacji, a nie wraz z konfiguracją systemu operacyjnego. Wsparcie dla 125+ języków jest operacją dotnet add package:

dotnet add package IronOcr.Languages.French, IronOcr.Languages.German, IronOcr.Languages.Arabic, IronOcr.Languages.ChineseSimplified

// IronOCR: language availability is a deploy-time guarantee, not a runtime unknown
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);

// Works on any machine, any OS, zero OS configuration required
var result = ocr.Read("multilingual-document.jpg");
Console.WriteLine(result.Text);

Pełny katalog języków obejmuje łacinę, CJK, arabski, hebrajski, dewanagari, cyrylicę oraz zestawy specjalistyczne, w tym notację matematyczną. Każdy pakiet językowy jest powiązany z wersją pakietu IronOCR, dzięki czemu model językowy w środowisku produkcyjnym odpowiada modelowi testowanemu lokalnie.

Brak przetwarzania wstępnego

Skanów niskiej jakości — lekko obróconych stron, fotokopii tekstu z plamkami, wyblakłego atramentu na papierze w kolorze złamanej bieli — powodują niską dokładność OCR w każdym silniku, który otrzymuje je w niezmienionej postaci. Przetwarzanie wstępne koryguje te błędy przed uruchomieniem rozpoznawania. Windows.Media.OCR nie zapewnia żadnej warstwy przetwarzania wstępnego.

Podejście Windows.Media.OCR

API akceptuje SoftwareBitmap i zwraca tekst. Nie można konfigurować jakości obrazu między tymi dwoma punktami. Deweloperzy, którzy potrzebują poprawić dokładność na suboptymalnym wejściu, muszą samodzielnie zaimplementować przetwarzanie wstępne używając API Windows Imaging Component przed skonstruowaniem SoftwareBitmap. Jest to oddzielna baza kodu, która wymaga własnej konserwacji i pozostaje specyficzna dla systemu Windows z tego samego powodu, co samo API OCR:

// Windows.Media.Ocr: no preprocessing — what you pass is what gets recognized
// Skewed, noisy, or low-resolution images degrade accuracy with no remedy
// Manual preprocessing via separate Windows Imaging APIs is the only option

var bitmap = await decoder.GetSoftwareBitmapAsync();
// bitmap goes directly to recognition with no quality improvement
var result = await engine.RecognizeAsync(bitmap);

W przypadku standardowych, wyraźnych skanów dokumentów (kontrolowane środowisko skanowania, stałe oświetlenie, co najmniej 300 DPI, prawidłowa orientacja) ograniczenie to jest do pokonania. W przypadku potoków przetwarzania dokumentów, które odbierają obrazy z aparatów w telefonach komórkowych, skanerów płaskich z automatycznym podawaniem i przesunięciem, dokumentów faksowanych lub materiałów fotokopiowanych, oznacza to albo zbudowanie warstwy przetwarzania wstępnego od podstaw, albo pogodzenie się z obniżeniem dokładności.

Podejście IronOCR

Klasa OcrInputIronOCR zapewnia pipeline przetwarzania wstępnego z indywidualnymi metodami filtra, które stosują się w kolejności. Filtry korekcji jakości obrazu eliminują najczęstsze czynniki obniżające dokładność podczas przetwarzania dokumentów produkcyjnych:

// IronOCR: explicit preprocessing pipeline
// Each filter targets a specific quality defect
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");

input.Deskew();              // Correct page rotation up to ~40 degrees
input.DeNoise();             // Remove scanner speckle and compression artifacts
input.Contrast();            // Boost contrast on faded or washed-out text
input.Binarize();            // Convert to black/white with optimal threshold
input.EnhanceResolution(300); // Scale image to 300 DPI for recognition

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");

W przypadku powszechnego przypadku,IronOCR stosuje automatyczne przetwarzanie wstępne, gdy wywołuje Read bezpośrednio na ścieżce pliku — silnik wykrywa problemy z jakością i koryguje je bez konieczności ręcznej konfiguracji filtra. Samouczek filtrów obrazu obejmuje pełen zestaw filtrów w tym Sharpen, Dilate, Erode, Invert, i ToGrayScale dla specjalnych scenariuszy. Filtry korekcji kolorów i korekcji orientacji rozszerzają możliwości przetwarzania dokumentów o niestandardowych profilach kolorów lub obróconych o wiele kątów.

Brak obsługi formatu PDF

PDF jest dominującym formatem dokumentów w środowiskach Enterprise. Umowy, faktury, zeskanowane archiwa i formularze urzędowe są dostarczane w formacie PDF. Windows.Media.OCR nie obsługuje plików PDF — akceptuje wyłącznie dane obrazówe. OCR dokumentu PDF wymaga oddzielnej biblioteki do renderowania plików PDF, rasteryzacji strona po stronie oraz ręcznego zestawiania wyników.

Podejście Windows.Media.OCR

W API nie ma ścieżki do pliku PDF. Aby przeprowadzić OCR zeskanowanego PDF za pomocą Windows.Media.Ocr, programista musi: wyrenderować każdą stronę do SoftwareBitmap używając oddzielnej biblioteki renderowania PDF (żadna z nich nie jest wbudowana w Windows), iterować przez strony, wywoływać RecognizeAsync dla każdej strony i ręcznie sklejać wyniki. Sama biblioteka renderująca wiąże się z dodatkowymi kwestiami dotyczącymi licencji i wdrażania. Kod Windows.Media.OCR stanowi niewielką część całej implementacji:

// Windows.Media.Ocr: no PDF support
// Requires external PDF renderer to rasterize pages before OCR
// Conceptual pattern — a PDF rendering library is not provided by Windows APIs

// Step 1: Use external PDF library to render page to bitmap (not shown)
// Step 2: Pass rendered bitmap to Windows OCR
// var bitmap = RenderPdfPageToBitmap(pdfPath, pageIndex); // external library required

var engine = OcrEngine.TryCreateFromUserProfileLanguages();
if (engine == null)
    throw new Exception("No OCR language available");

// Step 3: Recognize the rasterized page
// var result = await engine.RecognizeAsync(bitmap);
// Step 4: Collect and concatenate results across all pages manually

Sam etap zewnętrznego renderowania plików PDF powoduje powstanie zależności, wymaga osobnej nauki obsługi i stanowi dodatkowe źródło błędów w rozwiązaniu, które początkowo miało być "bezpłatne i wbudowane".

Podejście IronOCR

IronOCR odczytuje pliki PDF w sposób natywny. Bez zewnętrznego renderera, bez etapu rasteryzacji, bez ręcznego składania stron. Ta sama metoda IronTesseract.Read, która akceptuje ścieżki obrazu, akceptuje także ścieżki PDF. OCR plików PDF w .NET to jedna linijka:

// IronOCR: native PDF support — no external renderer needed
var text = new IronTesseract().Read("scanned-document.pdf").Text;

// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// PDF z funkcją wyszukiwania output: make a scanned PDF text-searchable
var ocrResult = new IronTesseract().Read("scanned-archive.pdf");
ocrResult.SaveAsSearchablePdf("searchable-output.pdf");
C#

Funkcja przeszukiwalnego pliku PDF osadza warstwę tekstową na oryginalnym zeskanowanym obrazie, tworząc plik PDF, który zachowuje wierność wizualną, a jednocześnie umożliwia wyszukiwanie pełnotekstowe oraz kopiowanie i wklejanie. Jest to powszechny wymóg w przypadku systemów zarządzania dokumentami i archiwów zgodności. Windows.Media.OCR nie może wygenerować tego wyniku na żadnym poziomie swojego API.

Przewodnik po mapowaniu API

Windows.Media.OcrOdpowiednik IronOCR
OcrEngine.TryCreateFromLanguage(lang)new IronTesseract() z ocr.Language = OcrLanguage.X
OcrEngine.TryCreateFromUserProfileLanguages()new IronTesseract() (domyślny język rozwiązywany automatycznie)
engine.RecognizeAsync(softwareBitmap)ocr.Read("image.jpg") lub ocr.Read(ocrInput)
OcrResult.TextOcrResult.Text
OcrResult.LinesOcrResult.Lines (z rozszerzonymi metadanymi)
OcrLine.TextOcrResult.Lines[i].Text
OcrLine.WordsOcrResult.Words (z ramkami ograniczającymi + pewnością)
OcrWord.BoundingRectOcrResult.Words[i].X, .Y, .Width, .Height
BitmapDecoder.CreateAsync(stream)input.LoadImage(stream) przez OcrInput
StorageFile.GetFileFromPathAsync(path)ocr.Read("path") bezpośrednio
Brak odpowiednika (plik PDF nie jest obsługiwany)ocr.Read("document.pdf")
Brak odpowiednika (plik PDF nie jest obsługiwany)input.LoadPdf("file.pdf", Password: "x")
Brak odpowiednika (brak pliku PDF do przeszukiwania)result.SaveAsSearchablePdf("output.pdf")
Brak odpowiednika (brak przetwarzania wstępnego)input.Deskew(), input.DeNoise(), input.Contrast()
Brak odpowiednika (brak wersji wielojęzycznej)ocr.AddSecondaryLanguage(OcrLanguage.X)
Brak odpowiednika (brak pewności)result.Confidence, word.Confidence

Kiedy zespoły rozważają przejście z Windows.Media.OCR na IronOCR

Aplikacja wykracza poza środowisko Windows Desktop

Najczęstszym czynnikiem wywołującym jest zmiana wymagań, która wprowadza cel wdrożenia inny niż Windows. Narzędzie desktopowe, które początkowo funkcjonowało jako wewnętrzne narzędzie systemu Windows, zostaje przekształcone w usługę internetową, mikrousługę opartą na Dockerze lub funkcję w chmurze. W momencie, gdy to nastąpi, Windows.Media.OCR staje się przeszkodą. Komponent OCR wymaga całkowitego przepisania, ponieważ API nie istnieje na platformie docelowej — nie ma portu, nie ma shimu kompatybilności ani flagi kompilacji warunkowej, która rozwiązałaby ten problem. Zespoły, które zaplanowały wszystko z wyprzedzeniem dzięki IronOCR, nie muszą zajmować się tym przepisywaniem.

Wymagania językowe przekraczają zainstalowane pakiety

Procesy przetwarzania dokumentów często rozszerzają zakres działania. System stworzony do przetwarzania faktur w języku angielskim musi teraz obsługiwać dokumenty w języku francuskim, niemiećkim, arabskim lub japońskim. W przypadku Windows.Media.OCR obsługa tych języków wymaga koordynacji instalacji pakietów językowych systemu operacyjnego we wszystkich miejscach wdrożenia — na komputerach programistów, maszynach wirtualnych do testów, serwerach produkcyjnych oraz wszelkich kontenerach w środowisku. W środowiskach zarządzanych przez zasady grupy lub w maszynach wirtualnych w chmurze o minimalnym obciążeniu systemu operacyjnego taka koordynacja jest niepraktyczna. Pakiety językowe IronOCR oparte na NuGet są wdrażane wraz z aplikacją i nie wymagają koordynacji z systemem operacyjnym.

Przetwarzanie plików PDF dodano do zakresu

Gdy pierwotnym wymaganiem było "OCR obrazów ze skanera płaskiego", sprawdza się Windows.Media.Ocr. Gdy wymagania rozszerzają się o "przetwarzanie zaległości zeskanowanych plików PDF w naszym archiwum", do stosu dołącza druga biblioteka. Ta biblioteka stanowi dodatkową zależność, dodatkowy aspekt licencyjny oraz dodatkowy obszar potencjalnych awarii. Zespoły, które potrzebują zarówno OCR obrazów, jak i OCR plików PDF w ramach ujednoliconego API, przekonują się, że IronOCR od samego początku eliminuje konieczność stosowania architektury opartej na dwóch bibliotekach.

Spadek dokładności przy danych wejściowych z rzeczywistych źródeł

Kontrolowane środowiska skanowania zapewniają czyste obrazy. Dane wejściowe pochodzące ze świata rzeczywistego — zdjęcia wykonane telefonami komórkowymi, lekko przekrzywione skany z płaskiego skanera, starsze dokumenty otrzymane faksem, materiały fotokopiowane — powodują pogorszenie dokładności, którego nie da się naprawić w ramach Windows.Media.OCR. Kiedy zaczynają napływać skargi klientów dotyczące brakującego tekstu, zespoły odkrywają, że pominięty etap przetwarzania wstępnego stał się konieczny. Modernizacja przetwarzania wstępnego przy użyciu interfejsów API Windows Imaging wymaga znacznego nakładu pracy programistycznej i sprawia, że rozwiązanie jest dostępne wyłącznie w systemie Windows. Potok przetwarzania wstępnego IronOCR już istnieje.

Pojawia się pytanie o wdrożenie serwera

Dokumentacja Windows.Media.OCR wyraźnie pozycjonuje API jako przeznaczone dla aplikacji klienckich. Uruchomienie go w kontekście serwera — aplikacji ASP.NET przetwarzającej dokumenty przesłane przez użytkowników, usługi Windows korzystającej z kolejki dokumentów — wymaga środowiskaWindows Serverz zainstalowanym Desktop Experience, które jest cięższym i droższym profilem maszyny wirtualnej niż kontener Linux. Gdy zespół ds. infrastruktury zapyta, czy moduł OCR może działać na instancji systemuLinuxw celu obniżenia kosztów hostingu, odpowiedź w przypadku Windows.Media.OCR brzmi: nie.

Typowe kwestie związane z migracją

Plik projektu Zmiana TFM

Windows.Media.Ocr wymaga specyficznego dla Windows TFM w pliku projektu (net8.0-windows10.0.19041.0 lub podobny). Usunięcie tej zależności w celu obsługi platform wielopłatformowych oznacza usunięcie przyrostka TFM.IronOCR obsługuje net6.0, net8.0, i net9.0 bez specyficznych dla Windows przyrostków. Podczas migracji należy upewnić się, że żadne inne zależności API WinRT w projekcie nie wymagają biblioteki Windows TFM — inne funkcje platformy Windows (integracja z powłoką, powiadomienia systemu Windows itp.) mogą wymagać abstrakcji za pomocą sprawdzania platformy.

Migracja z trybu asynchronicznego do synchronicznego

Windows.Media.Ocr jest w pełni asynchroniczny — RecognizeAsync zwraca IAsyncOperation<OcrResult>, który mapuje do Task<OcrResult> przez interoperacyjność WinRT.IronOCR zapewnia zarówno synchroniczne, jak i asynchroniczne ścieżki. Synchroniczne ocr.Read("file.jpg") bezpośrednio zastępuje wieloetapowy łańcuch await. W przypadku aplikacji serwerowych, w których wywołanie OCR znajduje się w usłudze działającej w tle lub w potoku opartym na zadaniach, dostępna jest również ścieżka asynchroniczna. Tak czy inaczej, przejście od ponad 6 asynchronicznych kroków do jednego wywołania jest proste:

// Before: Windows.Media.Ocr — 6+ await operations
var file = await StorageFile.GetFileFromPathAsync(imagePath);
using var stream = await file.OpenAsync(FileAccessMode.Read);
var decoder = await BitmapDecoder.CreateAsync(stream);
var bitmap = await decoder.GetSoftwareBitmapAsync();
var engine = OcrEngine.TryCreateFromUserProfileLanguages();
var winResult = await engine.RecognizeAsync(bitmap);
string text = winResult.Text;

// After:IronOCR— 1 call, same result, any platform
string text = new IronTesseract().Read(imagePath).Text;
C#

Zastąpienie pakietu językowego

Dla każdego języka wcześniej rozwiązawanego przez OcrEngine.TryCreateFromLanguage(new Windows.Globalization.Language("fr-FR")), zainstaluj odpowiadający pakiet językowy IronOCR i ustaw ocr.Language = OcrLanguage.French. Katalog języków IronOCR zawiera listę wszystkich ponad 125 dostępnych pakietów. Kody językowe mapują się bezpośrednio z tagów BCP-47 do enumeracji OcrLanguage.

Usunięcie obsługi silnika Null

Windows.Media.OCR wymaga sprawdzania wartości null przy każdym wywołaniu tworzenia silnika.IronOCR zgłasza ustrukturyzowane wyjątki zamiast zwracać wartość null w przypadku niepowodzeń konfiguracji lub inicjalizacji. Należy usunąć klauzule zabezpieczające przed wartością null i w razie potrzeby zastąpić je standardową obsługą wyjątków. W rezultacie otrzymujemy bardziej przejrzystą stronę wywołania, pozbawioną błędu typu "język niedostępny w tle".

Dodatkowe możliwości IronOCR

Oprócz funkcji, które bezpośrednio zastępują funkcjonalność Windows.Media.OCR,IronOCR oferuje możliwości, dla których Windows.Media.OCR nie ma odpowiednika:

  • Przetwarzanie zeskanowanych dokumentów — specjalnie zaprojektowana obsługa wielostronicowych archiwów skanów, w tym plików TIFF i wielostronicowych plików PDF
  • Wyodrębnianie tabel — strukturalne wykrywanie danych tabelarycznych w dokumentach, takich jak pozycje faktur, siatki raportów i matryce formularzy
  • Specjalistyczne typy dokumentów — strefy MRZ paszportów, linie czeków MICR, tablice rejestracyjne i tekst pisany odręcznie mają swoje dedykowane ścieżki przetwarzania
  • Śledzenie postępów — operacje wsadowe informują o postępach za pomocą zdarzeń, umożliwiając wyświetlanie pasków postępu i monitorowanie szybkości przetwarzania w interfejsach użytkownika aplikacji

Zgodność z platformą .NET i gotowość na przyszłość

IronOCR obsługuje .NET 6, .NET 7, .NET 8 i .NET 9 na standardowych plikach TFM bez rozszerzeń specyficznych dla platformy, a także .NET Framework 4.6.2 do 4.8 w celu obsługi starszych aplikacji. Biblioteka jest regularnie aktualizowana zgodnie z harmonogramem wydawania platformy .NET, a wsparcie dla .NET 10 jest planowane na rok 2026. Windows.Media.OCR jest dostępny w każdej wersji .NET obsługującej współdziałanie z WinRT, począwszy od .NET 5, ale wymóg dotyczący Windows TFM trwałe ogranicza jego zastosowanie do projektów przeznaczonych dla systemu Windows. W miarę dojrzewania wielopłatformowej historii .NET — gdzie coraz więcej zespołów traktuje konteneryLinuxi funkcje chmurowe jako pierwszorzędne cele wdrożeniowe — ograniczenie TFM w Windows.Media.OCR staje się bardziej wyraźną odpowiedzialnością architektoniczną niż drobnym zastrzeżeniem.

Wnioski

Windows.Media.OCR zajmuje konkretną i uzasadnioną niszę: jest to aplikacja desktopowa dla systemuWindows 10/11bez ambicji wielopłatformowości, przeznaczona do podstawowych zadań OCR obrazów i charakteryzująca się ścisłym ograniczeniem budżetowym wynoszącym 0 USD. W tej niszy sprawdza się dobrze. Poza tą niszą — gdy wdrożenie ma na celu kontener Linux, funkcję chmury, serwer z wymaganiami dotyczącymi wielu języków lub potok dokumentów przetwarzający pliki PDF — API nie istnieje na platformie docelowej i kod musi zostać zastąpiony.

Głębszym problemem jest to, że ograniczenia Windows.Media.OCR mają charakter architektoniczny, a nie przypadkowy. Związanie z platformą nie jest flagą konfiguracyjną, którą można wyłączyć; jest wbudowany w środowisko uruchomieniowe WinRT, od którego zależy API. Dostępność języków nie jest pakietem do dołączenia w czasie kompilacji; jest to zadanie powierzone administratorom systemu operacyjnego. Obsługa plików PDF nie jest funkcją, której brakuje w pakiecie NuGet; jest całkowicie nieobecny w interfejsie API. Każde ograniczenie wymaga oddzielnego systemu, który je kompensuje, a każdy system kompensacyjny ponownie wprowadza zależności od platformy.

IronOCR spełnia wszystkie cztery wymagania — dotyczące platformy, języka, przetwarzania wstępnego i plików PDF — w jednym pakiecie. Cena wejściowa $999 nie wynosi 0 USD, a w przypadku narzędzia dla desktop z kontrolowanym wejściem i dokumentami tylko w języku angielskim, Windows.Media.Ocr pozostaje rozsądnym wyborem. Dla każdego projektu z szerszymi wymaganiami, koszt budowy wokół ograniczeń Windows.Media.Ocr może przewyższyć koszt licencji IronOCR w godzinach roboczych dewelopera, zanim projekt osiągnie swoje pierwsze wdrożenie produkcyjne.

Test praktyczny jest prosty: jeśli celem wdrożenia może być Linux,Dockerlub funkcja w chmurze, a dokumenty wejściowe mogą być plikami PDF lub pochodzić w językach innych niż domyślny pakiet systemu operacyjnego, Windows.Media.OCR nie jest właściwą podstawą. Odkrycie tego w trakcie projektu jest znacznie droższe niż wybór odpowiedniego narzędzia na samym początku. Najskuteczniejszym sposobem podjęcia decyzji jest ocena zestawu funkcji IronOCR pod kątem konkretnych wymagań przed podjęciem decyzji o wyborze jednego z kierunków.

Zwróć uwagę: Tesseract i Windows Media OCR sa zarejestrowanymi znakami towarowymi ich odpowiednich wlascicieli. Ta strona nie jest powiązana, zatwierdzona ani sponsorowana przez Google ani Microsoft. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta