Aygaz Tüplerinin Seri Numaralarının Okunması

Aygaz tüplerinin üzerinde bulunan Koloret numaralarının (seri no) okunması projesi başarıyla bitirildi.

2 robot ve 6 istasyonda tasların (tüpün üst yarısı) üretimi yapılıyor. Koloret numaraları OCR (Optical Character Recognition) yöntemleriyle okunuyor. Okunan seri numaraları ve istasyon bilgileri eşleştirilip veritabanında arşivleniyor. Hepsi tek bir hat üzerinde ve tek bir PC – kamera sistemi ile çözüldü.

aygazlar
aygaz tupleri

 

  • Sistemde fabrikanın domain sistemi üzerindeki bilgiler ile Login olunabiliyor ve program üzerinde kullanıcının yetkileri, domain üzerindeki yetkisine göre belirleniyor.
  • Sonuçlar ağ üzerindeki veritabanında saklanıyor. Yetkili kişiler raporlama yapabiliyor. Hangi robotun hangi seri numaralı tüpleri ürettiği görülüyor. Duruma göre tüpteki ve baskıdaki kaliteyi iyileştirmek adına görüntüler üzerinden analiz yapılıyor.
  • Görüntüler yine ortak ağ üzerindeki bir bölgeye kaydediliyor.

Yüzeyin işlenmesi ve yazının basılması her zaman çok kaliteli olmayabiliyor. Yüzey pürüzlü gelebilir, ışık güzelce dümdüz parlatmayabilir, yazılar birbirine yakın ya da yüzeyden taşmış gelebilir. Ek olarak taslar 360 derece dönük de gelebilir.

Karşılaştığımız binlerce örnekle de çalışarak doğru sonucu bulana kadar defalarca kontrol edip, sistemin yüksek hassasiyette okunmasını sağladık.

tas1 tas2 tas3

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)

OCR Öncesi Resmi Döndürme

HALCON ile OCR işlemine başlamadan önce, resmin üzerindeki yazının yatay eksene paralel olacak şekilde döndürülmesi gerekmektedir.

resmi döndürdükten sonra ise,

haline gelecektir. Burada, sadece resmi değil, resimle birlikte Region da döndürmek gerekeceğinden, rotate_image komutu yerine transformation komutları (HomMat2DRotate) kullanmak gerekecektir.

Region ile birlikte döndürme yapan HALCON kodu :

 

read_image (Image, 'C:/Users/Mustafa/Desktop/RenPics/142856.bmp')
*Region bulalım
var_threshold(Image, Region, 460, 240, 0.2, 2, 'light')
closing_circle(Region, RegionClosing, 15)
opening_circle(RegionClosing, RegionOpening, 45)
fill_up(RegionOpening, RegionFillUp)
connection(RegionFillUp, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','inner_radius'], 'and', [700000, 200], [2000000, 280])
*
shape_trans(SelectedRegions, RegionTrans, 'convex')

*Resim ve Region birlikte Rotate Edelim
area_center(RegionTrans, Area, Row, Column)
text_line_orientation (RegionTrans, Image, 180, -0.523599, 0.523599, OrientationAngle)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, -OrientationAngle, Row, Column, HomMat2DRotate)
affine_trans_image (Image, ImageRotate, HomMat2DRotate, 'constant', 'false')
affine_trans_region(RegionTrans, RegionAffineTrans, HomMat2DRotate, 'false')

Programın çalışmasını test etmek için kullanılabilecek 2 adet resmi buradan indirebilirsiniz

Arçelik Buzdolabı İşletmesinde Karakter Okuma (OCR)

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)

Karakter Okuma-OCR Çözümleri

Mavis, birçok farklı sektör ve farklı ürün için, endüstriyel ortamlarda %100 kontrol ve okuma esasına dayanan OCR uygulamalarına sahiptir. Mavis otomotivden metal sanayiye pek çok zorlu projede başarıyla kullanılan %100 kontrol esasına sahip çözümlere sahiptir.

Mavis OCR Çözümlerinin Genel Özellikleri

Mavis, VYP yazılımı üzerinde OCR işlemini de gerçekleştirebilmektedir. Tüm endüstriyel uygulamalarda başarıyla kullanılan VYP ile, tüm görüntü işleme işlemleri, PLC bağlantıları, veritabanı, resim kaydetme, güvenlik vb. gibi halihazırda var olan tüm özelliklerin üzerine, aşağıdaki OCR özellikleri de kazandırılmıştır.

  • Önceden yüklü hazır OCR fontlarını kullanabilme
  • Öğretebilme (Train işlemi)
  • Modele göre öğretebilme
  • Her türlü boy ve genişlikteki karakterleri okuyabilme
  • kabartma, kazıma, nokta vuruş gibi tüm yazım yöntemleri destekleme
  • Sonuçların ve resimlerin sınırsız kayıt imkanı
  • Her karakterin ve kelimeni ayrı ayrı OCR kalite yüzdesini görebilme
  • OCR işleminin sonucuna göre elektriksel (5-24V) sinyal üretebilme
  • Çok kısa sürede okuyabilme (100 ms. den az)

Örnek OCR Projesi : Şase No okuma

Araç şase numarasının okunması ve kontrolü, şase numarasının üretilmesi kadar önemlidir. Ülkemizde üretim yapan, dünyanın önde gelen otomotiv üreticilerinden olan firma, şase numarasını, mevcut üretim hattını değiştirmeden, okunabilme imkanını araştırmış ve nihayetinde Mavis ile çalışmaya karar vermiştir.

