HALCON ile OCR Temelleri

OCR projeleri, diğer görüntü işleme uygulamalarına daha fazla zorluklar içermektedir. HALCON 10, OCR ile ilgili gayet gelişmiş fonksiyonlar sunmakla birlikte (get_text_*) çoğu kez iş, kod yazma ile çözülmektedir.

OCR uygulamalarındaki zorluklar

  • Tüm karakterler düzgün olarak seçilebilmelidir. Homojen olmayan aydınlatmalar, parlayan kısmi yerler sıradan bir görüntü işleme uygulamasında kolaylıkla üzerinden gelinebilen sorunlar iken, OCR uygulamalarında baş belası olabilmektedir.
  • Birbirine çok yakın karakterleri ayırt edebilmek (B, 8, D, 0 vb…) çoğu kez sorun olabilmektedir
  • Değişken font yükseklikleri, genişlikleri, iç içe geçmiş karakterler vb. sorun yaratabilmektedirÖzetle, bu liste uzar gider. Tüm bu zorluklarına rağmen, kişisel olarak en çok zevk aldığım uygulamalar, genelde OCR uygulamaları olagelmiştir.

Bu makalede, baştan sonra bir OCR uygulamasını, temel bileşenleri ile açıklamak istiyorum. Yeni başlayanlar için, -başlıkta belirtildiği gibi- “temel” ya da başlangıç olabilmesi açısından…

OCR uygulamasının anatomisi

Elimizde üzerinde yazılan karakterleri okuyacağımız bir resim var diyelim. İlk düşünmemiz gereken şey, HALCON açık zemin üzerinde koyu karakterler bekler (tıpkı gerçek dünyadaki dokümanlar gibi) eğer elimizdeki resim bunun tersi ise, en kolayından invert_image ile açık-koyu renkleri yer değiştirmeliyiz.

Sonra düşünmemiz gereken, HALCON ile yüklü gelen OCR karakterlerini mi kullanacağız, yoksa kendi karakterlerimizi mi öğreteceğiz? Hazır olanları kullanmak tabii ki en kolayıdır. Hem öğretmeye ihtiyaç olmaz, hem de her tür yükseklik, genişlik için çalışırlar. HALCON standart olarak gayet güzel fontlar ile birlikte gelir, buna rağmen bu fontlar her zaman isteyen sonuçları vermeyebilir. Bazen son derece net olarak görebildiğiniz bir karakter, HALCON tarafından hatalı yorumlanır. Bu gibi ilginç durumlarla sık sık karşılaşıyorsanız, kendi karakter setinizi öğretmenin vakti gelmiş demektir. (Bunu da ayrı bir makalede anlatmayı düşünüyorum)

Son olarak, OCR edip okutacağımız yazının bir kuralını biliyor muyuz? 3 rakam, arkasından 2 digit, sonra XYZ karakterleri geliyor… gibi. Ya da bir checksum içeriyor mu? (barkodlarda olduğu gibi, son karakter, öncekilerin toplamının bir sayıya bölünmesinden kalan vb. gibi) Ya da, okutacağımız yazı, belirli bir listenin üyesi mi? (mesela, türkiyenin bir ili ise, bir yere tüm iller girilir ve lexicon kullanımı ile bu listeden arattırılır) vb. İşimn güzel yanlarından biri, HALCON her bir karakteri hangi kalitede okuduğunu bize söyler. Eğer emin değilsek, yeniden resim alıp, yeniden denetme gibi işlemlere girilebilir. Tabii zamanımız yeterli ise …

(Yakın zamanda, en basitten en detaylıya kadar, bol miktarda özgün örnek uygulama vereceğim, ileride bu sayfayı tekrar ziyaret etmenizi öneririm, şimdilik yeni makalelere geçiyorum)