IronOCR ve Dynamsoft OCR Arasında Bir Karşılaştırma
Optik Karakter Tanıma, ya da OCR, yazılı ve basılı metni tanıma ve dijitalleştirme sürecini ifade eder. Bu, basılı metinlerin dijital fotoğraflarını harf ve rakamlara dönüştürmek için görüntü analizi kullanan bir bilgisayar teknolojisi türüdür. Metin, bilgisayarda aranabilir ve değiştirilebilir karakter kodlarına dönüştürülür.
Geçmişte tüm belgelerin fiziksel olduğu bir dünyaydı ve gelecekte tüm belgelerin dijital olabileceği bir toplum olabilirken, şu an değişim sürecindedir. Fiziksel ve dijital belgeler bu geçiş durumunda bir arada var olmadığı için OCR gibi teknolojiler ileri geri dönüşüm için kritik öneme sahiptir.
Belge kurtarma, veri girişi ve erişilebilirlik, OCR için sadece birkaç uygulama örneğidir. OCR uygulamalarının çoğu taranmış belgelerden gelmektedir, ancak fotoğraflar da bazen kullanılmaktadır. OCR, zamanı önemli ölçüde tasarruf ettirir, çünkü malzemeyi yeniden yazmak genellikle tek başka seçenektir. Aşağıdakiler, OCR'nin nasıl kullanılabileceğine dair bazı örneklerdir:
- Taranmış belgeler, fakslar dahil olmak üzere düzenlenebilir metin dosyaları olarak geri kazanılabilir.
- Kitap taramaları kullanarak aranabilir ve düzenlenebilir e-kitaplar oluşturmak.
- Ekran görüntüsü fotoğraflarını kullanarak metni aramak ve değiştirmek.
- Görme engelli kişilere kitapları sesli metin teknolojisi kullanarak okumak.
Bunlar OCR'nin sadece birkaç uygulaması olmasına rağmen, teknolojinin birçok sektördeki esnekliğini göstermektedir. Tüm firmalardaki çalışanlar neredeyse her gün belgeler üzerine yoğun bir şekilde güvenirler, bu nedenle iş kullanımı, OCR sisteminin gelişiminde önemli bir unsurdur.
Bu makalede, en güçlü iki OCR okuyucuyu karşılaştıracağız:
- IronOCR
- Dynamsoft OCR
IronOCR ve Dynamsoft OCR, taranmış görüntülerin dönüştürülmesini ve PDF belgelerinin OCR işlenmesini destekleyen iki .NET OCR kütüphanesidir. Birkaç satır kod ile görüntüleri aranabilir metne dönüştürebilirsiniz. Ayrıca bireysel kelimeleri, harfleri ve paragrafları alabilirsiniz.
IronOCR — öne çıkan özellikleri
IronOCR, tam olarak taranmamış resimler ve PDF belgelerinden metin algılama, okuma ve yorumlama yeteneğini sunar. IronOCR, belgelerden ve fotoğraflardan metin çıkarmanın en basit yaklaşımını sunar, çünkü otomatik olarak düşük kaliteli taramaları keskinleştirir ve düzeltir, sapma, bozulma, arka plan gürültüsü ve perspektif sorunlarını azaltır ve çözünürlüğü ve kontrastı iyileştirir.
IronOCR, geliştiricilerin tek sayfa veya çoklu sayfa taranmış görüntüler göndermesine olanak tanır ve tüm metin, barkodu ve QR bilgilerini geri döndürecektir. OCR kütüphanesindeki bir dizi sınıf, web tabanlı, masaüstü veya konsol uygulamalarına OCR yeteneği ekler. Tesseract OCR C# ve net uygulamalar JPG, PNG, TIFF, PDF, GIF ve BMP gibi formatlar giriş olarak kullanılabilir.
IronOCR'un Optik Karakter Tanıma (OCR) motoru, birçok yaygın font, italik, ağırlık ve altını çizme kullanılarak hazırlanan metni okuyabilir. Kırpma sınıfları, OCR'nin hızlı ve doğru bir şekilde çalışmasını sağlar. Çok sayfalı belgelerle çalışırken, IronOCR'un çok iş parçacıklı motoru OCR hızını artırır.
IronOCR özellikleri
Tesseract yönetimi için IronOCR kullanıyoruz çünkü şu noktalarda benzersizdir:
- Yalın .NET'te kutudan çıktığı gibi çalışır
- Makinenizde Tesseract kurulumu gerektirmez
- En yeni motorları çalıştırır: Tesseract 5 (ayrıca Tesseract 4 ve 3)
- Herhangi bir .NET projesi için kullanılabilir: .NET Framework 4.5 +, .NET Standard 2 + ve .NET Core 2, 3 ve .NET 5
- Geleneksel Tesseract'a göre geliştirilmiş doğruluk ve hız sunar
- Xamarin, Mono, Azure ve Docker'ı destekler
- NuGet paketleri ile karmaşık Tesseract sözlük sistemini yönetir
- PDFler, Çok Çerçeveli Tiffler ve tüm büyük görüntü formatlarını yapılandırma olmaksızın destekler
- Tesseract'ten en iyi sonuçları almak için düşük kaliteli ve eğik taramaları düzeltebilir.
Dynamsoft OCR — özellikler
Dynamsoft.NET OCR kütüphanesi, hızlı ve güvenilir optik karakter tanıma sağlayan bir .NET bileşenidir. C# veya VB.NET'te .NET masaüstü uygulamaları oluşturmak için kullanılır. Temel OCR API'lerini kullanarak PDF veya fotoğraflardaki kullanılmayan metni dijital metne dönüştürmek için kolayca kod oluşturabilirsiniz.
Tarayıcılardan ve diğer TWAIN uyumlu cihazlardan görüntüler elde edilebilir:
- Doğal, arabelleğe alınmış bellek ve disk dosyası görüntü aktarım mekanizmaları desteklenir.
- Otomatik belge besleyici ile toplu tarama mümkündür (ADF).
- Yaygın cihaz işlevselliklerini değiştirmek için TWAIN öznitelikleri kullanılabilir.
- IfAutoFeed, IfAutoScan, Çözünürlük, BitDerinliği, Parlaklık, Kontrast, Birim, Çift Yönlü ve diğer özellikler değiştirilebilir.
- Boş sayfaların algılanmasını destekler.
- Tarayıcı profillerini değiştirmenize ve kaydetmenize olanak tanır.
UVC ve WIA uyumlu webcamlerden görüntü yakalamak:
- Seçilen bir webkamdan fotoğraf çekerken canlı bir video akışı gösterin.
- Kameranın ayarlarını özelleştirin: Parlaklık, Kontrast, Renk Tonu, Doygunluk, Keskinlik, Gamma, Beyaz Dengesi, Arkaışık Dengeleme, Kazanç, Renk Etkinleştirme, Zoom, Odak, Pozlama, Diyafram, Pan, Tilt, Roll.
Sağlam Görüntü Yükleme/Görme
- BMP, JPEG, PNG, TIFF ve çok sayfalı TIFF formatlarında görüntüler yüklenebilir.
- Fotoğrafları büyütmek ve küçültmek desteklenir.
- Görüntüler yerel sürücüden, bir FTP sunucusundan, bir HTTP sunucusundan veya bir veritabanından geri alınabilir.
- BMP, JPEG, PNG ve TIFF için bir dizi en kapsamlı .NET görüntü bileşeni kullanarak resim kodlama yapılabiliyor.
Kaydet ve Yükle/İndir
- Dosya akışı üzerinden fotoğrafları okumanıza ve yazmanıza olanak tanır.
- Yakalanan görüntüleri BMP, JPEG, PNG, TIFF veya çok sayfalı TIFF olarak yerel sürücüye, bir web sunucusuna veya veritabanına kaydetmeyi destekler.
- RLE, G3/G4, LZW, PackBits ve TIFF sıkıştırması desteklenir.
- HTTPS yüklemeleri ve indirmeleri desteklenir.
- Mevcut olan en kapsamlı .NET resim bileşeni setlerinden biri BMP, JPEG, PNG ve TIFF görüntü kodlamasını destekler.
- Yeni elde edilen fotoğrafları mevcut TIFF dosyalarına eklemenize olanak tanır.
ASP.NET'te Taranmış PDF'lerden veya Diğer Fotoğraflardan Metin Okuma (Optik Karakter Tanıma)
Günümüzün hızlı temposunda, müşterilerin işleri hızlı bir şekilde tamamlanmasını istediklerini görüyoruz. Acil projeleri olan müşteriler sıkça bizimle iletişime geçer. Teknolojimiz, görüntüler içeren belgeleri taramayı içeren projelerde, bir fotoğrafın içeriğini basitçe tanıyabilen ve metne dönüştürebilir. Optik Karakter Tanıma (OCR), firmanızın zaman ve para tasarrufu yapmasını sağlarken, veri girişi hatalarını da azaltır.
IronOCR kullanarak
IronOCR, OCR dönüştürmelerini gerçekleştirmek için IronOcr.IronTesseract sınıfını kullanır.
Bu temel örnekte, IronOcr.IronTesseract sınıfını bir görüntüden metin okumak ve sonucunu otomatik olarak bir dize olarak geri döndürmek için kullanırız.
// 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
Sonuç olarak, aşağıdaki paragraf %100 doğrudur:
IronOCR Basit Örnek
Bu basit örnekte, C# OCR kütüphanemizin bir PNG'den metin okuma doğruluğunu test edeceğiz.
Görüntü. Bu çok temel bir test ama ders devam ettikçe işler daha karmaşık hale gelecektir.
Hızlı kahverengi tilki tembel köpeğin üzerinden atlar
Yüzeyde basit görünebilir, ancak yüzeyin altında karmaşık davranışlar vardır: resmin hizalanması, kalitesi ve çözünürlüğü için tarama, özelliklerine bakma, OCR motorunu optimize etme ve sonunda metni bir insanın okuyabileceği şekilde okuma.
OCR, bir makinenin yapması için zor bir görevdir ve okuma hızları, bir insanın hızına eşit olabilir. Başka bir deyişle, OCR hızlı bir işlem değildir. Ancak bu durumda, tamamen doğrudur.
Gerçek dünya senaryolarında, geliştiriciler projelerinin mümkün olduğunca hızlı çalışmasını isteyecektir. Bu senaryoda, IronOCR eklemeleri ad alanının OcrInput ve IronTesseract sınıflarını kullanmanızı öneririz.
Bir OCR işinin belirli özelliklerini OcrInput ile ayarlayabilirsiniz, örneğin:
- JPEG, TIFF, GIF, BMP ve PNG sadece bazıları kullanılabilecek resim formatlarıdır
- PDF belgelerini tamamen veya kısmen içe aktarmak
- Resimin kontrastını, çözünürlüğünü ve boyutunu artırmak
- Dönme, tarama gürültüsü, dijital gürültü, eğiklik ve negatif resim düzeltme
IronTesseract
Önceden paketlenmiş yüzlerce dil ve lehçe arasından seçim yapın
- Tesseract 5, 4 veya 3 OCR motorlarını hemen kullanın
- Ekran görüntüsü, bir parça ya da tüm belgeyi inceliyorsak, belge türünü belirtin
- Barkod tanıma
- Aranabilir PDF'ler, Hocr HTML, bir DOM ve Dizeler OCR sonuçları için seçeneklerdir
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
Bu, 100% doğrulukla orta kalitede bir taramada bile kullanılabiliriz.
Gördüğünüz gibi, bir TIFF gibi bir taranmış görüntüden metin (ve istenirse barkodlar) okumak oldukça kolaydı. Bu OCR işinin doğruluğu %100'dür.
Ardından aynı sayfanın düşük bir DPI ve çok sayıda bozulma ve dijital gürültü içeren ve orijinal kağıda zarar veren çok daha düşük kaliteli bir taramayı deneyeceğiz.
Bu, IronOCR'nin gerçekten parladığı, diğer OCR kütüphaneleri (Tesseract gibi) ile karşılaştırıldığında ve diğer OCR projelerinin gerçek dünyada taranmış görüntüler üzerinde OCR kullanımını tartışmaktan kaçındığını ve %100 OCR doğruluğunu sağlamak amacıyla dijital olarak oluşturulmuş gerçekçi olmayan 'mükemmel' test durumları yarattığını göreceğiz.
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
Görüntüyü düzeltmek için Input.Deskew() eklemeden %52,5 doğruluk elde ediyoruz. Bu yeterince iyi değil.
Input.Deskew() eklemek bize %99,8 doğruluk sağlıyor ki bu, yüksek kaliteli bir taramanın OCR'sı kadar neredeyse doğrudur.
Dynamsoft OCR kullanarak
JavaScript'te TWAIN taraması ve istemci tarafı OCR yapmak için Dynamic Web TWAIN'i kullanma kod parçacıkları sunacağız.
Tarama Resimleri
Dynamic Web TWAIN'in basit API'lerini kullanarak tarama ayarlarını değiştirebilir ve TWAIN tarayıcılarından görüntü elde edebilirsiniz.
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();
}
OCR Professional Modülünü İndirin
İstemci tarafı OCR için OCR Professional modülünü kullanmak için, başlığa ocrpro.js eklemeniz ve ayrıca OCR Pro DLL'sini indirmeniz gerekecek.
<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>
.js dosyasında düzenlemeler yapın:
// 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);
OCR kullanarak metni tanıma
Aşağıdaki kodu eklemek kadar basit bir şekilde JS OCR tanıma API'sini kullanarak taranmış görüntülerden metin çıkarabilirsiniz.
// 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
Görüntülerin Kırpılmış Bölgelerini Okuma
Her iki yazılım seti de OCR için görüntüleri kırpmak için çözümler sunar.
IronOCR ile kırpılmış bölgeleri okuma
Iron'un Tesseract OCR dalı, görüntülerin belirli bölgelerini okuma konusunda yeteneklidir, aşağıdaki kod örneğinde gösterildiği gibi.
Piksel cinsinden okunacak görüntünün tam bölgesini tanımlamak için System.Drawing.Rectangle kullanıyoruz.
Standart bir formun doldurulmuş olduğu ve içeriğin sadece bir kısmının durumdan duruma değiştiği bir durumla çalışırken bu gerçekten kullanışlı olabilir.
Bir Sayfa Bölümünü Tarama: Bir belgeden okuyacak bir bölgeyi belirlemek ve hızı ve doğruluğu artırmak için System.Drawing.Rectangle kullanıyoruz.
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
Bu, hızda %41'lik bir artış sağlar ve daha spesifik olmamıza olanak tanır. Bu, fatura, makbuz, çek, formlar, masraf beyannamesi vb. gibi benzer ve tutarlı belgelere sahip .NET OCR uygulamaları için son derece değerlidir.
PDF'leri okurken, ContentAreas (OCR kırpma) da desteklenir.
Dynamsoft OCR ile kırpılmış bölgeleri okuma
Başlamak için Visual Studio'yu başlatın ve yeni bir C# Windows Forms Uygulaması oluşturun veya mevcut birini açın. DynamicDotNetTWAIN.dll, DynamicOCR.dll ve uygun dil paketini eklememiz gerekecek.
-
Araçlar'a gidin -> Araç Kutusu Öğelerini Seçin, sonra .NET Framework Bileşenleri sekmesine gidin, Gözat düğmesine tıklayın ve
DynamicDotNetTWAIN.dllbulun. - Çözüm Gezgini'nde proje dosyasına sağ tıklayın ve Ekle -> Mevcut Öğeyi Seç ... seçeneğini belirleyin. ardından OCR kaynak dizininden gerekli öğeleri ekleyin.
Bu, LoadImage düğmesine tıklamak için koddur:
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
Uygulama böyle görünüyor:
Görüntü Performans Ayarlama
Giriş görüntüsünün kalitesi, bir OCR görevinin hızındaki en önemli belirleyicidir. Arka plan gürültüsü ne kadar düşükse ve dpi ne kadar yüksekse, yaklaşık olarak 200 dpi'de mükemmel bir hedef değeri ile, OCR çıktısı o kadar hızlı ve doğru olur.
Dynamsoft OCR için Görüntü İşleme Teknikleri
Telefonumuzla bir kredi kartı numarasını tarama veya kağıt belgelerden metin çıkarma gibi çeşitli durumlarda OCR kullanmamız gerekiyor. Dynamsoft Etiket Tanıma (DLR) ve Dynamic Web TWAIN (DWT) içinde OCR yetenekleri bulunmaktadır.
Genel olarak mükemmel bir iş yapabilseler de, çeşitli görüntü işleme tekniklerini kullanarak sonuçları iyileştirebiliriz.
Gölgeleri Aydınlat/Kaldır
Zayıf aydınlatma koşulları OCR sonucunu etkileyebilir. Sonucu iyileştirmek için, fotoğrafları beyazlatabilir veya görüntülerden gölgeleri kaldırabiliriz.
Ters Çevir
OCR motoru genellikle koyu renkli metinlerde eğitildiğinden, açık renkli metinleri bulmak ve tanımak daha zor olabilir.
Rengini tersine çevirirsek daha kolay tanınacaktır.
Ters çevirme işlemini gerçekleştirmek için DLR'de GrayscaleTransformationModes parametresini kullanabiliriz.
İşte JSON ayarları:
"GrayscaleTransformationModes": [
{
"Mode": "DLR_GTM_INVERTED"
}
]
DLR .NET'in okuma sonucu:
Yeniden Ölçekleme
Harf yüksekliği çok düşükse, OCR motoru iyi bir sonuç vermeyebilir. Genel olarak, resim en az 300 DPI olmalıdır.
DLR 1.1'de, harfleri büyütmenizi sağlayan bir ScaleUpModes parametresi vardır. Elbette resmi kendimiz de ölçeklendirebiliriz.
Resmi doğrudan okumak yanlış sonuç verir:
Resmi 2 kat büyüttükten sonra sonuç doğrudur:
Eğimi Düzelt
Metin biraz bozulmuşsa sorun olmaz. Ancak, aşırı eğilirse sonuç olumsuz yönde değişecektir. Sonucu iyileştirmek için resmi kesmemiz gerekiyor.
Bunu başarmak için, OpenCV ve Python'da Hough Hatta Dönüştürmeyi kullanabiliriz.
Yukarıdaki resmi eğimini düzeltmek için kod burada:
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 = Görüntü.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 = Görüntü.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()
Tespit edilen çizgiler:
Eğimi düzeltilmiş:
IronOCR için Görüntü İşleme Teknikleri
Girdi görüntüsünün kalitesi burada önemli değil çünkü IronOCR kusurlu belgeleri onarmada mükemmel (bu zaman alıcıdır ve OCR iş yüklerinin daha fazla CPU döngüsü kullanmasına neden olacaktır).
TIFF veya PNG gibi daha az dijital gürültüye sahip girdi görüntü formatlarını seçmek, JPEG gibi kayıplı görüntü formatlarına göre daha hızlı sonuçlar verebilir.
Aşağıda listelenen görüntü filtreleri performansı önemli ölçüde artırabilir:
OcrInput.Rotate(double degrees)— Görüntüleri saat yönünde belirtilen derece sayısı kadar döndürür. Saat yönünün tersine döndürme için negatif tamsayılar kullanılır.OcrInput.Binarize()— Bu görüntü filtresi her pikseli siyah veya beyaz yapar, arada seçenek bırakmaz. Yazı ile arka plan arasındaki kontrastın çok düşük olduğu durumlarda OCR performansını artırabilir.OcrInput.ToGrayScale()— Bu görüntü filtresi her pikseli gri tonlamaya dönüştürür. OCR doğruluğunu artırması olası değildir, ancak hızı artırabilir.OcrInput.Contrast()— Kontrastı otomatik olarak artırır. Düşük kontrastlı taramalarda, bu filtre sıklıkla OCR hızı ve doğruluğunu artırır.OcrInput.DeNoise()— Bu filtre yalnızca gürültü beklendiğinde kullanılmalıdır.OcrInput.Invert()— Tüm renkleri tersine çevirir. Örneğin, beyaz siyah olur: siyah beyaz olur.OcrInput.Dilate()— Gelişmiş morfoloji. Gelişme, bir şdığın kenarlarına piksel ekleme sürecidir. (Inverse of Erode)OcrInput.Erode()— Gelişmiş bir morfoloji fonksiyonu. Erozyon, bir şdığın kenarlarından piksel kaldırma sürecidir. (Inverse of Dilate)OcrInput.Deskew()— Görüntüyü ortogonal hale getirir ve doğru şekilde yerleştirir. Tesseract'in eğimli taramalara toleransı 5 derece kadar düşük olabileceğinden, bu OCR için oldukça kullanışlıdır.DeepCleanBackgroundNoise()— Birçok arka plan gürültüsünü temizler. Sadece belgede çok fazla arka plan gürültüsü olduğunu bildiğinizde bu filtreyi kullanın çünkü açık belgelerde OCR doğruluğunu azaltabilir ve oldukça CPU yoğundur.OcrInput.EnhanceResolution— Düşük çözünürlüklü fotoğrafların çözünürlüğünü artırır.OcrInputnedeniyle, bu filtre nadiren kullanılır.OcrInputdüşük çözünürlüğü otomatik olarak algılayacak ve çözecektir.
IronTesseract'ı daha yüksek kaliteli taramalarda OCR hızını artırmak için kullanmak isteyebiliriz. Hız arıyorsak, burada başlayabiliriz ve ardından özellikleri tekrar açarak en uygun dengeyi bulabiliriz.
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
Bu sonuç, %99,8 doğrulukla, %100 referans çizgisine kıyasla – %35 daha hızlıdır.
Lisanslama ve Fiyatlandırma
Dynamsoft Lisanslama ve Fiyatlandırma
Yıllık lisans. Tüm fiyatlar, ücretsiz yazılım yükseltmelerini ve premium desteği içeren bir yıl bakım süresini içerir.
Dynamsoft iki tür lisans sunar:
Cihaz başına lisans
"Bir İstemci Cihaz Lisansı", tek bir istemci cihazından yazılımın özelliklerini kullanmak için aynı kaynak asıllı Bir Uygulamaya (aynı protokol, aynı ana bilgisayar ve aynı port) erişimi sağlar. 90 gün üst üste herhangi bir yazılım yeteneğine erişmemiş bir istemci cihazı inaktif bir cihaza sayılır. İnaktif bir istemci cihazın lisans koltuğu hemen serbest bırakılır ve başka herhangi bir aktif istemci cihazı tarafından kullanılmak üzere hazır hale getirilir. İzin verilen maksimum lisans koltuk sayısına ulaştığınızda, Dynamsoft acil durum kullanımı için ekstra %10'luk bir istemci cihaz haklılığı verecektir. Ek istemci cihaz hakları tükendiğinde, lisans koltukları tekrar kullanılabilir hale gelene dek yeni istemci cihazları yazılıma erişemez ve yazılımı kullanamaz. Müşteri cihazı haklarınızı aşmanız, zaten lisanslanmış olan müşteri cihazları üzerinde hiçbir etkisi yoktur.
Sunucu başına lisans
Uygulamayı tek bir sunucuya dağıtmak için "Bir Sunucu Lisansı" gereklidir. Sunucular, fiziksel ve sanal sunucuları ifade eder ve bunlar, üretim sunucuları, devreye alma sunucuları, aynı zamanda test için kullanılan geliştirme sunucuları, kalite güvence sunucuları, test sunucuları ve aşama sunucuları gibi bir lisansa ihtiyaç duyan, ancak bunlarla sınırlı olmamak üzere içerir. Sürekli entegrasyon sunucuları (yapım sunucuları) veya localhost geliştirme sunucuları için ek lisanslar gerekiyor değildir. Sunucu başına olan lisans, yalnızca yerinde sunucu kurulumları için geçerlidir ve bulut dağıtımları için geçerli değildir.
Dynamsoft OCR fiyatlandırması yıllık 1.249 USD'den başlamaktadır.
IronOCR Lisanslama ve Fiyatlandırma
Geliştiriciler olarak, hepimiz projelerimizi mümkün olan en az parayla ve kaynakla gerçekleştirmek istiyoruz — bütçeleme kritik bir öneme sahiptir. Hangi lisansın gereksinimlerinize ve bütçenize en uygun olduğunu belirlemek için tabloyu inceleyin.
IronOCR, projenizin gereksinimlerini karşılayabilmenize olanak tanıyan özelleştirilebilir sayıda geliştirici, proje ve konum ile lisanslar sağlar ve yalnızca ihtiyacınız olan kapsama için ödeme yaparsınız.
IronOCR lisanslama anahtarları, ürününüzü bir filigran olmadan yayınlamanızı sağlar.
Lisanslar $999'den başlar ve bir yıl destek ve güncellemeleri içerir.
Ayrıca, IronOCR'u ücretsiz denemek için bir deneme lisansı anahtarı da kullanabilirsiniz.
Sonuç
IronOCR ile Mac, Windows, Linux, Azure OCR ve Docker üzerinde Tesseract OCR kullanılabilir. .NET Framework 4.0 veya üstü gereklidir, .NET Standard 2.0+, .NET Core 2.0+, .NET 5, macOS ve Linux için Mono, macOS için Xamarin gibi birçok platformda geliştirme örnekleri. IronOCR ayrıca Tesseract 5 motorunun en son sürümünü kullanarak tüm ana görüntü ve PDF formatlarından metin, barkodlar ve QR kodlarını okur. Bu kütüphane, dakikalar içinde masaüstü, konsol veya web uygulamalarınıza OCR işlevselliği ekler! OCR ayrıca PDF'leri okuyabilir ve çok sayfalı TIFF'ler okunabilir PDF belge veya herhangi bir OCR Tarama içinde XHTML olarak kaydedilebilir. Veri çıkış seçeneklerinden bazıları arasında düz metin, barkod verileri ve paragrafları, satırları, kelimeleri ve karakterleri kapsayan bir OCR sonuç sınıfı bulunur. Arapça, Çince, İngilizce, Fince, Fransızca, Almanca, İbranice, İtalyanca, Japonca, Korece, Portekizce, Rusça ve İspanyolca dahil 125 dilde kullanılabilir, ancak özel dil paketleri de oluşturulabilir.
Dinamik .NET TWAIN OCR eklentisi, WinForms ve WPF uygulamalarında kullanabileceğiniz hızlı ve güvenilir bir .NET bileşenidir. Dinamik .NET TWAIN'in görüntü yakalama modülünü kullanarak belgeleri tarar veya web kameralardan fotoğrafları çekebilir ve ardından bu görüntüler üzerinde OCR yaparak görüntülerdeki metni metin, aranabilir PDF dosyalarına veya dizelerine dönüştürebilirsiniz. İngilizceye ek olarak birden fazla Asya dili ve Arapça sunulmaktadır.
IronOCR, Dynamsoft OCR'den daha iyi bir lisanslama avantajı sunmaktadır; IronOCR, bir yıl ücretsiz olarak $999'den başlarken, Dynamsoft $1249 ile ücretsiz deneme sunar. IronOCR ayrıca birden fazla kullanıcı için lisanslar sunar, oysa Dynamsoft'ta kullanıcı başına yalnızca bir lisans alırsınız.
Her iki yazılım seti de mobil metin ve barkodların OCR okumalarındaki en iyi performansı sunmayı amaçlarken, IronOCR başarılı bir şekilde kötü durumda olan görüntülerde bile ışığını parlatmayı başarır. En iyi OCR sonuçlarını elde etmek için gelişmiş ayarlama yöntemlerini otomatik olarak yerine getirir. IronOCR ayrıca minimal veya hiç hata olmadan en iyi sonuçları almak için Tesseract'ı kullanır.
Iron Software ayrıca müşterilerine ve kullanıcılarına tüm yazılım paketini yalnızca iki tıkla alma seçeneği sunmaktadır. Bu, Iron Software paketinde iki bileşenin fiyatına, şu anda tüm beş bileşeni ve kesintisiz desteği alabileceğiniz anlamına gelir.
[[i: (Dynamsoft OCR, ilgili sahibinin tescilli bir markasıdır. Bu site, Dynamsoft OCR ile bağlantılı, destekli veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.)]]
Sıkça Sorulan Sorular
Metin görüntülerini C# kullanarak dijital formatlara nasıl dönüştürebilirim?
C#'ta IronOCR'u kullanarak metin görüntülerini dijital formatlara dönüştürebilirsiniz. IronOCR, çeşitli görüntü formatlarını metne dönüştürmek için idealdir, düşük kaliteli taramaları otomatik olarak keskinleştirir ve düzeltir.
IronOCR, düşük kaliteli taramalarla başa çıkmak için ne gibi avantajlar sunuyor?
IronOCR, düşük kaliteli tarama görüntülerindeki eğrilik, bozulma ve arka plan gürültüsünü azaltıp çözünürlüğü ve kontrastı artırarak otomatik olarak geliştirir ve bu da metin tanımada daha yüksek doğruluk sağlar.
Çapraz platform uygulamaları için hangi OCR kütüphanesi daha iyi?
IronOCR, Xamarin ve Azure gibi ortamları desteklediği için çapraz platform uygulamaları için uygundur, böylece geliştiriciler çeşitli platformlarla çalışırken esneklik sunar.
IronOCR hangi görüntü formatlarını destekliyor?
IronOCR, çeşitli OCR uygulamaları için esnek hale getirerek geniş bir görüntü formatı yelpazesini destekler. Görüntüleri ve PDF belgelerini işleyebilir, çeşitli giriş kaynaklarını ele alma esnekliği sağlar.
OCR teknolojisi işletmelerde belge yönetimine yardımcı olabilir mi?
Evet, OCR teknolojisi, fiziksel belgeleri dijitalleştirerek aranabilir ve düzenlenebilir hale getirme yoluyla belge yönetimine önemli ölçüde katkı sağlayabilir. Bu, manuel veri girişini azaltır, hataları en aza indirir ve erişilebilirliği artırır.
Dynamsoft OCR cihazlardan görüntü alımını nasıl işler?
Dynamsoft OCR, TWAIN'le uyumlu cihazlardan ve web kameralardan görüntü alımını destekleyerek toplu tarama ve verimli görüntü işleme için tarayıcı özniteliklerini değiştirme sağlar.
IronOCR'un diğer kütüphanelere göre fiyatlandırma seçenekleri nelerdir?
IronOCR, geliştirici sayısı, projeler ve konumlara göre özelleştirilebilen lisanslar sunar, bu da bazı diğer kütüphanelere kıyasla daha esnek ve uygun maliyetli seçenekler sağlar.
OCR teknolojisini kullanırken karşılaşılan bazı yaygın sorunlar nelerdir?
OCR teknolojisinin yaygın sorunları, düşük çözünürlüklü görüntülerle çalışma, bozulma ve değişen metin yazı tiplerini içerir. Ancak, IronOCR gibi kütüphaneler, bu tür sorunları ele alan ve OCR doğruluğunu artıran yerleşik özelliklere sahiptir.