Projenin Zorlukları

  • kameranın Yaklaşık 2m. kadar yukarıdan bakmak zorunda olması
  • Şase numarasının aracın sol kapısına yakın zemin üzerinde, eğik yüzey üzerine yazılı olması (açılı)
  • Ortam aydınlatmasına müdahale edilemiyor olması (Hat halihazırda yürümekte)

Sistemin İşleyişi

Merkezi sistem, RS232 hattı üzerinden RK512 protokolüne uygun olarak, sıradaki aracın Vin numarasını iletir. Mavis VYP yazılımı bu numarayı hafızasına alır. Hat üzerinde yürüyen araca, Vin numarası yazıldıktan sonra, Vin yazıcı başlık ayrılır ve araç yürümeye devam ederek kamera altına gelir. Bir sensör yardımıyla aracın doğru pozisyona geldiği bilgisi alınır ve fotoğraf çekilir. Mavis VYP yazılımı OCR işlemini tamamlar ve hafızasındaki Vin numarası ile, OCR edilmiş Vin numarasını karşılaştırır. Hata olması durumunda hattı durdurur. Hata yok ise, tüm bilgileri ve fotoğrafı veritabanına kaydeder ve diğer aracı bekler.

OCR, Shape Matching – İstanbul Altın Borsası

İstanbul Altın Borsası, altın külçelerindeki logo ve seri numarasını okumak amaçlı görüntü işleme uygulaması olarak Mavis ile birlikte çalışmaya karar verdi. Resmi olarak onaylanan proje kapsamında

  • Külçeler üzerindeki seri numarasının okunması
  • Külçe üzerinde varsa logonun bulunup var olan firma logoları ile eşleştirilmesi
  • Kontrollerin konveyör üzerinde seri ve online olarak yapılması
  • Sonuçların veritabanına kaydedilmesi, ilgili programa veri gönderilmesi, elektriksel sinyal üretilmesi
  • Okumanın yapılamaması durumunda operatörün elle bilgi girişine izin verilmesi

gibi kontroller yapılacak.

Külçe altın üzerinden OCR yapmak oldukça zor bir iş olarak görünmektedir.

Projenin Zorlukları

  • Okunacak seri numarası her boyutta olabilir (değişken font boyu)
  • Seri numarası herhangi bir yazı tipinde olabilir (belirsiz font)
  • Seri numarası rakam ve karakterlerden oluşabilir (alfanümerik veya digit ayrımı yok)
  • Seri numarası külçe üzerinde herhangi bir yerde olabilir
  • Seri numarası, dikey yazılmış olabilir
  • Logo külçe üzerinde herhangi bir yerde olabilir
  • Logo herhangi bir şekil olabilir
  • Logo herhangi bir boyutta olabilir

Tüm bu zorluklara bakıldığında, sadece ülkemizde değil, küresel ölçekte bu projeye teklif verebilecek firma sayısının yok denecek kadar az olacağı görülecektir. Mavis, OCR konusundaki yoğun bilgi birikimini kullanarak projeyi başarabileceğine inanmaktadır.

Shape matching (görüntü eşleştirme) kısmında ise neredeyse HALCON tarafından sunulan tüm olanaklar kullanılacaktır. Descriptor based matching, component based matching, shape based matching ve diğer foundation fonksiyonları ilk kez bu projede hepsi aynı anda denenecektir.

Proje hakkında detay bilgiler ilerleyen günlerde verilecektir…

OCR ve VIN (Şase No) Okuma

Aracın gövdesi üzerine yazılı VIN numarasını, 2 mt. kadar yüksekten okuyup OCR etme işi, gerçektende zorlu bir çalışmadır. (Mavis olarak nadiren telaffuz ettiğimiz bir kelime olmakla birlikte) Ford’da ki proje, sadece VIN (şase numarası) okunması işlemi değil, yazım kalitesinin (ve tabi doğruluğunun) da tesbit edilmesi işlemi idi.

75 mm. lens, 1.3 MP ethernet kamera, elektronik balast ve fluoresan aydınlatma ile kurduğumuz setup sonrası aldığımız ilk fotoğraflar, düşündüğümüz kadar zorlanmayacağımız sonucunu çıkardı. Gerçektende HALCON default OCR fonksiyonları ile bile, %90-95 lik bir başarı yüzdesi yakalanmıştı. Kendi öğreteceğimiz karakter setleri ile, bu oran %100 e çıkarılabilirdi.

Bugün,  pratik – güçlü – akıllı bir OCR arayüzünü VYP içine entegre etmeyi düşünüyorum. Son zamanlarda OCR ile ilgili çok talep olduğundan tüm projelere uyarlanabilir olması gerekiyor.

Ford da PVS sisteminden gelen verilerin algılanması sağlandı. USB Seial converter şeklinde çalışan cihaz bazı sorunlar çıkarttı. İlginç olarak PCI slot üzerinden Serial connector olarak çalışan cihaz gayet düzgün çalıştı. (Kurulum seri portu olan bir PC de olduğu için böyle bir sorun yaşanmayacaktı)

Görünüşe göre, OCR işleminde de pek bir sorun çıkmayacak. Sonuçta başlangıçta hayli zor görünen, yürüyen hat üzerinden Şase no okuma işlemi düşündüğümüz kadar uğraştırmayacak.

Ya da biz artık OCR konusunda çok fazla yol katettik ve görüntü işleme ile ilgilenen birçok firmanın teklif bile vermek istemediği konular, bizim için neredeyse hazır çözüm durumunda.