Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI

Porównanie pomiędzy IronOCR a Dynamsoft OCR

Optical Character Recognition, czyli OCR, to proces wprowadzania danych polegający na rozpoznawaniu i digitalizacji tekstu, zarówno pisanego, jak i drukowanego. Jest to rodzaj technologii komputerowej, która wykorzystuje analizę obrazu do przekształcania cyfrowych fotografii drukowanego tekstu w litery i cyfry, które mogą być używane przez inne programy, takie jak edytory tekstu. Tekst jest zamieniany na kody znaków, aby mógł być przeszukiwany i zmieniany na komputerze.

Chociaż w przeszłości wszystkie dokumenty były fizyczne, a przyszłość może być społeczeństwem, w którym wszystkie dokumenty są cyfrowe, obecnie dzieje się wiele zmian. Fizyczne i cyfrowe dokumenty współistnieją w tym przejściowym stanie — dlatego technologie takie jak OCR są kluczowe dla dwukierunkowej konwersji.

Odzyskiwanie dokumentów, wprowadzanie danych i dostępność to tylko niektóre z zastosowań dla OCR. Większość zastosowań OCR pochodzi ze skanowanych dokumentów, choć czasami wykorzystywane są również fotografie. OCR to cenny oszczędzający czas, ponieważ często przepisanie materiału jest jedyną inną opcją. Oto kilka przykładów, jak można używać OCR:

  • Zeskanowane dokumenty, w tym faksy, mogą zostać odzyskane do edytowalnych plików tekstowych.
  • Dzięki skanom książek można tworzyć przeszukiwalne i edytowalne e-booki.
  • Korzystając ze zdjęć zrzutów ekranu, można przeszukiwać i zmieniać tekst.
  • Technologia tekst-na-mowę jest używana do czytania książek osobom z problemami wzrokowymi.

Chociaż to tylko kilka zastosowań OCR, pokazują one wszechstronność tej technologii w wielu branżach. Prawie wszyscy pracownicy we wszystkich firmach znacznie polegają na dokumentach na co dzień, dlatego użytkowanie biznesowe jest kluczowym czynnikiem przy rozwijaniu systemów OCR.

W tym artykule będziemy porównywać dwóch najpotężniejszych czytników OCR:

  • IronOCR
  • Dynamsoft OCR

IronOCR i Dynamsoft OCR to dwie biblioteki OCR .NET, które wspierają konwersję zeskanowanych obrazów i przetwarzanie OCR dokumentów PDF. Możesz przekształcać obrazy w przeszukiwalny tekst za pomocą kilku linijek kodu. Możesz także odzyskiwać pojedyncze słowa, litery i akapity.

IronOCR — znakomite funkcje

IronOCR oferuje unikalną możliwość wykrywania, czytania i interpretowania tekstu z obrazów i dokumentów PDF, które nie zostały dokładnie zeskanowane. IronOCR oferuje najprostsze podejście do wyodrębniania tekstu z dokumentów i zdjęć, nawet jeśli nie jest to zawsze najszybsze, ponieważ automatycznie wyostrza i poprawia niskiej jakości skany, redukując pochylenie, zniekształcenia, szumy w tle i problemy z perspektywą, jednocześnie poprawiając rozdzielczość i kontrast.

IronOCR pozwala programistom wysyłać mu zeskanowane obrazy pojedynczych lub wielostronicowych, a on zwróci cały tekst, kody kreskowe i informacje QR. Zestaw klas w bibliotece OCR dodaje możliwość OCR do aplikacji webowych, desktopowych lub konsolowych. Tesseract OCR C#, jak również aplikacje net JPG, PNG, TIFF, PDF, GIF i BMP, to tylko niektóre z formatów, które mogą być używane jako wejście.

Silnik Rozpoznawania Znaków Opticznych (OCR) w IronOCR potrafi czytać tekst przygotowany przy użyciu wielu typowych czcionek, kursyw, wag i podkreśleń. Klasy przycinania umożliwiają szybkie i precyzyjne działanie OCR. Pracując z wielostronicowymi dokumentami, wielowątkowy silnik IronOCR przyspiesza działanie OCR.

Funkcje IronOCR

