![]() | |
C# ile OCR İşlemleri | 01.09.2009 17:49:00 |
| Kategori : C# & VB.Net Özet : Bu makalemde sizlere Microsoft Document Imaging uygulamasının API'sini kullanarak basit bir OCR uygulamasını nasıl yazabileceğinizden bahsedeceğim. Bu uygulamayı yazarken kullanacağımız API'nin çeşitli metodlarını da inceleyeceğiz. | |
|
Merhabalar,
Bu makalemde sizlere Microsoft Document Imaging
uygulamasının API'sini kullanarak basit bir OCR uygulamasını nasıl
yazabileceğinizden bahsedeceğim. Bu uygulamayı yazarken kullanacağımız API'nin
çeşitli metodlarını da inceleyeceğiz.
Microsoft Office Document Imaging Microsoft Office 2003 ve
sonraki sürümlerinde yer alan ve kısayolu Başlat menüsündeki Office program
klasörü altındaki Tools klasöründe bulunan bir uygulamadır. Microsoft Office
Document Scanning ile taranmış dökümanların editlenmesi, yeni döküman taranması,
taranan dökümanların Word dosyasına çevrilmesi ve döküman içinde metin arama
gibi birçok işlemi yapan bir uygulamadır.
OCR ingilizce Optical Character Recognition teriminin
kısaltmasıdır. Türkçe'ye ise Optik Karakter Tanıma olarak çevirmek uygun
olacaktır. OCR çalışma prensibi olarak Örüntü Tanıma (pattern recognition),
yapay zeka gibi gelişmiş teknolojilerin bileşkesidir, Image Processing başlığı
altında da incelenmektedir. Temelde bilgisayar ortamında bulunmayan genellikle
tarayıcı veya fotoğraf makinası gibi bir cihazla resim formatına çevrilmiş
yazıların (print çıktısı, el yazısı, daktilo ile yazılmış, basılı yayın organı)
resimlerinin bilgisayarda düzenlenebilecek metin dosyaları haline çevrilmesi,
sayısallaştırılması olarak tanımlanabilir. Bilgisayar ortamında bahsettiğimiz bu
geniş alanın dışında kimi sitelerde bulunan güvenlik resimlerinin kırılması da
bu yönteme dayanmaktadır. Bunun bilgisayar ortamından farklı olan örneklerini
inceleyeceksek en güzel örneklerinden biri yoldan geçen araçların plakalarının
tanımlanmasıdır. Bu uygulama kimi otoparklarda veya EDS gibi sistemlerde
kullanılmaktadır. Bir diğer örnek ise kartvizitlerin taranarak Outlook'a
aktarıldığı uygulamalar olarak gösterilebilir.
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
private void
btnGetImage_Click(object sender,
EventArgs e)
private void
btnGetText_Click(object sender,
EventArgs e) İ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. 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 | |
Yazgelistir.com | |