Çoklu Karekod Okumada Gelişmiş Yöntemler – 1

Geliştirdiğimiz çoklu karekod okuma cihazı, gerçek zamanlı üretim ortamında (5 farklı ürün, 2 farklı hatta) test edilmiş ve %100 okuma başarısı sağlamıştır. Çoklu karekod okuma işlemi, kamera önündeki tüm karekodları okumayı gerektirdiğinden, gelişmiş okuma teknikleri kullanmak gerekmektedir. Üretim anında her bir karekod yazıldıktan sonra doğrulamasaı (verification) yapılmasına rağmen, shrink, koli, bandaj vb. yöntemlerle birleştirildiğinde, ışık açısı, kutunun dönmesi vb. sebeplerle bazı karekodlar okunamayacak ya da zor okunacak şekle gelebilir. Bu gibi durumlarda, “ileri” teknikler kullanarak, çoklu okuma işlemini %100 başarılı hale getirmek mümkündür.

Bu yazı  dizisinde, zaman buldukça Gelişmiş Yöntemler olarak adlandırdığım bu tekniklere ana başlıklar altında değinmeyi düşünüyorum. Özellikle ilaç üretimi yapılan yerlerde, okuma kalitesi kadar okuma hızı da çok önemlidir. (Karekod okuyacam diye üretimi durdurmanız/bekletmeniz düşünülemez) Dolayısıyla burada hem okuma kalitesini iyileştirecek hem de çok yüksek hızlarda okuma yapabilecek teknikler ele alınacaktır.

Mavis olarak, geliştirdiğimiz çoklu karekod okuma cihazı (konveyör, kameralar, sensörler, aydınlatma ekipmanı ve karekod basma makinasından meydana gelen cihaz) ile yaptığımız testlerde, 25 lik shrinkler için her bir shrink içindeki karekodları (her birinde 25 karekod olduğu durumda) okuma işlemi maksimum 1.5 sn. kadar sürmektedir. Okuma işlemi esnasında konveyör bu 1.5 sn. boyunca sabit olarak durdurulmakta, okuma işlemi bitince yeniden hareket ettirilmektedir. Konveyör çıkışında, okunan karekodlara ilişkin tek bir koli karekodu (master kod) üretilmekte ve kolinin / shrinkin üzerine basılmaktadır. Shrinkin konveyöre baştan girmesi ve en sondan çıkması arasındaki süre 4 sn. dir. (1.5 sn okuma, 2.5 sn. baştan sona yürüme)

Gelişmiş Yöntem – 1 : Okunamayan Karekodların tespiti ve sadece bu karekodları içerecek yeni bir resim alınarak yeniden denenmesi.

Karekodları içeren resim alındıktan sonra bazı durumlarda beklenen tüm karekodların okunamayabilir. Işık yansımaları, perspektif bozulmalar gibi etkenler, görüntünün tam orta noktasındaki karekod ile köşelerdeki karekodların farklı görünmelerine yol açabilir. Bu durumda, hemen pes etmeden önce çeşitli filtreler uygulayarak yeniden denemek gerekir. (Daha önceki bu makalede bahsedildiği gibi) Uygulanan filtrelere rağmen, hala bir ya da birkaç karekod okunamamış ise, şimdi yapılması gereken;

  1. Okunamayan Karekodların Yerlerinin Tespiti
  2. Tespit edilen yerlere göre AOI (Area of Interest) belirterek yeniden resim alınması
  3. Alınan resmin yeniden değerlendirilmesi

Burada püf noktası AOI belirtilmesidir. AOI, donanımsal olarak kameraya belirli koordinatların resmini al demektir. 10 Megapixel bir kamera ile çalışıldığını varsayalım. Tüm resmi almak 500 ms. kadar sürecekse, tek bir karekodun bulunduğu bölgenin resmini almak (değişebilir) 30-50 ms. kadar sürecektir. Böylece çok hızlı bir süre içinde sistem 2. 3. 4. denemelerini de yapar, gerçekten okunamayan bir kod var ise o zaman “NOK” olarak işaretler.

 

 