Do zarządzania Tesseractem używamy IronOCR, ponieważ jest unikalny w następujący sposób:

  • Działa od razu po wyjęciu z pudełka w czystym .NET
  • Nie wymaga zainstalowania Tesseract na Twoim komputerze
  • Obsługuje najnowsze silniki: Tesseract 5 (a także Tesseract 4 i 3)
  • Jest dostępny dla każdego projektu .NET: .NET Framework 4.5 +, .NET Standard 2 + i .NET Core 2, 3 i .NET 5
  • Ma lepszą dokładność i szybkość niż tradycyjny Tesseract
  • Obsługuje Xamarin, Mono, Azure i Docker
  • Zarządza złożonym systemem słownikowym Tesseract za pomocą pakietów NuGet
  • Obsługuje pliki PDF, MultiFrame Tiffs i wszystkie ważne formaty obrazów bez konfiguracji
  • Potrafi poprawić niskiej jakości i przekrzywione skany, aby osiągnąć najlepsze wyniki z Tesseract.

Dynamsoft OCR — funkcje

Biblioteka Dynamsoft.NET OCR to komponent .NET, który zapewnia szybkie i niezawodne rozpoznawanie znaków optycznych. Jest używana do tworzenia aplikacji desktopowych .NET w C# lub VB.NET. Możesz po prostu napisać kod do konwersji bezużytecznego tekstu w PDF lub zdjęciach na tekst cyfrowy do edycji, przeszukiwania, archiwizacji i nie tylko, korzystając z podstawowych API OCR.

Obrazy ze skanerów i innych urządzeń zgodnych z TWAIN mogą być uzyskiwane w następujący sposób:

  • Mechanizmy transferu obrazów rodzimych, buforowanych pamięci i plików na dysk są w pełni obsługiwane.
  • Dzięki automatycznemu podajnikowi dokumentów możliwe jest skanowanie zbiorcze (ADF).
  • Atrybuty TWAIN mogą być używane do modyfikacji funkcji urządzeń.
  • Można zmieniać funkcje jak: IfAutoFeed, IfAutoScan, Rozdzielczość, BitDepth, Jasność, Kontrast, Jednostka, Duplex i inne.
  • Obsługuje wykrywanie pustych stron.
  • Pozwala zmieniać i zapisywać profile skanera.

Przechwytywanie obrazów z kamer internetowych zgodnych z UVC i WIA:

  • Pokazuje transmisję wideo na żywo podczas przechwytywania zdjęć z wybranej kamery internetowej.
  • Dostosuj ustawienia kamery: Jasność, Kontrast, Hue, Nasycenie, Ostrość, Gamma, Balans bieli, Kompensacja podświetlenia, Wzmocnienie, Włączanie kolorów, Powiększenie, Ostrość, Ekspozycja, Przesłona, Panorama, Pochylenie, Ruch.

Solidne ładowanie/przeglądanie obrazów

  • Można ładować obrazy w formatach BMP, JPEG, PNG, TIFF i wielostronicowy TIFF.
  • Obsługiwane jest powiększanie i pomniejszanie zdjęć.
  • Obrazy mogą być pobierane z lokalnego dysku, serwera FTP, serwera HTTP lub bazy danych.
  • Dekodowanie obrazów dla BMP, JPEG, PNG i TIFF przy użyciu jednego z najobszerniejszych zestawów komponentów do obrazów .NET

Zapis i przesyłanie/ściąganie

  • Pozwala czytać i zapisywać zdjęcia poprzez strumień plików.
  • Obsługuje zapisywanie przechwyconych zdjęć jako BMP, JPEG, PNG, TIFF lub wielostronicowy TIFF na lokalnym dysku, serwerze sieciowym lub w bazie danych.
  • Wsparcie dla kompresji RLE, G3/G4, LZW, PackBits i TIFF.
  • Obsługiwane są przesyłania i ściągania przez HTTPS.
  • Jeden z najobszerniejszych zestawów komponentów do obrazów .NET wspiera kodowanie obrazów BMP, JPEG, PNG i TIFF.
  • Pozwala dołączać nowe uzyskane zdjęcia do istniejących plików TIFF.

Odczytuj tekst z zeskanowanych plików PDF lub innych obrazów w ASP.NET (Rozpoznawanie Znaków Optycznych)

