C# Resim Üzerindeki Yazıyı Okuma – OCR (Optical Character Recognition, Optik Karakter Tanımlama)

C# ile OCR uygulaması yapmak için Microsoft Document Imaging uygulamasının API’sini kullanabiliriz.
Microsoft Office Document Imaging – Microsoft Office 2003 ve sonraki sürümlerinde yer alan bir uygulamadır.
Microsoft Office DOcument Scanning ile taranan dökümanların düzenlenmesi,yeni dökümanın taratılması,taratılan dökümanın word dosyasına dönüştürülmesi ve döküman içerisinde metin araması yapmamamızı sağlayan uygulamadır.

OCR ne iş yapar ?

Dijital ortamda bulunmayan tarayıcı veya fotoğraf makinesi ile çekilmiş bir resimdeki yazıların (Yazıcı çıktısı,el yazısı,daktilo,gazete,dergi) resimlerinin bilgisayarda düzenlenebilir bir metin dosyası haline getirilmesini sağlar.Bunun dışında örneklendirmek gerekirse bir çok sitede bulunan güvenlik resimlerinin kırılması ve yoldan geçen araçların plakalarının tanınmasıdır.Bazı otoparklarda yada EDS (Elektronik Denetleme Sistemi) gibi sistemlerde kullanılır.

Daha farklı bir senaryodan bakmak gerekirse ;
Elimizde bir teknoloji dergisinde yer alan bir makale var.Ve bu makaleyi Word’e aktararak bazı düzenlemeler yapmanız gerekiyor.
Dergiyi tarayıcıdan taratmanız tam olarak işinizi çözemicektir.Tarayıcı derginin resmini oluşturacaktır.
Bu taranmış resim üzerindeki karakterleri ve kelimeleri okuması için OCR’a ihtiyacınız olacak.

esquema_ocr

Visual Studio ile bir form hazırlayarak örnek uygulamaya geçelim.İlk olarak oluşturduğunuz projeye referans olarak COM sekmesinden Microsoft Office Document Imaging 12.0 Type Library’i eklemeniz gerekmektedir.
Bu noktada eğer COM sekmesi altında Microsoft Office Document Imaging 12.0 Type Library görünmüyorsa sırasıyla aşağıdaki işlemleri gerçekleştirin.

– Başlat > Çalıştır > appwiz.cpl
– Programlar listesinde, yüklenen 2007 Office sürümü seç.
– Değiştire tıkla.
– Özellik Ekle veya Kaldır diyerek daha sonra da Devam tıkla.
– Office Araçları açılır.
– Microsoft Office Document Imaging açılır.
– Tarama, OCR ve Dizin Oluşturma Hizmetleri Filtresi tıkla sonra Bilgisayarımdan Çalıştır tıkla.
– Devama tıkla ve işlem bitti.

Uygulamada Windows Form’a 1 pictureBox ,1 richtextBox ve 2 Tane Buton Ekledik
Aşağıdaki gibi değişken tanımlamalarını yaptık.

MODI.Document documan = new MODI.Document();
string resimYolu = "";

OpenfileDialog ile Resim yüklemek için ResimYukle methodunu yazdık.

void ResimYukle()
{
 openFileDialog1.FileName = "";
 openFileDialog1.Filter = "Resim Dosyaları|*.jpg; *.png; *.bmp; *.jpeg; *.PNG;";
 if (openFileDialog1.ShowDialog() == DialogResult.OK)
 {
 resimYolu = openFileDialog1.FileName.ToString();
 pictureBox1.Image = Image.FromFile(resimYolu);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
 }
 }

Button1’in (GÖZAT butonu)click eventinde ResimYukle fonksiyonunu çağırdık.

private void button1_Click(object sender, EventArgs e)
{
ResimYukle();
}

Button2’nin click eventinde MODI.Document nesnesinin Create methodunu kullanarak hangi resimden yazı okuyacaksak o resimin yolunu verdik.
Ardından resim üzerindeki karakter tanıma işlemini gerçekleştiren OCR Methodunu uygun parametreleri vererek çağırdık.
Döküman içerisindeki image’lar için bir foreach döngüsü kurarak Imageların Layout Property’sindeki nesneyi MODI.Layout nesnesine atıyoruz.
Richtextbox’ın Text’ine MODI.Layout nesnesinin Text property’sini setliyoruz.
Son olarak MODI.Document nesnesini kapatıyoruz.

try
{
documan.Create(resimYolu);
documan.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
foreach (MODI.Image resim in documan.Images) 
{
MODI.Layout plan = resim.Layout;
richTextBox1.Text = plan.Text;
}
documan.Close();
}
catch (Exception hata)
{
MessageBox.Show(hata.Message.ToString(), "Hata oluştu..!", MessageBoxButtons.OK, MessageBoxIcon.Error);
 }

 

7 thoughts on “C# Resim Üzerindeki Yazıyı Okuma – OCR (Optical Character Recognition, Optik Karakter Tanımlama)

  1. Merhaba resimdeki yazıyı okuyor fakat türkçe karakterde sıkıntı var ğ,ü gibi karakterler gelmiyor MODI.MiLANGUAGES.miLANG_ENGLISH seçimini Türkçe yaptım OCR:Bad Language hatası aldım.Yardımcı olabilir misiniz.Teşekürler.

  2. Merhaba,
    pictureBox1.Image = Image.FromFile(resimYolu); //Satırında Image Kısmının altını çizip şu şekilde bir uyarı veriyor, nedenini bulamadım yardımcı olursanız eğer sevinirim;

    ‘Image’ is an ambiguous reference between ‘System.Drawing.Image’ and ‘MODI.Image’

    Teşekkürler.

  3. Merhaba,
    Code behind kısmında en üstte bulunan namespace’lerin arasına “using System.Drawing;” satırının eklenmiş olduğundan emin olunuz,eğer ekli değilse namespace ekleyerek sorunu çözebilirsiniz.

  4. Ben değiştir diyorum araçlardan seçiyorum devam diyorum kurulum tamamlandı diyor. Tamama basıp çıkıyorum sizin dediğiniz gibi yer gelmiyor yardımcı olabilirmisiniz.

  5. Merhaba Bedirhan,”değiştir” dedikten sonraki ekranla ilgili bir ekran görüntüsü yazıya ekleyerek tekrar güncelledim.Örnek ekranı inceleyebilirsiniz.

  6. Merhaba Hocam,
    2013 Office ve 2013 Visual Studio kullanıyorum.
    Microsoft Office Enterprise kısmında office document imaging kısmı bulunmuyor. Buna karşılık Optik Karakter Tanıma (OCR) diye bir kısım var. Burayı bilgisayarımda çalıştır yaparak devam edeyim dedim. Ama buna rağmen referanslar arasında Microsoft Office Document Imaging Libraryi çıkmıyor.
    Yardımcı olursanız çok memnun olurum.
    Saygılarımla.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir