Makaledeki örnek uygulamada bir resim dosyasından resimdeki yazıyı okuyup, form üzerindeki RichTextBox'a yazdıracağız. İlk olarak yapmamız gereken yeni bir proje oluşturup, referans ekleme ekranının COM sekmesindeki Microsoft Office Document Imaging 12.0 Type Library'i projemize referans olarak ekleyelim:
Ardından da uygulama formunu aşağıdaki gibi dizayn edelim:
public partial class Form1 : Form { MODI.Document insDocument; public Form1() { InitializeComponent(); insDocument = new MODI.Document(); }
private void btnGetImage_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); if (openFileDialog1.FileName != "") { txtImagePath.Text = openFileDialog1.FileName; } }
private void btnGetText_Click(object sender, EventArgs e) { insDocument.Create(txtImagePath.Text); insDocument.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); foreach (MODI.Image insImage in insDocument.Images) { MODI.Layout insLayout = insImage.Layout; txtImageText.Text = insLayout.Text; } insDocument.Close(false); } }
İlk olarak formun constructor'ında MODI.Document nesnesinin bir instance'ını aldık. btnGetText butonunun click event'inde ise ilk önce instance'ını aldığımız MODI.Document nesnesinin (insDocument) Create metodunu yazısını okuyacağımız resmin yolunu vererek çağırdık. Ardından da resimdeki karakter tanıma işlemini yapacak olan OCR metodunu aşağıdaki parametrelerini vererek çağırıyoruz:
LangId: Karakter tanıma işleminin yapılacağı dilin id'si. MODI.MiLANGUAGES enum'unun değerlerinden biri olabilir. OCROrientImage: Karakter tanıma işlemi yapılırken sayfanın yatay veya düşey yönelimde olduğunun otomatik olarak algılanıp algılanmayacağı. Default değeri true'dır. OCRStraightenImage: Karakter tanıma işlemi yapılırken sayfadaki ufak dikey yamuklukların düzeltilip düzeltilmeyeceği. Default değeri true'dır.
Ardından dökümanın içindeki image'lar içinde foreach ile dönerek Image nesnesinin Layout property'sindeki nesneyi yeni oluşturduğumuz MODI.Layout nesnesine atıyoruz. Sonra da formdaki richtextbox'ın Text'ine MODI.Layout nesnesinin Text property'sini atıyoruz. İşimiz bittikten sonra da MODI.Document nesnesinin Close metodunu çağırıyoruz. Şimdi kodu aşağıdaki resim için çalıştırıp deneyelim:
Görüldüğü gibi resimdeki yazıları alma işlemi oldukça başarılı bir şekilde tamamlandı.
Son olarak MODI.Layout nesnesinin iki property'sinden bahsetmek istiyorum. Words property'si taranan resimdeki her kelimenin taşındığı bir array'dir. Yani resimdeki tüm yazıya örnek uygulamada da yaptığımız gibi Layout nesnesinin Text property'si ile erişebilirsiniz. Text içindeki her bir kelimeye erişmeniz gerektiği durumlarda ise Words property'sini kullanabilirsiniz. Words array'i Word tipinde nesneleri taşır. Bahsetmek istediğim ikinci property de Word nesnesinin RecognitionConfidence property'si. Adından da anlaşılabileceği gibi RecognitionConfidence taranan bir kelimenin hatasız taranmış olma olasılığını verir. 0 ile 999 arası integer değer alır.
Umarım faydalı olmuştur.
Işıl Orhanel www.isilorhanel.net