Klienci chcą, aby prace były wykonywane szybko w dzisiejszym szybkim tempie życia. Klienci z pilnymi projektami często się z nami kontaktują. Nasza technologia może po prostu rozpoznać zawartość obrazu i przekształcić ją w tekst, jeśli projekt obejmuje skanowanie dokumentów zawierających obrazy. Rozpoznawanie Znaków Optycznych (OCR) oszczędza czas i pieniądze Twojej firmie, zmniejszając jednocześnie błędy wprowadzania danych.

Korzystanie z IronOCR

IronOCR wykorzystuje klasę IronOcr.IronTesseract do wykonywania swoich konwersji OCR.

W tym podstawowym przykładzie używamy klasy IronOcr.IronTesseract, aby odczytać tekst z obrazu i automatycznie zwrócić jego wynik jako ciąg znaków.

// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
' PM> Install-Package IronOcr
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a new instance of the IronTesseract class
		Dim ironOcr = New IronTesseract()

		' Read the text from the image
		Dim result = ironOcr.Read("img\Screenshot.png")

		' Output the text to the console
		Console.WriteLine(result.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

W rezultacie poniższy akapit jest w 100% dokładny:

IronOCR Prosty Przykład

W tym prostym przykładzie przetestujemy dokładność naszej biblioteki OCR w C# do odczytu tekstu z PNG.
Zdjęcie. To jest bardzo podstawowy test, ale sprawy będą bardziej skomplikowane w miarę kontynuacji samouczka.

Szybki brązowy lis skacze nad leniwym psem

Chociaż na powierzchni może to wyglądać na proste, skomplikowane zachowanie dzieje się za kulisami: skanowanie obrazu w celu uzyskania wyrównania, jakości i rozdzielczości, przyglądanie się jego atrybutom, optymalizacja silnika OCR i ostateczne czytanie tekstu, jak mogłaby to uczynić osoba.

OCR jest trudnym zadaniem dla maszyny, a prędkości odczytu mogą być porównywalne z prędkością człowieka. Innymi słowy, OCR nie jest szybkim procesem. W tym przypadku jednak jest całkowicie poprawny.

Wyniki aplikacji OCR w C# dokładność

W większości rzeczywistych scenariuszy deweloperzy będą chcieli, aby ich projekty działały tak szybko, jak to możliwe. W tej sytuacji proponujemy użycie klas OcrInput i IronTesseract z przestrzeni nazw dodatków IronOCR.

Możesz ustawić dokładne cechy zadania OCR z OcrInput, takie jak:

  • JPEG, TIFF, GIF, BMP i PNG to tylko niektóre z formatów obrazów, które mogą być używane
  • Importowanie dokumentów PDF w całości lub w części
  • Poprawa kontrastu, rozdzielczości i wielkości obrazu
  • Korekta rotacji, szumów skanowania, szumów cyfrowych, pochylenia i negatywnego obrazu

IronTesseract

Wybierz spośród setek wstępnie zapakowanych języków i dialektów

  • Używaj silników OCR Tesseract 5, 4 lub 3 od razu
  • Jeśli patrzymy na zrzut ekranu, fragment lub cały dokument, określ typ dokumentu
  • Rozpoznawanie kodów kreskowych
  • Wyniki OCR w formie PDF przeszukiwalnego, Hocr HTML, DOM i ciągów znaków są opcji
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		' Use the OcrInput class to read from an image file
		Using input = New OcrInput("img\Potter.tiff")
			' Perform the OCR operation
			Dim result = ocr.Read(input)

			' Output the recognized text to the console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Możemy to zastosować nawet na skanie średniej jakości z dokładnością 100%.

OCR C# Skanowanie z przykładem TIFF

Jak widać, odczytanie tekstu (a jeśli to pożądane, kodów kreskowych) z zeskanowanego obrazu, takiego jak TIFF, było dość łatwe. Dokładność tego zadania OCR wynosi 100%.

Następnie spróbujemy o wiele niskiej jakości skanu tej samej strony, przy niskim DPI i z wieloma zniekształceniami oraz szumami cyfrowymi, a także uszkodzeniem oryginału.

OCR C# Niski Rozdzielczościowy Skan z Szumem Cyfrowym

To tutaj IronOCR naprawdę świeci w porównaniu z innymi bibliotekami OCR, takimi jak Tesseract, i odkryjemy, że inne projekty OCR unikają omówienia używania OCR na rzeczywistych skanach w świecie, a nie nierealistycznie 'idealnych' przypadków testowych tworzonych cyfrowo w celu osiągnięcia 100% dokładności OCR.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		' Use the OcrInput class to read from a low-quality image file
		Using input = New OcrInput("img\Potter.LowQuality.tiff")
			' Deskew the image to improve accuracy
			input.Deskew()

			' Perform the OCR operation
			Dim result = ocr.Read(input)

			' Output the recognized text to the console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Bez dodawania Input.Deskew() do wyprostowania obrazu uzyskujemy dokładność 52,5%. To nie jest wystarczające.

Dodanie Input.Deskew() zwiększa dokładność do 99,8%, co jest niemal tak dokładne jak OCR skanu wysokiej jakości.

Korzystanie z Dynamsoft OCR

Przedstawimy kilka fragmentów kodu do użycia Dynamic Web TWAIN do skanowania TWAIN i rozpoznawania OCR po stronie klienta w JavaScript.

Skanuj obrazy

Możesz zmienić ustawienia skanowania i uzyskać zdjęcia ze skanerów TWAIN korzystając z prostych API Dynamic Web TWAIN.

function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
JAVASCRIPT

Pobierz moduł OCR Professional

Aby użyć modułu OCR Professional do OCR po stronie klienta, należy dołączyć ocrpro.js w nagłówku i pobrać plik OCR Pro DLL.

<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
HTML

Dokonaj edycji pliku .js:

// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
JAVASCRIPT

Rozpoznawanie tekstu z użyciem OCR

Używanie API rozpoznawania OCR w JS do wydobycia tekstu z zeskanowanych obrazów jest tak proste, jak umieszczenie poniższego kodu.

// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
JAVASCRIPT

Odczyt regionów przyciętych obrazów

Oba zestawy oprogramowania oferują rozwiązania do przycinania obrazów do OCR.

Odczyt regionów przyciętych z IronOCR

Gałąź Tesseract OCR Iron'a doskonale radzi sobie z czytaniem konkretnych regionów obrazów, jak pokazano w poniższym przykładowym kodzie.

Używamy System.Drawing.Rectangle, aby opisać dokładny obszar obrazu do odczytu w pikselach.

Kiedy mamy do czynienia ze standaryzowaną formą, która jest wypełniana, a tylko część zawartości zmienia się z przypadku na przypadek, może to być naprawdę przydatne.

Skanowanie sekcji strony: Używamy System.Drawing.Rectangle, aby wyznaczyć obszar do odczytu z dokumentu, co poprawia szybkość i dokładność.

OCR C# Skanowanie z przykładem TIFF
OCR C# Skanowanie z przykładem TIFF
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr
Imports System.Drawing

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		Using input = New OcrInput()
			' Define content area of interest
			Dim contentArea = New Rectangle() With {
				.X = 215,
				.Y = 1250,
				.Height = 280,
				.Width = 1335
			}

			' Add the specific region to the input
			input.AddImage("img/ComSci.png", contentArea)

			' Perform OCR operation
			Dim result = ocr.Read(input)

			' Output recognized text to console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

To daje nam 41-procentowy wzrost prędkości, jednocześnie pozwalając być bardziej precyzyjnymi. To jest niezwykle cenne dla aplikacji OCR .NET dotyczących dokumentów, które są porównywalne i spójne, w tym faktur, paragonów, czeków, formularzy, zgłoszeń wydatków i tak dalej.

Podczas odczytywania plików PDF obsługiwane są również obszary zawartości (przycinanie OCR).

Odczyt przyciętych regionów z Dynamsoft OCR

Na początek uruchom Visual Studio i utwórz nową aplikację Windows Forms w C#, lub otwórz już istniejącą. Będziemy musieli dołączyć DynamicDotNetTWAIN.dll, DynamicOCR.dll oraz odpowiedni pakiet językowy.

  1. Przejdź do Narzędzia -> Wybierz elementy narzędziowe, następnie do zakładki Komponenty .NET Framework, kliknij przycisk Przeglądaj i zlokalizuj DynamicDotNetTWAIN.dll.

  2. Kliknij prawym przyciskiem plik projektu w Eksploratorze Rozwiązań i wybierz Dodaj-> Istniejący element... następnie dodaj niezbędne elementy z katalogu zasobów OCR.

Oto kod po kliknięciu przycisku LoadImage:

private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
	Dim filedlg As New OpenFileDialog()
	If filedlg.ShowDialog() = DialogResult.OK Then
		dynamicDotNetTwain1.LoadImage(filedlg.FileName)
		' Choose an image from your local disk and load it into Dynamic .NET TWAIN
	End If
End Sub

Private Sub dynamicDotNetTwain1_OnImageAreaSelected(ByVal sImageIndex As Short, ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer)
	dynamicDotNetTwain1.OCRTessDataPath = "../../"
	dynamicDotNetTwain1.OCRLanguage = "eng"
	Dim ocrResultFormat As OcrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text

	Dim sbytes() As Byte = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom)
	' OCR the selected area of the image

	If sbytes IsNot Nothing Then
		Dim filedlg As New SaveFileDialog()
		filedlg.Filter = "Text File(*.txt)| *.txt"
		If filedlg.ShowDialog() = DialogResult.OK Then
			Dim fs As FileStream = File.OpenWrite(filedlg.FileName)
			fs.Write(sbytes, 0, sbytes.Length)
			' Save the OCR result as a text file
			fs.Close()
		End If
		MessageBox.Show("OCR successful")
	Else
		MessageBox.Show(dynamicDotNetTwain1.ErrorString)
	End If
