IronOCR ile Dynamsoft OCR Arasında Bir Karşılaştırma
Optik Karakter Tanıma veya OCR, yazılı ve basılı metinlerin tanınması ve dijitalleştirilmesi sürecidir. Dijital fotoğraflardaki basılı metni harfler ve rakamlar haline 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 olması için karakter kodlarına dönüştürülür.
Geçmişte tüm belgelerin fiziksel olduğu bir dünya varken, gelecekte tüm belgelerin dijital olabileceği bir toplum olabilir, şu an ise geçiş halindedir. Fiziksel ve dijital belgeler bu geçiş aşamasında bir arada bulunur — bu nedenle OCR gibi teknolojiler dönüşüm için kritiktir.
Belge kurtarma, veri girişi ve erişilebilirlik, OCR uygulamalarından sadece birkaçıdır. OCR uygulamalarının çoğu taranmış belgelerden gelir, ancak fotoğraflar da bazen kullanılır. OCR, genellikle materyali yeniden yazmak dışında başka bir seçenek olmadığı için değerli bir zaman tasarrufu sağlar. OCR'nin nasıl kullanılabileceğine dair bazı örnekler şunlardır:
- Tarayıcıdan alınan belgelerden, fakslar dahil, düzenlenebilir metin dosyaları elde edilebilir.
- Aranabilir ve düzenlenebilir e-kitaplar oluşturmak için kitap taramalarını kullanmak.
- Ekran görüntülerindeki fotoğraflardaki metni aramak ve değiştirmek.
- Görme engelli insanlara kitapları okumak için metin-konuşma teknolojisi kullanılır.
Bunlar OCR için sadece birkaç uygulama olsa da teknolojinin geniş bir endüstri yelpazesinde yer alan esnekliğini gösterir. Neredeyse tüm işletmelerde tüm çalışanlar günlük olarak belgelere büyük ölçüde bağımlıdır ve bu nedenle ticari kullanım, OCR sistemi geliştirmede önemli bir husustur.
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ülmesi ve PDF belgelerinin OCR işlemesi için destekleyen iki .NET OCR kütüphanesidir. Sadece birkaç satır kod ile görüntüleri aranabilir metne dönüştürebilirsiniz. Ayrıca, bireysel kelimeleri, harfleri ve paragrafları alabilirsiniz.
IronOCR — olağanüstü özellikler
IronOCR, tam olarak taranmamış resimler ve PDF belgelerinden metni algılama, okuma ve yorumlama yeteneğine sahiptir. IronOCR, belgelerden ve fotoğraflardan metin çıkarmanın en basit yolunu sunar, çünkü düşük kaliteli taramaları otomatik olarak keskinleştirir ve düzeltir, eğiklik, bozulma, arka plan gürültüsü ve perspektif sorunlarını azaltır, aynı zamanda çözünürlüğü ve kontrastı geliştirir.
IronOCR, geliştiricilerin ona tek veya çok sayfalı taranmış görüntüler göndermesine izin verir ve tüm metni, barkodları ve QR bilgisini geri döndürür. OCR kütüphanesindeki bir dizi sınıf, web tabanlı, masaüstü veya konsol uygulamalarına OCR yeteneği ekler. Tesseract OCR C#, net uygulamalar JPG, PNG, TIFF, PDF, GIF ve BMP gibi girdi olarak kullanılabilecek formatlardan sadece birkaçıdır.
IronOCR'un Optik Karakter Tanıma (OCR) motoru, birçok yaygın font, italik, ağırlık ve alt çizgi ile hazırlanmış metni okuyabilir. Kırpma sınıfları, OCR'nin hızlı ve hassas çalışmasını mümkün kılar. Çok sayfalı belgelerle çalışırken, IronOCR'un çok iş parçacıklı motoru OCR'i hızlandırır.
IronOCR özellikleri
Tesseract yönetimi için IronOCR kullanıyoruz çünkü şu açılardan eşsizdir:
- Saf .NET içinde hemen çalışır
- Makinenizde Tesseract kurulumu gerektirmez
- En son motorları çalıştırır: Tesseract 5 (ve Tesseract 4 & 3)
- Herhangi bir .NET projesi için uygundur: .NET Framework 4.5 +, .NET Standard 2 + ve .NET Core 2, 3 & .NET 5
- Geleneksel Tesseract'a göre geliştirilmiş hassasiyet ve hız
- Xamarin, Mono, Azure ve Docker'ı destekler
- Karmaşık Tesseract sözlük sistemini NuGet paketleri kullanarak yönetir
- PDF'ler, MultiFrame Tiffs ve tüm büyük resim formatları yapılandırma olmadan desteklenir
- Tesseract'tan 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 sunan 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 işe yaramaz metni düzenlemek, aramak, arşivlemek ve daha fazlası için dijital metne dönüştürmek için kod oluşturabilirsiniz.
Tarayıcılardan ve diğer TWAIN uyumlu cihazlardan resimler şu şekillerde elde edilebilir:
- Yerel, tamponlanmış hafıza ve disk dosyası görüntü aktarım mekanizmaları desteklenir.
- Otomatik belge besleyici ile toplu tarama yapılabilir (ADF).
- Yaygın cihaz işlevselliklerini değiştirmek için TWAIN özellikleri kullanılabilir.
- IfAutoFeed, IfAutoScan, Çözünürlük, Bit Derinliği, Parlaklık, Kontrast, Birim, Çift Taraflı ve diğer özellikler değiştirilebilir.
- Boş sayfa tespiti desteklenir.
- Tarayıcı profillerini değiştirme ve kaydetme imkanı verir.
UVC ve WIA uyumlu web kameralarından görüntü alın:
- Seçilen web kamerasından fotoğraf çekerken canlı video akışı gösterebilirsiniz.
- Kameranın ayarlarını özelleştirin: Parlaklık, Kontrast, Ton, Doygunluk, Keskinlik, Gama, Beyaz Denge, Arka Işık Telafisi, Kazanç, Renk Etkinleştirme, Zoom, Odak, Pozlama, Diyafram, Pan, Eğilme, Yuvarlanma.
Sağlam Resim Yükleme/Görüntüleme
- BMP, JPEG, PNG, TIFF ve çok sayfalı TIFF formatlarında görüntüleri yükleyebilirsiniz.
- Fotoğrafları yakınlaştırma ve uzaklaştırma desteklenir.
- Görüntüler, yerel sürücü, bir FTP sunucusu, bir HTTP sunucusu veya bir veritabanından alınabilir.
- BMP, JPEG, PNG ve TIFF için en kapsamlı .NET görüntü bileşen setlerinden birini kullanarak görüntü kod çözme
Kaydet ve Yükle/İndirme
- Bir dosya akışı üzerinden resim okuma ve yazma imkanı verir.
- Yakalanan resimleri BMP, JPEG, PNG, TIFF veya çok sayfalı TIFF olarak yerel sürücüye, web sunucusuna veya veritabanına kaydedilebilir.
- RLE, G3/G4, LZW, PackBits ve TIFF sıkıştırma desteklenir.
- HTTPS yüklemeleri ve indirmeleri desteklenir.
- Mevcut en kapsamlı .NET görüntü bileşen setlerinden biri BMP, JPEG, PNG ve TIFF görüntü kodlamasını destekler.
- Yeni edinilen fotoğrafları mevcut TIFF dosyalarına iliştirme imkanı verir.
ASP.NET'te Taranmış PDF'lerden veya Diğer Görüntülerden Metin Okuma (Optik Karakter Tanıma)
Müşteriler bugünün hızlı tempolu dünyasında işlerin hızlı tamamlanmasını isterler. Acil projelerle müşteriler sıklıkla bize ulaşır. Teknolojimiz, proje resim içeren kağıtların taranmasını içeriyorsa, bir resmin içeriğini basitçe tanıyabilir ve metne dönüştürebilir. Optik Karakter Tanıma (OCR), firmalarınıza zaman ve para kazandırır, aynı zamanda veri giriş hatalarını da azaltır.
IronOCR Kullanımı
IronOCR, OCR dönüşümlerini gerçekleştirmek için IronOcr.IronTesseract sınıfını kullanır.
İnce bir örnekte, bir görüntüden metin okumak ve sonucunu otomatik olarak bir dizi olarak geri döndürmek için IronOcr.IronTesseract sınıfını kullanıyoruz.
// 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 yüzde yüz doğrudur:
IronOCR Basit Örneği
Bu basit örnekte, C# OCR kütüphanemizin bir PNG'den metin okuma doğruluğunu test edeceğiz
Görüntü. Bu çok basit bir test, ancak öğretici ilerledikçe işler daha da karmaşık hale gelecek.
Hızlı kahverengi tilki tembel köpeğin üzerinden atlar
Yüzeyde basit görünse de, yüzeyin arkasında karmaşık bir davranış gerçekleşiyor: hizalamayı, kaliteyi ve çözünürlüğü kontrol eden, özelliklerine bakan, OCR motorunu optimize eden ve sonunda metni bir insan gibi okuyan bir görüntü taraması.
OCR, bir makine için zor bir görevdir ve okuma hızları insanınkine yakın olabilir. Başka bir deyişle, OCR hızlı bir işlem değildir. Ancak bu durumda, kesinlikle doğrudur.
Çoğu gerçek dünya senaryosunda, geliştiriciler projelerinin mümkün olduğunca hızlı çalışmasını isteyeceklerdir. Bu senaryoda, IronOCR eklentilerinin ad alanındaki OcrInput ve IronTesseract sınıflarını kullanmanızı öneririz.
OcrInput ile bir OCR görevinin tam özelliklerini ayarlayabilirsiniz, örneğin:
- JPEG, TIFF, GIF, BMP ve PNG kullanılabilecek birkaç görüntü formatıdır
- PDF belgelerini tamamını veya kısımlarını içe aktarma
- Görüntünün kontrastını, çözünürlüğünü ve boyutunu geliştirme
- Döndürme, tarama gürültüsü, dijital gürültü, eğrilik 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
- Bir ekran görüntüsüne, bir parçaya veya tüm belgeye bakıyorsak belge türünü belirtin
- Barkod tanıyın
- Aranabilir PDFler, Hocr HTML, bir DOM ve Dizi OCR sonuçları seçenekleridir
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
%100 doğrulukla orta kaliteli bir taramada bile bunu kullanabiliriz.
TIFF gibi taranmış bir görüntüden metin (ve istenirse barkodlar) okumanın oldukça kolay olduğunu görebilirsiniz. Bu OCR görevinin doğruluğu %100'dür.
Sonraki olarak, aynı sayfanın çok daha düşük kaliteli bir taramasını, düşük DPI ve aşırı bozulma ve dijital gürültü ile birlikte özgün kağıttaki hasarlarla deneyeceğiz.
Bu nokta, IronOCR'nin diğer OCR kütüphaneleri gibi Tesseract ile karşılaştırıldığında parladığı yerdir, ve diğer OCR projelerinin, dijital olarak %100 OCR doğruluğu elde etmek için oluşturulmuş, gerçek dünya taranmış görüntülerini tartışmaktan kaçındıkları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üyu düzeltmek icin Input.Deskew() eklemeden %52,5 dogruluga ulasiyoruz. Bu yeterince iyi değil.
Input.Deskew() eklemek, yüksek kalitede tarayin OCR'ine neredeyse eşdeğer olarak %99,8 doğruluğa ulaştırır.
Dynamsoft OCR Kullanarak
JavaScript'te TWAIN tarama ve istemci tarafında OCR yapmak için Dynamic Web TWAIN kullanımıyla ilgili bazı kod parçacıkları sunacağız.
Görüntüleri Tara
Dynamic Web TWAIN'in basit API'lerini kullanarak tarama ayarlarını değiştirebilir ve TWAIN tarayıcılardan görüntüler alabilirsiniz.
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
Müşteri tarafında OCR için OCR Professional modülünü kullanmak için başlığa ocrpro.js eklemeniz ve OCR Pro DLL dosyasını indirmeniz gerekecektir.
<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ını düzenleyin:
// 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ıyın
JS OCR tanıma API'sini kullanarak taranmış görüntülerden metin çıkartmak, aşağıdaki kodu eklemek kadar basittir.
// 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, OCR için görüntüleri kırpma çözümleri sunar.
IronOCR ile kırpılmış bölgeleri okuma
Iron'un Tesseract OCR dalı, aşağıdaki kod örneğinde gösterildiği gibi, görüntülerin belirli bölgelerini okuma konusunda yeteneklidir.
Bir görüntünün piksel cinsinden okunacak tam bölgesini tanımlamak için System.Drawing.Rectangle kullanıyoruz.
Standart bir form dolduğunda ve içeriğin yalnızca bir kısmı durumdan duruma değiştiğinde bu gerçekten işe yarayabilir.
Bir Sayfanın Bir Bölümünü Tarama: Hız ve doğruluğu artırmak için bir belgeden okunacak bir bölgeyi belirlemek 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, %41 hız artışı sağlarken aynı zamanda daha spesifik olmamıza olanak tanır. Bu, faturalar, makbuzlar, çekler, formlar, gider talepleri gibi benzer ve tutarlı belgeleri içeren .NET OCR uygulamaları için son derece değerlidir.
PDF okurken, İçerik Alanları (OCR kırpması) 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 dahil etmemiz gerekecek.
-
Araçlar bölümüne gidin -> Araç Kutusu Öğelerini Seçin, ardından .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 Öğe'yi seçin... ardından OCR kaynaklar dizininden gerekli öğeleri ekleyin.
LoadImage düğmesine tıklama kodu bu şekildedir:
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
Uygulamanın görünümü bu şekildedir:
Görüntü Performansı Ayarlama
Girdi 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 200 dpi gibi harika bir hedef değere sahip, OCR çıktısı o kadar hızlı ve doğru olur.
Dynamsoft OCR için Görüntü İşleme Teknikleri
Kredi kartı numarasını telefonumuzla taramak veya kağıt belgelerden metin çıkartmak gibi çeşitli durumlarda OCR kullanmamız gerekiyor. Dynamsoft Label Recognition (DLR) ve Dynamic Web TWAIN (DWT) OCR yeteneklerini içerir.
Genel olarak iyi bir iş yapabilecek olsalar da, çeşitli görüntü işleme tekniklerini kullanarak sonuçları iyileştirebiliriz.
Gölgeyi Hafiflet/Kaldır
Zayıf aydınlatma, OCR sonucunu etkileyebilir. Sonucu iyileştirmek için, fotoğrafları beyazlatabilir veya gölgeleri görüntülerden kaldırabiliriz.
Ters Çevir
OCR motoru genellikle koyu renkli metin üzerinde eğitildiğinden, açık renkli metni bulmak ve tanımak daha zor olabilir.
Rengini tersine çevirirsek tanımak daha kolay olacaktır
Ters çevirme işlemi için DLR içinde 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ç veremeyebilir. Genel olarak, görüntü en az 300 dpi'ye sahip olmalıdır.
DLR 1.1'de harfleri büyütmenize izin veren bir ScaleUpModes parametresi var. Elbette, görüntüyü kendimiz de ölçekleyebiliriz.
Görüntüyü doğrudan okumak yanlış sonucu verir:
Görüntüyü x2 büyüttükten sonra, sonuç doğrudur:
Kaydırma
Metin biraz eğikse sorun değil. Ancak, aşırı eğikse, sonuç olumsuz etkilenir. Sonucu iyileştirmek için, görüntüyü kırpmamız gerekiyor.
Bunu başarmak için OpenCV ve Python'da Hough Line Transform kullanabiliriz.
Yukarıdaki görüntüyü kaydırmak için kod şu şekildedir:
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()
Algılanan çizgiler:
Kaydırıldı:
IronOCR için Görüntü İşleme Teknikleri
Girdi görüntüsünün kalitesi burada önemli değildir çünkü IronOCR bozuk belgeleri onarma konusunda mükemmeldir (bu, zaman alıcıdır ve OCR işlerinizin daha fazla CPU döngüsü kullanmasına neden olacaktır).
TIFF veya PNG gibi daha az dijital gürültüye sahip giriş görüntü formatlarını seçmek, JPEG gibi kayıplı görüntü formatlarından daha hızlı sonuçlar verebilir.
Aşağıda listelenen görüntü filtreleri performansı önemli ölçüde artırabilir:
OcrInput.Rotate(double degrees)— Resimleri belirtilen derece sayisina gore saat yönünde döndürür. Negatif tamsayılar saat yönünün tersine döndürme için kullanılır.OcrInput.Binarize()— Bu görüntü filtresi, her pikseli yalnızca siyah veya beyaz yapar, arada başka bir renk yoktur. Metin-arka plan kontrastının çok düşük olduğu durumlarda OCR performansını artırabilir.OcrInput.ToGrayScale()— Bu görüntü filtresi, her pikseli koyu gri bir tona dönüştürür. OCR doğruluğunu artırması pek olası değildir, ancak hızı artırabilir.OcrInput.Contrast()— Otomatik olarak kontrasti artırır. Düşük kontrastlı taramalarda, bu filtre sıklıkla OCR hızını ve doğruluğunu artırır.OcrInput.DeNoise()— Bu filtre sadece parazit bekleniyorsa kullanılmalıdır.OcrInput.Invert()— Tüm renkleri tersine çevirir. Örneğin, beyaz siyah olur: siyah beyaz olur.OcrInput.Dilate()— Gelişmiş morfoloji. Genişletme, bir görüntüdeki nesnelerin kenarlarına piksel ekleme işlemidir. (Inverse of Erode)OcrInput.Erode()— Gelişmiş bir morfoloji fonksiyonu. Aşındırma, nesnelerin kenarlarından piksel kaldırma işlemidir. (Inverse of Dilate)OcrInput.Deskew()— Bir resmi dikey ve doğru bir şekilde döndürür. Tesseract'ın eğik taramalara toleransı 5 derece kadar düşük olabileceğinden, bu OCR için oldukça kullanışlıdır.DeepCleanBackgroundNoise()— Çok fazla arka plan parazitini çıkarır. Bu filtreyi sadece belgede çok fazla arka plan gürültüsü olduğunu bildiğinizde kullanın, çünkü berrak belgelerde OCR doğruluğunu azaltabilir ve oldukça CPU ağırlıklıdır.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 tespit edip çözecektir.
IronTesseract'ı kullanarak daha yüksek kaliteli taramalarda OCR'yi hızlandırmak isteyebiliriz. Hız arıyorsak, burada başlayabiliriz ve ardından doğru denge sağlanana kadar özellikleri yeniden açabiliriz.
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% oranında doğru — ancak %35 daha hızlı.
Lisanslama ve Fiyatlandırma
Dynamsoft Lisanslama ve Fiyatlandırma
Yıllık lisans. Tüm oranlar, ücretsiz yazılım güncellemeleri ve premium destek içeren bir yıl bakım içerir.
Dynamsoft iki tür lisans sunar:
Her müşteri aygıtı lisansı
"Bir Müşteri Aygıtı Lisansı", aynı kökene sahip (aynı protokol, aynı ana bilgisayar ve aynı port) bir uygulamaya, yazılımın özelliklerini tek bir müşteri aygıtından kullanmak için erişim sağlar. Etkin olmayan bir müşteri aygıtı, art arda 90 gün boyunca hiçbir yazılım yeteneğine erişmeyen bir aygıttır. Etkin olmayan bir müşteri aygıtının lisans koltuğu derhal serbest bırakılacak ve herhangi bir başka etkin müşteri aygıtı tarafından kullanım için uygun hale getirilecektir. İzin verilen maksimum lisans koltuk sayısına ulaştığınızda, Dynamsoft size acil durum kullanımı için müşteri aygıtı kotanızın ek %10'unu verecektir. Ek müşteri aygıtı kotası tükendiğinde, yeni müşteri aygıtları yeniden lisans koltukları kullanılabilir hale gelene kadar yazılıma erişemez ve kullanamaz. Müşteri aygıtı kotanızı aşmanın, hali hazırda lisanslanmış herhangi bir müşteri aygıtı üzerinde etkisi olmadığını unutmayın.
Her sunucu için lisans
Uygulamayı tek bir sunucuya dağıtmak için "Bir Sunucu Lisansı" gereklidir. Sunucular, fiziksel ve sanal sunucuları ifade eder ve üretim sunucuları, yedekleme sunucuları, test için de kullanılan geliştirme sunucuları, kalite güvence sunucuları, test sunucuları ve hazırlık sunucuları dahil ancak bunlarla sınırlı olmamak üzere tümü lisans gerektirir. Sürekli entegrasyon sunucuları (derleme sunucuları) veya yerel geliştirme sunucuları için ek lisanslar gerekmez. Sunucu başına lisans, yalnızca yerinde sunucu kurulumları için geçerlidir, bulut dağıtımları için değil.
Dynamsoft OCR için fiyatlandırma yıllık 1.249 USD'den başlar.
IronOCR Lisanslama ve Fiyatlandırma
Geliştiriciler olarak, hepimiz projelerimizi mümkün olan en az para ve kaynakla gerçekleştirmeyi istiyoruz — bütçeleme kritik öneme sahiptir. Hangi lisansın gereksinimlerinize ve bütçenize en uygun olduğunu belirlemek için grafiği inceleyin.
IronOCR, projenizin ihtiyaçlarını karşılamanıza ve yalnızca gereken kapsama alanı için ödeme yapmanızı sağlar, özelleştirilebilir geliştirici, proje ve konum sayılarıyla lisanslar sunar.
IronOCR lisans anahtarları, ürününüzü filigran olmadan yayınlamanızı sağlar.
Lisanslar $799 itibariyle başlamaktadır ve bir yıl boyunca destek ve güncellemeleri içerir.
IronOCR'yi ücretsiz olarak denemek için bir deneme lisans anahtarı da kullanabilirsiniz.
Sonuç
Mac, Windows, Linux, Azure OCR ve Docker üzerinde Tesseract OCR, IronOCR for C# ile mevcuttur. .NET Framework 4.0 veya daha üstü, .NET Standard 2.0+, .NET Core 2.0+, .NET 5, macOS için Mono ve Linux, macOS için Xamarin gibi çoklu platform geliştirme örnekleridir. IronOCR, tüm ana görüntü ve PDF formatlarından metin, barkod ve QR kodlarını okumak için en son Tesseract 5 motorunu da kullanır. Bu kütüphane, birkaç dakika 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'leri, herhangi bir OCR taramasında aranabilir PDF belgesi veya XHTML olarak kaydedebilir. Düz metin, barkod verileri ve paragrafları, satırları, kelimeleri ve karakterleri içeren bir OCR sonuç sınıfı, veri çıkış seçenekleri arasındadır. Arapça, Çince, İngilizce, Fince, Fransızca, Almanca, İbranice, İtalyanca, Japonca, Korece, Portekizce, Rusça ve İspanyolca dahil olmak üzere 125 dilde mevcuttur, ancak özel dil paketlerinin de oluşturulabileceğini unutmayın.
Dynamic .NET TWAIN OCR eklentisi, WinForms ve WPF uygulamalarında C# veya VB .NET ile kullanabileceğiniz hızlı ve güvenilir bir .NET bileşenidir. Dynamic .NET TWAIN'in görüntü yakalama modülünü kullanarak belgeleri tarayabilir veya web kameralarından fotoğraf çekebilir ve ardından görüntülerdeki metni metin, aranabilir PDF dosyaları veya dizlere dönüştürmek için OCR yapabilirsiniz. İngilizcenin yanı sıra, Arapça ve birden fazla Asya dili de sunulmaktadır.
IronOCR, Dynamsoft OCR'den daha iyi lisanslama sunar; IronOcr, $799 ile bir yıl ücretsiz başlarken, Dynamsoft $1249'dan başlayarak ücretsiz deneme sunar. IronOCR, birden fazla kullanıcı için lisanslar sunarken, Dynamsoft'ta yalnızca kullanıcı başına bir lisans alırsınız.
Her iki yazılım seti de barkodların, görüntüden metine ve görüntüden metine OCR okumalarına en iyi performansı sunmayı hedeflerken, IronOCR, oldukça kötü durumda olan görüntülerde dahi ışığını parlatmasıyla öne çıkmaktadır. Otomatik olarak en iyi OCR sonuçlarını elde etmek için karmaşık ayar yöntemlerini devreye sokar. IronOCR ayrıca, size en uygun sonuçları az veya hiç hata ile vermek için Tesseract'ı kullanır.
Iron Software ayrıca müşterilerine ve kullanıcılarına tüm yazılım paketini sadece iki tıklama ile alma seçeneği sunmaktadır. Bu, Iron Software paketindeki iki bileşenin fiyatına, şu anda tüm beş bileşeni ve kesintisiz desteği alabileceğiniz anlamına gelir.
Sıkça Sorulan Sorular
C# kullanarak metin görüntülerini dijital formatlara nasıl dönüştürebilirim?
Metin görüntülerini dijital formatlara dönüştürmek için C#'ta IronOCR'u kullanabilirsiniz. IronOCR, düşük kaliteli taramaları otomatik olarak keskinleştirme ve düzeltme yöntemleri sağlar, bu da çeşitli görüntü formatlarını metne dönüştürmek için idealdir.
IronOCR'un düşük kaliteli taramaları işlemek için sunduğu avantajlar nelerdir?
IronOCR, düşük kaliteli taramaları çözünürlük ve kontrastı artırarak eğiklik, bozulma ve arka plan gürültüsünü azaltarak otomatik olarak iyileştirir, bu da metin tanıma doğruluğunu artırır.
Çapraz platform uygulamaları için hangi OCR kütüphanesi daha iyidir?
IronOCR, Xamarin ve Azure gibi ortamları desteklediği için çapraz platform uygulamaları için uygundur, bu da çeşitli platformlarla çalışan geliştiricilere esneklik sağlar.
IronOCR hangi görüntü formatlarını destekliyor?
IronOCR, çeşitli OCR uygulamaları için çok yönlü bir hale getiren geniş bir görüntü formatları yelpazesini destekler. Görüntüleri ve PDF belgelerini işleyebilir, bu da çeşitli giriş kaynaklarını işleme esnekliği sağlar.
OCR teknolojisi işletmelerde belge yönetimine yardımcı olabilir mi?
Evet, OCR teknolojisi fiziksel belgeleri dijitalleştirerek önemli ölçüde belge yönetimine yardımcı olabilir, bu da belgelerin aranabilir ve düzenlenebilir hale gelmesini sağlar. Bu, manuel veri girişi işlemini azaltır, hataları minimuma indirir ve erişilebilirliği artırır.
Dynamsoft OCR, cihazlardan görüntü alımını nasıl gerçekleştirir?
Dynamsoft OCR, TWAIN uyumlu cihazlardan ve web kameralarından görüntü alımını destekler, toplu tarama ve etkili görüntü işleme için tarayıcı özelliklerinin değiştirilmesine olanak tanır.
IronOCR'un diğer kütüphanelere göre fiyatlandırma seçenekleri nelerdir?
IronOCR, geliştiricilerin, projelerin ve konumların sayısına göre ihtiyaçlarına göre özelleştirilebilen lisanslar sunar, bu da bazı diğer kütüphanelere göre daha esnek ve maliyet-etkin seçenekler sağlar.
OCR teknolojisi kullanılırken karşılaşılan yaygın sorunlar nelerdir?
OCR teknolojisiyle ilgili yaygın sorunlar, düşük çözünürlüklü görüntüleri işleme, bozulma ve farklı metin yazı tipleriyle başa çıkmayı içerir. Ancak, IronOCR gibi kütüphaneler, bu sorunları ele alacak yerleşik özelliklere sahiptir, bu da OCR doğruluğunu artırır.



