Mavis, Eskişehirdeki Arçelik Buzdolabı İşletmesinde, Karakter Okuma (OCR) çözümünü devreye almak üzere çalışmalara başladı.
Mavis olarak OCR (Optik Karakter Tanıma) üzerine hayli gelişmiş bilgi birikimi ve tecrübemiz ile kısa sürede sistemi devreye alacağımızı düşünüyoruz. Proje, daha önce Oyak-Renault ta kurmuş olduğumuz dingil üzerindeki yazıyı okuma projemize benzemekte olup kendine özgü bazı zorluklar içermektedir. Bunlar;
- Okunacak karakterler bombeli (konkav) bir yüzey üzerinde yer almaktadır
- Okunacak karakterler nokta vuruşlu bir makina ile yazılmıştır
- Farklı modeller için karakterlerin yeri değişebilmektedir
gibi sayılabilir.
Mavis olarak, alınan görüntüler ve geliştirilen algoritmanın ekran görüntüleri aşağıdaki gibidir
Kompresörün yüzeyinin uEye kamera ile alınmış orijinal resmi. Resim alınmadan önce demo amaçlı olarak gidildiğinden, aydınlatma kullanılmamıştır. Kırmızı 10 x 10 led array kullanılarak aydınlatılması düşünülen yüzeyde yazı kalitesinin daha iyi elde edileceği hesaplanmaktadır.
Görüntü işleme teknikleri kullanarak önce önce filtreleme (karakteri meydana getiren noktalar ile resimdeki lekelerin ayıklanması) yapılır, sonra noktalar birleştirilir daha sonra birleşmiş noktalar karakter meydana getirecek şekilde genişletilir (karakterler ortaya çıkartılır) Resimde her bir karakter ayrı bir renk ile gösterilmiştir.
Son olarak, iyi bir OCR yapabilmek için normalde (insan gözünde de olduğu gibi)beyaz zemin üzerinde siyah karakterlere dönüşüm yapılması gerekir. Yapay olarak (artificial) siyah beyaz binary (binImage) resim oluşturulur. Oldukça temiz ve filtrelenmiş olarak görünen bu resim artık kolaylıkla okunabilir (OCR edilebilir) OCR edilmiş sonuç ekrana yeşil olarak yazılmıştır.
Proje uygulama aşamasında, sistemin tetiklenmesi, aydınlatmanın devreye girmesi, işlem sonucunun hatta bildirilmesi (PLC işlemleri), veritabanına kaydetme vb. aşamalar da olacaktır. Mavis olarak benzer sistemleri kurduğumuzdan gerek yazılım, gerek donanım olarak tüm bileşenler hazır olarak bulunmaktadır.
Projeye ilişkin en sadeleştirilmiş HALCON kodunu aşağıda veriyorum. Aradaki kontrol ifadelerini (if), gelişmiş seçim parametrelerini, OCR train kodlarını ve try-catch yapı bloklarını kaldırdım. Olabildiğince yalın hale getirdim ki herhangi bir geliştirici (Halconist) tarafından okunması durumunda en anlaşılır şekilde olsun 😉 (Programın yine de düzgün ve sağlıklı olarak çalışmaktadır)
Aşağıdaki kodun çalışması için gerekli olan özgün resmi sayfanın en altında OzgunResim olarak bulabilirsiniz.
read_image (Image, 'C:/Projects/Demos/Arcelik/1.bmp')
*draw_rectangle1 (3600, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, 590, 400, 792, 705)
reduce_domain (Image, Rectangle, ImageReduced)
threshold (ImageReduced, Regions, 40, 255)
dilation_circle (Regions, RegionDilation, 3)
union1 (RegionDilation, RegionUnion)
smallest_rectangle1(RegionUnion, Row11, Column11, Row21, Column21)
connection (RegionUnion, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 90, 99999)
sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'row')
copy_obj(SortedRegions, ObjectsSelected, 1, 6)
get_image_pointer1 (ImageReduced, _, _, Width, Height)
region_to_bin (SortedRegions, BinImage, 0, 255, Width, Height)
read_ocr_class_mlp ('Industrial.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, BinImage, OCRHandle, Class, Confidence)
dev_set_color('green')
set_display_font (3600, 24, 'verdana', 'true', 'false')
set_tposition (3600, Row21+20, Column11)
write_string (3600, Class)
Özgün Resim (HALCON kodunda kullanılan)