End Sub
$vbLabelText   $csharpLabel

Tak wygląda aplikacja:

Demo Aplikacja Strefy OCR używając Dynamic TWAIN .NET OCR SDK

Dopasowanie wydajności obrazu

Jakość obrazu wejściowego jest najważniejszym wyznacznikiem szybkości zadania OCR. Im niższy szum w tle i wyższy dpi, z doskonałą wartością celu około 200 dpi, tym szybszy i dokładniejszy rezultat OCR.

Techniki przetwarzania obrazu dla Dynamsoft OCR

Musimy używać OCR w różnorodnych sytuacjach, takich jak skanowanie numeru karty kredytowej za pomocą telefonu czy wydobywanie tekstu z dokumentów papierowych. Dokładne funkcje OCR są dołączone do Dynamsoft Label Recognition (DLR) i Dynamic Web TWAIN (DWT).

Mimo że mogą wykonywać ogólnie świetną robotę, możemy poprawić wyniki, korzystając z różnych technik przetwarzania obrazu.

Rozjaśnij/usuwaj cienie

Złe oświetlenie może wpływać na wynik OCR. Aby poprawić wynik, możemy wybielić zdjęcia lub usunąć cienie z obrazów.

Odwróć

Ponieważ silnik OCR jest często trenowany na na tekście w ciemnych kolorach, tekst w jasnych kolorach może być trudniejszy do odnalezienia i rozpoznania.