Yukarıdaki resimde sarı ile çerçevelenmiş tüm karekodların okunduğunu, kırmızı çerçeveli karekodun okunamadığını varsayalım. Okunamayan karekodun yeri HALCON find_barcode_2d fonksiyonu ile verilmekle birlikte, foundation fonksiyonları ile de belirlenebilir (Ben daha hızlı olması açısından, daha akıllı bir yapı kurarak, grid içinde okunamayan yerleri tespit eden bir yapı kurdum mesela) Şimdi yapılması gereken, bu karekodu içeren bir AOI kameraya bildirip yeniden fotoğraf almaktır.

AOI Bildirimi

open_framegrabber ('uEye', 1, 1, 0, 0, 0, 0, 'default', 8, 'default', -1, 'false', 'default', '1', 0, -1, AcqHandle)
count_seconds(T1)
grab_image(Image, AcqHandle)
count_seconds(T2)
set_framegrabber_param (AcqHandle, 'roi', [80,80,240,240])
count_seconds(T3)
grab_image(Image, AcqHandle)
count_seconds(T4)
FullGrabTime := (T2-T1)*1000
AOISetTime := (T3-T2)*1000
AOIGrabTime := (T4-T3) * 1000
close_framegrabber (AcqHandle)

Burada da kolayca görülebileceği gibi asıl işlem
set_framegrabber_param (AcqHandle, ‘roi’, [80,80,240,240]) fonksiyonu tarafından yapılmaktadır. Kendi makinamda bu kodu çalıştırdığımda; 1.3 MP kamera ile Full Grab (AOI verilmeden alınan resim) süresi : 118 ms.
set_frame_grabber için harcanan süre : 30 ms.
80-80-240-240 koordinatlarından resim almak için geçen süre : 20 ms.

olarak ölçüldü. Eğer 5 ya da 10 MP kamera kullanacak olsaydım, çok daha radikal zaman kazancım olacaktı.

Eş zamanlı olarak, her bir denemeden önce, kamera pozlama süresi bir miktar değiştirilebilir. Böylece ardışıl alınan her iki resmin birbirinden farklı olması sağlanır, varsa ışık parlamalarının önüne geçilmiş olunur.

Eğer işin içine bir miktar da bulanık mantık katılmak istenirse, pozlama miktarının değişimi sabit bir sayı ile değil, rastgele bir değer ile yapılabilir. Hala yeterli vaktimiz varsa, okuma metodolojisi “enhanced_recognition” ile zorlanır, pattern tolerance olarak “low” değeri denenir ve kod içinde yumuşatma fonksiyonu varsa mean_image yerine mean_curvature_flow ile değiştirilir. Threshold parametreleri yine bir miktar rastlantısal değerler ile ötelenir. İşlem tekrar denenir. (Bu şekilde sistem tarafından parametrelerin belirsiz bir şekilde zorlanarak tekrar denenmesi ve sonuçta başarıya ulaşılması, çoğu kez beni de heyecanlandıran bir durumdur. Mekanik bir sistem gibi OK/NOK vermek yerine, yapay zeka algoritması gibi çalışması, NOK durumunun üstüne gidilmesi ve beklenen süre içinde kalmak kaydıyla belirsiz zamanlarda OK diyebilmesi, test ya da demo esnasında gerçekten heyecanlı durumlara yol açabilmektedir.) Tam da bu arada, karekod okumaişlemi için timeout belirtmeyi de unutmamak gerekir. Yoksa HALCON hiç olmaması gerektiği kadar uzun oyalanabilir. Ben tüm proses için de timeout kullanıyorum. Şu alt programcığı 300 ms. içinde sonlandır gibi. (Birşeyler belirsiz olsun ama yine de sınırlar içinde kalsın)

Vakit buldukça burada karekod üzerine gelişmiş algoritmalardan bahsetmeye devam edeceğim. Bugünlük bu kadar. İletişime geçmek isteyenler için, info@mavis.com.tr mail adresini yeniden hatırlatayım…

Kameralı Çoklu Karekod Okumada Geliştirilmiş Filtreleme

Mavis, Kameralı çoklu karekod okuma programını daha da geliştirerek, çok zor yüzeylerden (metal, shrink, bandajlı paketler vb.) dahi yüksek kalitede karekod okuyabilecek hale getirdi.

Mevcut versiyonu ile çoklu karekod okumada hızı ve başarı oranı ile rakipsiz olan sistem, yeni görüntü işleme özellikleri ile desteklenerek daha akıllı hale getirildi.