Jasny tekst

Będzie łatwiej rozpoznać, jeśli odwrócimy jego kolor

Jasny tekst odwrócony

Do przeprowadzenia inwersji możemy użyć parametru GrayscaleTransformationModes w DLR.

Oto ustawienia JSON:

"GrayscaleTransformationModes": [
    {
        "Mode": "DLR_GTM_INVERTED"
    }
]

Wynik odczytu DLR .NET:

Wynik tekstu jasnego

Skalowanie

Jeśli wysokość litery jest zbyt niska, silnik OCR może nie dać dobrego wyniku. Zasadniczo obraz powinien mieć DPI co najmniej 300.

W DLR 1.1 jest parametr ScaleUpModes, który pozwala na powiększenie liter. Oczywiście, możemy także sami skalować obraz.

Bezpośrednie odczytanie obrazu daje błędny wynik:

Obraz 1x

Po zeskanowaniu obrazu x2 wynik jest poprawny:

Obraz 2x

Deskew

Jeśli tekst jest lekko zniekształcony, to w porządku. Jednakże, jeśli jest zbytnio przechylony, wynik zostanie negatywnie zmieniony. Aby poprawić wynik, musimy przyciąć obraz.

Aby to osiągnąć, możemy użyć transformacji linii Hougha w OpenCV i Pythonie.

Oto kod do deskewingu obrazu powyżej:

import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Image.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Image.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
PYTHON

Wykryto linie:

Wykryte linie

Odskewowany:

Odskewowany obraz

Techniki przetwarzania obrazu dla IronOCR

Jakość obrazu wejściowego nie jest tutaj ważna, ponieważ IronOCR doskonale naprawia uszkodzone dokumenty (chociaż to jest czasochłonne i spowoduje wykorzystanie większej ilości cykli procesora przez Twoje zadania OCR).

Wybór formatów obrazów wejściowych z mniejszym szumem cyfrowym, takich jak TIFF czy PNG, może również przynieść szybsze wyniki niż przy formatach obrazów z utratą jakości, takich jak JPEG.

Filtry obrazu poniżej mogą znacznie poprawić wydajność:

  • OcrInput.Rotate(double degrees) — Obraca obrazy zgodnie z ruchem wskazówek zegara o określoną liczbę stopni. Ujemne liczby całkowite są używane do obrotu przeciwnie do ruchu wskazówek zegara.
  • OcrInput.Binarize() — Ten filtr obrazu powoduje, że każdy piksel jest albo czarny, albo biały, bez odcieni pośrednich. Może poprawić wydajność OCR w sytuacjach, gdy kontrast tekstu do tła jest bardzo niski.
  • OcrInput.ToGrayScale() — Ten filtr obrazu konwertuje każdy piksel na odcień szarości. Prawdopodobnie nie poprawi dokładności OCR, ale może przyspieszyć działanie.
  • OcrInput.Contrast() — Automatycznie zwiększa kontrast. W skanach o niskim kontraście ten filtr często poprawia szybkość i dokładność OCR.
  • OcrInput.DeNoise() — Tego filtra należy używać tylko wtedy, gdy spodziewane są zakłócenia.
  • OcrInput.Invert() — Odwraca wszystkie kolory. Na przykład, biały staje się czarny: czarny staje się biały.
  • OcrInput.Dilate() — Zaawansowana morfologia. Dylacja to proces dodawania pikseli do krawędzi obiektów na obrazie. (Inverse of Erode)
  • OcrInput.Erode() — Zaawansowana funkcja morfologiczna. Erozja jest procesem usuwania pikseli z krawędzi obiektów. (Inverse of Dilate)
  • OcrInput.Deskew() — Obraca obraz, aby był ortogonalny i we właściwej pozycji. Ponieważ tolerancja Tesseract dla ukośnych skanów może być nawet 5 stopni, jest to dość użyteczne dla OCR.
  • DeepCleanBackgroundNoise() — Usuwa dużo szumów w tle. Używaj tego filtra tylko wtedy, gdy wiadomo, że w dokumencie występuje dużo szumów tła, ponieważ może on obniżyć dokładność OCR w czystych dokumentach i jest dość obciążający dla procesora.
  • OcrInput.EnhanceResolution — Poprawia rozdzielczość zdjęć o niskiej rozdzielczości. Z powodu OcrInput, ten filtr jest rzadko używany. OcrInput automatycznie wykryje i rozwiąże problem z niską rozdzielczością.

Możemy chcieć użyć IronTesseract, aby przyspieszyć OCR na skanach wyższej jakości. Jeśli zależy nam na szybkości, możemy zacząć tutaj, a następnie włączyć z powrotem funkcje, aż do osiągnięcia odpowiedniej równowagi.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim ocr = New IronTesseract()

' Configuration for speed tuning
		ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
		ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
		ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
		ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly
		ocr.Language = OcrLanguage.EnglishFast

		Using input = New OcrInput("img\Potter.tiff")
			Dim result = ocr.Read(input)
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Ten wynik jest 99,8% dokładny w porównaniu z bazowym 100% — ale o 35% szybszy.

Licencjonowanie i ceny

Licencjonowanie i cennik Dynamsoft

Licencja roczna. Wszystkie stawki obejmują roczny okres utrzymania, który obejmuje darmowe aktualizacje oprogramowania i wsparcie premium.

Dynamsoft oferuje dwa rodzaje licencji:

Licencja na kazde urzadzenie klienckie

"Licencja na jedno urzadzenie klienckie" zapewnia dostep do aplikacji o tej samej podstawie (ten sam protokol, ten sam host i ten sam port) w celu korzystania z funkcji oprogramowania z pojedynczego urzadzenia klienckiego. Nieaktywne urzadzenie klienckie to takie, ktore nie uzyskalo dostepu do zadnej funkcji oprogramowania przez 90 dni z rzedu. Nieaktywne miejsce licencyjne urzadzenia klienckiego zostanie natychmiast uwolnione i udostepnione do uzywania przez inne aktywne urzadzenie klienckie. Gdy osiagniesz maksymalna liczbe dozwolonych miejsc licencyjnych, Dynamsoft da ci dodatkowe 10% przydzialu na urzadzenia klienckie do uzycia w naglych sytuacjach. Po wyczerpaniu dodatkowego przydzialu urzadzen klienckich, nowe urzadzenia klienckie nie beda mogly uzyskac dostepu do oprogramowania i z niego korzystac, dopoki nie beda znowu dostepne miejsca licencyjne. Pamietaj, ze przekroczenie przydzialu urzadzen klienckich nie ma wplywu na urzadzenia klienckie, ktore juz zostaly licencjonowane.