Mavis VYP, kameralı çoklu karekod okuma programı, özellikle ilaç paketleri gibi, üzerinde çok sayıda karekod (datamatrix) içeren paketlerde, tek seferde tüm karekodları okumaya yarayan gelişmiş bir çözüm sunmaktaydı. Geçen süre içinde çeşitli ilaç firmaları ve ecza depolarına yapılan demolar, alınan numuneler ve üretim hattında çalışan uygulamalarda genel beklenti,  shrink yada bandaj olarak ifade edilen, paketlerin üzerinde naylon olmasının getirdiği bazı güçlüklere rağmen güvenilir ve hızlı bir okuma kalitesinin yakalanması idi.

Mavis; çok farklı sektörlerdeki görüntü işleme bilgi birikimini ve optik bilgisini birleştirerek ortaya kalıcı ve %100 tutarlı bir çözüm sunmaktadır. Bu çözümün anahtar bileşenleri Mavis tarafından geliştirilen özel soft aydınlatma ve Mavis tarafından kullanılan görüntü işleme kütüphanesi (HALCON) nin avantajlarıdır.

Çoğu kez, naylon ambalaj altından okuma yapmak güçlükler içermektedir. Naylon ambalajın kat yerleri, yansıma yaparak altta kalan karekodu kapatabilir, okunmasını engelleyebilir.

Mavis, geliştirdiği özel teknikler ile bu sorunu çözmüştür.

Geliştirilmiş Görüntü İşleme Tekniklerinin Karekodlara Uygulanması

Geliştirilmiş filtreleme kullanmadan, çoklu karekod okuma yapıldığında, karekodlar net olmadığı için %100 başarı sağlanamamaktadır. Gerek shrink (naylon) ambalajın ışığı yansıtması, gerek kamera focus mesafesinin net olmaması, gerek ürünün hareketli olması gibi sebepler, görüntü kalitesini azaltmaktadır. Mavis, tüm bu etkenlere rağmen %100 okuma başarısı yakalayacak çözüm geliştirmiştir.

Sistemin başarısının özünde, gelişmiş görüntü işleme (yapay görme) tekniklerinin kullanılması yatmaktadır.

Sistem ilk olarak görüntüde kaç aday karekod olduğuna karar verir. Aday karekod sayısını belirledikten sonra, akıllı bir algoritma görüntüyü iyileştirecek filtreleri ardışıl olarak uygular ve her bir uygulamadan sonra aday karekodların tamamının okunup okunmadığını test eder. Akılı algoritma 7 farklı filtreleme ile çalışır. Her defasında görüntüyü daha da iyileştirecek parametreleri kendisi dinamik olarak seçer.

Bunu nasıl yapar?

Soldaki büyütülmüş orijinal karekod görüntüsünde, görüntünün bulanık olduğu görülmektedir. Görüntüyü netleştirmek ve siyah-beyaz ayrımını keskinleştirmek için 7 filtre ardışıl olarak uygulanır.

1. Histogram da yığılma varsa, yığılma kaldırılacak şekilde filtrasyon uygulanır. Bu filtreler : median_image, mean_image, gray_openingshape, gray_closing_rectangle, emphasize, illumination ve gen_contour_nurbs_xld fonksiyonlarıdır.

Program bu fonksiyonları, sırasıyla dener ve her denemeden sonra yeni histogram dağılımına bakar. Elde edilen yeni histogramın daha iyi olduğuna karar verirse, uygulamış olduğu son filtrasyon değerine göre yeniden karekod okumaya çalışır ve orijinal resme göre başarı oranına bakar. Eğer başarım yüzdesi artım yönündeyse, artık bu işlenmiş ve filtrelenmiş fotoğrafı baz alır ve buna göre karekodları ayırıştırır.

Histogram dağılımı iyileştirilmiş (artık gözle bile daha net bir fotoğraf elde edildiği görülmektedir) Bu yeni fotoğraf üzerinden karekod okumak artık çok daha kolay olacaktır. İşin en güzel yanı, tüm bu 7 filtreyi ardışıl olarak uygulamak, ortalama işlem gücüne sahip bir PC de bile, 500 ms. nin altında sürmektedir.

Mavis, konveyör üzerinde hareketli karekodları da okuyabilmektdir. Geliştirilen ürün, hemen her yere uyarlanabilir şekilde ve portatiftir. Daha fazla bilgi için, bizimle iletişime geçildiğinde, hazır çoklu karekodlar (ilaç kutuları) ile demo yapabiliriz.