Licencja na serwer

Aby wdrozyc aplikacje na jednym serwerze, wymagana jest "Licencja na jeden serwer". Serwery odnosza sie do zarowno fizycznych, jak i wirtualnych serwerow i obejmuja, ale nie ograniczaja sie do serwerow produkcyjnych, serwerow zapasowych, serwerow deweloperskich sluzacych do testow, serwerow zapewniajacych jakosc, serwerow testowych i serwerow przejsciowych, ktore wszystkie wymagaja licencji. Dodatkowe licencje nie sa wymagane dla serwerow ciaglej integracji (serwerow budowy) ani dla lokalnych serwerow deweloperskich. Licencja na serwer jest wazna tylko dla instalacji serwera na miejscu, a nie dla wdrozen w chmurze.

Ceny Dynamsoft OCR zaczynaja sie od 1 249 USD/rok.

Licencjonowanie i cennik IronOCR

Jako deweloperzy wszyscy chcemy zrealizowac nasze projekty minimalizujac wydatki i zasoby — planowanie budzetu jest kluczowe. Przestudiuj wykres, aby ustalic, ktora licencja najlepiej odpowiada twoim wymaganiom i budzetowi.

IronOCR oferuje licencje z dostosowana liczba deweloperow, projektow i lokalizacji, co pozwala na zaspokojenie potrzeb twojego projektu przy placeniu tylko za zakres, ktorego potrzebujesz.

Klucze licencyjne IronOCR umozliwiaja opublikowanie produktu bez znaku wodnego.

Licencje zaczynają się od $999 i obejmują rok wsparcia i aktualizacji.

Mozesz rowniez skorzystac z klucza licencyjnego probnego, aby wyprobowac IronOCR za darmo.

Wnioski

Tesseract OCR na Mac, Windows, Linux, Azure OCR i Docker sa dostepne z IronOCR for C#. .NET Framework 4.0 lub wyzsza jest wymagana, .NET Standard 2.0+, .NET Core 2.0+, .NET 5, Mono dla macOS i Linux oraz Xamarin dla macOS sa przykladami rozwojow wieloplatformowych. IronOCR wykorzystuje rowniez najnowszy silnik Tesseract 5 do odczytu tekstu, kodow kreskowych i kodow QR ze wszystkich glowne formatow obrazow i PDF. W kilka minut ta biblioteka dodaje funkcjonalnosc OCR do twoich aplikacji na pulpit, konsole lub webowych! OCR moze rowniez czytac PDF-y i wielostronicowe pliki TIFF i moze byc zapisana jako przeszukiwalny dokument PDF lub XHTML w kazdym skanie OCR. Tekst zwykly, dane kodu kreskowego i klasa wynikow OCR obejmujaca akapity, linie, slowa i znaki sa wsrod opcji danych wprowadzanych. Jest dostepny w 125 jezykach, w tym arabskim, chinskim, angielskim, finskim, francuskim, niemieckim, hebrajskim, wloskim, japonskim, koreanskim, portugalskim, rosyjskim i hiszpanskim, ale pamietaj, ze moga byc rowniez generowane niestandardowe pakiety jezykowe.

Dynamiczny dodatek OCR dla .NET TWAIN to szybki i niezawodny komponent .NET dla rozpoznawania znakow optycznych, ktory mozesz uzwac w aplikacjach WinForms i WPF napisanych w C# lub VB .NET. Mozesz zeskanowac dokumenty lub zrobic zdjecia z kamer internetowych za pomoca modulu przechwytywania obrazow Dynamic .NET TWAIN, a nastepnie wykonac OCR na obrazach aby przeksztalcic tekst na obrazy w tekst, przeszukiwalne pliki PDF lub ciagi. Oprocz angielskiego, oferowane sa rowniez wielokrotne jezyki azjatyckie oraz arabski.

IronOCR oferuje lepsze licencjonowanie niz Dynamsoft OCR; IronOCR zaczyna się od $999 z jednym rokiem za darmo, podczas gdy Dynamsoft zaczyna od $1249 z darmowym okresem próbnym. IronOCR oferuje rowniez licencje dla wielu uzytkownikow, podczas gdy z Dynamsoft otrzymujesz tylko jedna licencje na uzytkownika.

Chociaz oba zestawy oprogramowania maja na celu oferowanie najlepszej wydajnosci w zakresie odczytu OCR kodow kreskowych, obrazow na tekst i obrazow na tekst, IronOCR wyroznia sie, poniewaz swieci nawet na obrazach w zlej kondycji. Automatycznie umieszcza swoje zaawansowane metody dostrajania, aby zapewnic najlepsze wyniki OCR. IronOCR wykorzystuje rowniez Tesseract, aby zapewnic optymalne wyniki z minimalnymi lub zadnymi bledami.

Iron Software oferuje rowniez swoim klientom i uzytkownikom mozliwosc uzyskania calego pakietu oprogramowania w zaledwie dwa klikniecia. Oznacza to, ze za cene dwoch komponentow z pakietu Iron Software mozesz obecnie uzyskac wszystkie piec komponentow oraz nieprzerwane wsparcie.

Zwróć uwagęDynamsoft OCR jest zarejestrowanym znakiem towarowym jego wlasciciela. Ta strona nie jest powiazana, wspierana ani sponsorowana przez Dynamsoft OCR. 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.

Często Zadawane Pytania

Jak mogę przekonwertować obrazy tekstu na formaty cyfrowe przy użyciu języka C#?

Możesz użyć IronOCR w C# do konwersji obrazów tekstu na formaty cyfrowe. IronOCR oferuje metody automatycznego wyostrzania i poprawiania skanów o niskiej jakości, co czyni go idealnym narzędziem do konwersji różnych formatów obrazów na tekst.

Jakie zalety oferuje IronOCR w zakresie obsługi skanów o niskiej jakości?

IronOCR automatycznie poprawia skany o niskiej jakości, redukując przekrzywienie, zniekształcenia i szumy tła, jednocześnie poprawiając rozdzielczość i kontrast, co zapewnia wyższą dokładność rozpoznawania tekstu.

Która biblioteka OCR jest lepsza dla aplikacji wielopłatformowych?

IronOCR nadaje się do aplikacji wielopłatformowych, ponieważ obsługuje środowiska takie jak Xamarin i Azure, oferując elastyczność programistom pracującym na różnych platformach.

Jakie formaty obrazów obsługuje IronOCR?

IronOCR obsługuje szeroki zakres formatów obrazów, dzięki czemu jest wszechstronnym narzędziem do różnych zastosowań OCR. Może przetwarzać obrazy i dokumenty PDF, zapewniając elastyczność w obsłudze różnych źródeł danych wejściowych.

Czy technologia OCR może pomóc w zarządzaniu dokumentami w firmach?

Tak, technologia OCR może znacznie ułatwić zarządzanie dokumentami poprzez digitalizację dokumentów fizycznych, umożliwiając ich przeszukiwanie i edycję. Zmniejsza to ręczne wprowadzanie danych, minimalizuje błędy i poprawia dostępność.

W jaki sposób Dynamsoft OCR obsługuje pozyskiwanie obrazów z urządzeń?

Dynamsoft OCR obsługuje pobieranie obrazów z urządzeń zgodnych ze standardem TWAIN oraz kamer internetowych, umożliwiając skanowanie wsadowe i modyfikację atrybutów skanera w celu wydajnego przetwarzania obrazów.

Jakie są opcje cenowe IronOCR w porównaniu z innymi bibliotekami?

IronOCR oferuje licencje, które można dostosować do liczby programistów, projektów i lokalizacji, zapewniając bardziej elastyczne i opłacalne opcje w porównaniu z niektórymi innymi bibliotekami.

Jakie są typowe problemy związane z korzystaniem z technologii OCR?

Typowe problemy związane z technologią OCR obejmują obsługę obrazów o niskiej rozdzielczości, zniekształcenia oraz różne czcionki tekstu. Jednak biblioteki takie jak IronOCR posiadają wbudowane funkcje pozwalające rozwiązać te problemy, zwiększając dokładność OCR.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie