Ford PVS Programı

(a freeware opensource utility to get string data from Ford (FoMoCo) PVS line and inserts it to SQL database by calling a stored procedure. Stored procedure can easily configure which fields will filled up)

Ford Otosan PVS sistemi, üretim hattında belirli bölgelerden geçen araçlara ait bilgilerin seri porttan iletilmesi sistemidir. Araç hattan geçerken, araca özgü kontroller yapılmak istendiğinde, aracın Vin numarası başta olmak üzere, bu VIN ile ilişkilendirlimiş her türlü ayrıntısına ulaşılabilir.

Her ne kadar seri port kullanımı, son zamanlarda gözden düşmüş olsa da, hala en basit ve en hatasız iletişim protokolüdür. Ford Otosan içinde yer yer 100 m. ye kadar uzunlukta PVS hatları mevcuttur. Altyapı birçok yerde fiberdir. Sık karşılaşılan problemler, çok yüksek gerilim ya da alan etkisinden kaynaklanabilen bozulmalardır. Seri port için USB converter kullanılması da pek tavsiye edilmez.

Mavis olarak, Ford Otosan için gerçekleştirdiğimiz projelerde kullanılmak üzere, jenerik ve bağımsız bir utility şeklinde çalışan PVSListener programını geliştirdik. Program seri portu dinler ve PVS datası alınırsa bunu veritabanına kaydeder.

Program, veritabanına PVS bilgisini orijinal haliyle kaydeder. İlaveten, çalıştırdığı stored procedure ile, bilgiyi istenilen şekilde parse ederek, programcının ihtiyacına uygun tüm alanlara göre uygun biçimde dağıtır. Program, halihazırda çalışmaktadır ve basit yapısı ile tüm projelere uygulanabilir. Mavis tarafından geliştirilen freeware bu uygulama (C# ile geliştirilmiştir) için bizimle iletişime geçmeniz yeterlidir. (info@mavis.com.tr)

 

 

 

 

 

 

 

 

 

 

Ford PVS to DB utility, listens ford PVS serial (com) line and inserts an SQL record when PVS string is ready in line. Program completes whole communication process between Ford PVS main computer and client computer (RK512) Program uses a stored procedure to parse PVS string to data table fields, so programmers can easily acces their own fields.

Program is a freeware by MaVis (Machine vision Software Ltd.) and open source (written in C#) . Please feel free to contact us (info@mavis.com.tr) to get complete solution.

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)

HALCON 10 Eğitimi

Ülkemizin köklü kuruluşlarından Eti bünyesinde yer alan Eti Makine Sanayi A.Ş. Eskişehir tesislerinde, 4 günlük HALCON eğitiminin ilk kısmı başarıyla tamamlandı. Eti Makine A.Ş. teknik personeli, teknolojiye olan yatkınlığı ve teknolojiyi kendi bünyesine dahil etme istekliliği gibi özellikleriyle zaten farklılaşmış (ve bir anlamda zoru seçmiş) bir ekip. Böyle bir ekipten oldukça profesyonel HALCON uygulamaları bekliyoruz. (Mavis olarak bizden sadece eğitim alan ve bir süre sonra bu eğitimleri kendi sektörlerine (Cam, Medikal, Gıda, vb..) başarıyla uygulayan çalışma arkadaşlarımızı ve onların projelerini gördükçe mutlu oluyoruz. Hatta ilerleyen günlerde izin verirlerse projelerini bu blog sayfalarında anlatmayı düşünüyorum. Bir anlamda alınan eğitim ile nerelere vardıklarının bir ifadesi olacaktır)

Eti Makine A.Ş. de verilen Eğitim

İlk Gün :

HALCON Foundation
HDevelop, Thresholding, segmentation, selection, filtering, acquisition, ROI Operations

İkinci Gün :

Matcing, OCR, Measuring

Planlanan Üçüncü ve Dördüncü GÜn Eğitimleri ise

C# ile Baştan sona gerçek bir HALCON Uygulaması,
Giriş Çıkış İşlemleri (Sinyalizasyon)
Ueye kameralar ile Eti Makine A.Ş. Potansiyel Uygulamalar üzerine örnekler (Gelişmiş Matching teknikleri ile hatalı paket/ürün ayıklama)

 

Mavis Dijital IO-1 Kullanımı

Tetik sinyalinin alınması ve kuru kontak vermek suretiyle çıkış sinyali üretilmesi için Mavis dijital IO, pratik bir kullanım sunmaktadır.

USB kablosu ile bilgisayara bağlanan modül, beslemesini buradan alır. Başka bir besleme kaynağına ihtiyaç duymaz. Girişe uygulanan 5-24 V. arası sinyali bilgisayara aktarır.

Modülün Visual Studio C# içinden kullanımı için aşağıdaki 2 örnek yeterlidir. (Örnekler ftp sitemizden kaldırılmış ise bizimle – info@mavis.com.tr iletişime geçiniz)

Başlangıç Örneği : DIO_Simple.rar

Gelişmiş Örnek : MDI_IO.rar

Gelişmiş Örneğin ekran görüntüsü

 

Akıllı Şekil Tamamlama

Bazen alınan görüntüde eksik kalan yerlerin tamamlanması gerekebilir. Aşağıdaki örnek kod, tamamlama işini akıllı bir biçimde yapmaktadır.

Yukarıda görüldüğü gibi parçalar arasındaki boşluk, olabildiğince gerçeğe yakın bir şekilde birleştirilmiştir. Birçok yerde kullanılabilecek olan, prosedürel olarak yazılmış HALCON kodu :

read_image (Image, 'C:/Users/Mustafa/Desktop/aa.png')
bin_threshold (Image, Region)
connection (Region, ConnectedRegions)
CombineSplittedRegions (ConnectedRegions, RegionCount)
dev_set_draw ('fill')
dev_display(Image)
dev_display(RegionCount)

Burada asıl işi yapan CombineSplittedRegions prosedürü ise

count_obj(ConnectedRegions, Number)
if (Number > 1)
    while (Number > 1)
        select_obj (ConnectedRegions, Obj1, 1)
        select_obj (ConnectedRegions, Obj2, 2)
        inner_circle(Obj1, Row, Column, Radius1)
        inner_circle(Obj2, Row, Column, Radius2)
        minR := Radius1
        if (Radius2 < Radius1)
            minR := Radius2
        endif
        distance_rr_min(Obj1, Obj2, MinDistance, Row1, Column1, Row2, Column2)
        gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
        dilation_circle(RegionLines, RegionDilation, minR)
        union2(ConnectedRegions, RegionDilation, RegionUnion)
        union1(RegionUnion, RegionCombine)
        connection(RegionCombine, ConnectedRegions)
        count_obj(ConnectedRegions, Number)
    endwhile
else
    copy_obj(ConnectedRegions, RegionCombine, 1, -1)
endif
inner_circle(RegionCombine, Row, Column, Radius)
rank_region(RegionCombine, RegionCount, Radius, Radius, 50)
return ()

programda kullanılan orijinal resim aşağıdadır. Programı denemek için bunu kullanabilirsiniz.

USB/Seri Port Üzerinden Mavis IO Kullanımı

 

 

 

 

 

 

 

 

Giriş Çıkış modülünü test edebileceğiniz Mavis DIOMaster test programı buradan indirilebilir.

Mavis Digital IO, hem USB hem de seri port üzerinden kullanılabilmektedir. Gerek USB, gerek seri port, kendine özgü avantajlara sahiptir. IO modül için

USB avantajları,

  • Her tür bilgisayarda standart olması
  • USB 2.0 için 2.5W güç sunması (USB 3.0 da 4.5W)
  • Çok hızlı olması
  • USB kablolarının hemen her yerde bulunabilir ve standart olması

gibi özellikler sayılabilir.

Seri Port kullanan IO modülün avantajları ise

  • Endüstriyel ortamlarda kopma, veri kaybı vb. sorun yaşanmaması
  • USB ye göre çok daha uzun mesafelere çıkabilmesi
  • Driver vb. bir şeye ihtiyaç duymaması
  • Port bir defa açıldıktan sonra, kapatılana kadar cihazda olan kopmalar vb. problemlerden, bilgisayar tarafındaki yazılımın etkilenmemesi

gibi maddeler sayılabilir. Gerçekte, her uygulamanın kendi dinamikleri olacaktır ve seri port ya da USB kullanımı uygulamanın ihtiyacına göre değişkenlik gösterecektir. Yaptığımız kurulumlarda, daha kolay uygulanabilir olduğu için, ilk olarak USB ile bağlantıyı deniyoruz. Herhangi bir problem çıkması durumunda alternatif olarak seri port kullanımına geçiyoruz. Mavis digital giriş çıkış modülü IO Master, hem seri hem de USB ile bağlantı kurularak çalışabilmektedir.

IOMaster Cihazının Üstten Görünüşü (Elektriksel)


Mavis IOMaster cihazını, Seri Port üzerinden kullanmak için;

1. Port Bağlantıları

A. Seri Port Bağlantısı

Seri modda iletişim sağlanacak ise, USB kablosu çıkartılmalıdır. Seri portun hemen yanındaki girişte, 12V ile besleme yapmak gerekir. (USB modda besleme bilgisayardan alınmaktayken, Seri port modunda bilgisayardan besleme alınmamaktadır. Bu yüzden harici olarak 12V DC ile IOMaster kartını beslemek gerekmektedir.) Eğer seri port değil de USB ile bağlantı yapılacaksa, o zaman 12V beslemesi mutlaka kaldırılmalıdır.

B. USB Bağlantısı

Seri port yerine USB ile bağlantı kurulacaksa, varsa seri port kablosu çıkartılmalı, ve varsa 12V. seri port beslemesi kaldırılmalıdır. USB, bilgisayardan 2.5W güç çeker ve bu 2.5W, modülün içindeki mikroişlemciyi çalıştırmaya yeter. Dolayısıyla modülü çalıştırmak için beslemeye gerek kalmayacaktır. (Not : Çıkış rölelerini veya transistörlerini çalıştırabilmek için, çıkışa 24V. besleme uygulamak gerekecektir)

2. Dijital Giriş Uygulama

IO Master, 8 dijital girişin herhangi birinde bir değişiklik olduğunda seri port üzerinden girişlerin son halini bilgisayara iletecektir. Dijital girişler 9 pinlik taraftan yapılır. En sondaki pin ortak uç (COM-) diğerleri ise, 5-24V arası sinyalin uygulanacağı uçlardır. Herhangi bir dijital giriş uygulandığında hemen önündeki led yanacaktır.

Uygulamada, tetik sinyali olarak adlandırdığımız giriş işareti, 5-24V arası gerilim taşıyan 2 uçlu bir kablo şeklinde olacaktır. İşareti uygulamadan önce ölçü aletiyle ölçüm yapılır. 5-24 V arası uygun bir DC gerilim ise, bir ucu COM- ucuna, diğeri 8 giriş noktasından herhangi birine bağlanmak suretiyle giriş işareti uygulanmış olur.

3. Çıkış Verilmesi (Röle ya da NPN)

IO Master kullanarak, 8 çıkış rölesi ya da tranzistörü SET edilebilir. Tranzistörler – (eksi) çıkış verirler.

Burada dikkat edilmesi gereken önemli nokta, çıkış röle/NPN set edebilmek için, çıkış rölelerinin 24V DC gerilim ile beslenmesi zorunluluğudur. Girişler ve çıkışlar optik izolasyonlu olduğundan dolayı, kart üzerindeki giriş ve çıkışlar bağımsız olarak çalışmaktadırlar.

4. USB Haberleşme Protokolü

Cihaz ile USB üzerinden haberleşebilmek için, mavis tarafından geliştirilmiş C# uygulamaları kullanılabilir.

Mavis DIOMaster test programı buradan indirilebilir.

Open Source (açık kaynka kodlu) mavis uygulamaları, her türlü ihtiyacı giderecek örnekler sunmaktadır.

5. Seri Haberleşme Protokolü

Seri Port, 19200 ya da 9600 bps hızında, DataBits : 8, Parity : None, Stop Bits : 1, Handshaking : None şeklinde konfigüre edilmelidir.

PC ile IO Master kartı arasındaki haberleşme protokolü son derece yalındır. Bu kadar yalın bir protokol seçmedeki amaç, olabildiğince en hızlı ve olabildiğince bekleme olmaksızın haberleşme sağlamaktı. (Aksi halde paketlerin tamamının geldiğinden emin olunamaması durumunda, geniş bekleme süreleri konulacaktı ki, tüm bunlar performans açısından iyi oolmayacaktı)

IO Master, Seri Port ile bilgisayara bağlandıktan sonra, herhangi bir seri port haberleşme programı ile tüm fonksiyonlar test edilebilir. (Hyperterminal vb. programlar kullanılabilir. Benim kullandığım programı buradan indirebilirsiniz)

Seri Port ile kullanılabilecek Fonksiyonlar

Öncelikle; cihazın girişlerinde herhangi bir değişim olması durumunda, cihaz otomatik olarak bu bilgiyi tek 1 Byte olarak bilgisayara gönderecektir.

Bunun dışında, istenildiği anda Sorgulama ve Set etme işlemleri yapılabilir. Her işlem için cihaza 2 byte gönderilir.

Sorgulama için ilk byte 100 (ascii d harfine denk gelir)
Set etmek için ilk byte 200 dür.

aşağıdaki örnekler net olarak açıklamaktadırç

3.1. Cihazın Adını (Varlığını) Sorgulama : N komutu

Gönderilecek Komut :  (byte)100 + “N”
String olarak : dN

Bu komut düzgün olarak iletilirse, cihaz

Mavis USB/Serial IO 8×8

bilgisini geri iletecektir. (Kendi kullandığım Terminal programının ekran görüntüsü)



Bu genellikle, en başta, tüm sistemin çalışırlığını test eden komuttur. Ekranda Mavis USB/Serial IO 8×8 yazısını görmüşseniz, IO Master düzgün olarak çalışıyor ve bağlantılar sağlam demektir.

3.2. Giriş Değerlerini (Dijital Inputları) Sorgulama : G komutu

Gönderilecek Komut :  (byte)100 + “G”
String olarak : dG

Seri porttan dG ifadesi gönderilirse, tek byte lık cevap alınır. Alınan cevap girişteki input değeridir. 8 girişten, işaret uygulanmış olanlar bit 0, işaret uygulanmamış olanlar bit 1 ile  byte oluşturulur. (Diğer bir deyişle, girişte alınan byte değerini 255 ten çıkartarak salt giriş bitleri de elde edilebilir. Tümleyenini alma işlemi)

yukarıdaki örnekte, 3. pine işaret uygulanmış ve 251 değeri sorgulanmış.
3. pin = 2 üzeri 2 (0 dan başlarsak) = 4
255-251 = 4

değeri değerlendirilir.

3.3. Çıkış Değerlerini (Dijital Output) Set Etme : 200 komutu

Gönderilecek Komut :  (byte)200 + Set Edilecek Byte

3. pin i set etmeye yarayan örnek gönderim :

byte b = 4;
byte[] hdr = { 200, b };
serialPort.Write(hdr, 0, 2);

Eğer, sistemin bilmediği bir komut iletilirse Error bilgisi ile birlikte, iletilen komutu geri döndürür.

3.4. Anlık Değişen Giriş Değerlerini Okuma

serialPort1_DataReceived

event’inde seri port taki byte okunarak, giriş değeri elde edilebilir.

Ek :

Terminal programını kullanarak byte gönderme

Mavis ADC (Analog Digital Converter)

Mavis olarak geliştirdiğimiz elektronik cihazlara bir yenisini ekledik : Analog Digital Converter. Kameralı kontrol projelerimizde, çeşitli analog sensörlerden gelen verilerin toplanması gündeme geldiğinde, piyasadan ihtiyacımıza uygun ürün bulmakta zorluk çekmemiz sonucu, kendi 8 ve 10 bit analog sayısal dönüştürücülerimizi geliştirdik.

Kullanımı çok pratik olan ADC, 12 volt besleme gerilimi ile çalışmaktadır. Analog işaret, 2 uca girildikten sonra, sonucu seri port ya da usb den bilgisayara sayısala dönüştürülmüş olarak göndermektedir. gönderim sürekli ya da istenildiğinde (soruya cevap) şeklinde olabilmektedir.

Piyasada var olan ADC ler, kullanımı zor, yazılıma uyarlaması zahmetli olan modellerdi. Mavis ADC, tak-çalıştır kolaylığında, herhangi bir kütüphane yüklemeye ihtiyaç duymayan, oldukça yalın ve basit yapıdadır.

0-10V giriş gerilimini, 0-255 arası bir değer (byte) olarak iletmektedir. Aşağıdaki resimde, ADC seri port üzerinden verileri göndermektedir. (Bir usb dönüştürücü ile bilgisayara takılmıştır) Direk usb üzerinden veri gönderen modeli de mevcuttur.

Hareketli Bir Nesnenin Yerinin, Hızının ve Doğrultusunun Belirlenmesi

Hareketli bir nesnenin (insan, araba vb. olabilir) nereye, hangi hız ve açıda hareket ettiğinin belirlenmesi, görüntü işleme teknikleri hızlı ve tutarlı olarak yapılabilmektedir. Bu konuya örnek olabilmesi açısından, masamda bir oyuncak robotu hareket ettirerek, kamera ile üstten bakıp fotoğraflarını aldım. 5 farklı pozisyonda aldığım bu fotoğrafları işleyerek her bir pozisyon için, bir öncekine göre hız ve açı değişimini hesapladım. (Normalde, bu işlem kameradan alınan görüntülerle canlı olarak yapılmalıdır.  İşlem mantığı tamamen aynı olacağı için, off-line yani dosyadan yüklenen resimler ile çalışıldı. HALCON kullanan herhangi biri, kamerası olmasa bile örneği çalıştırabilsin diye)

Aldığım 5 adet fotoğrafın yanyana görüntüsü aşağıdaki gibi. Kullandığım fotoğrafları buraya tıklayıp bilgisayarınıza indirebilirsiniz.

 

Gerçek hayattaki olabilecek uygulamalara benzemesi açısından, takip edeceğimiz robotun yanına, benzer renklerde engeller koydum. (Program bu engelleri eleyebilmeli) engellerin yerlerini her bir resimde değiştirdim. (Değişen arka zemin, farklı nesnelerin de görüntüye girmesi vb. durumlarda program doğru nesneyi takip edebilmeli)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hareketli oyuncak robot ve ona tepeden bakan kameranın yerleşim görüntüsü. Robotun çevresine aynı renkteparçalar koydum (sistemin kafasını karıştırabilmek için). Robot engellere takılmadan yürüyecek ve biz de kamera ile robotun hareketini izleyeceğiz.

Şimdi işin HALCON kodlamasına geçelim.

Sistemin temel mantığı ardışıl olarak alınan 2 resmi karşılaştırmak ve aradaki farkları bulmak üzerinedir. HALCON daki sub_image fonksiyonu, 2 görüntüyü birbirinden çıkarır ve fark görüntüsünü geri döndürür. Kullanılan dual_threshold fonksiyonu sayesinde, hem eski pozisyonu hem de yeni pozisyonu ayrı iki bölge olarak elde ederiz. Bundan sonrası, engellerin ve görüntüye giren beklenmeyen nesnelerin elenmesi (select_shape) ve son olarak ta bulunan sonuçların ekranda listelenmesidir. Her bir hareket için, robotun eski konumu, yeni konumu, gidilen mesafe, dönülen açı hesaplanacaktır.

Önce tam HALCON kodunu verelim.

dev_set_line_width(1)
set_display_font (3600, 12, 'mono', 'true', 'false')
gen_empty_obj(Robots)
for Index := 1 to 4 by 1
    read_image (Image1, 'C:/Users/Mustafa/Desktop/' + Index + '.bmp')
    S := Index + 1
    read_image (Image2, 'C:/Users/Mustafa/Desktop/' + S + '.bmp')
    convert_image_type (Image1, ImageConverted1, 'int2')
    convert_image_type (Image2, ImageConverted2, 'int2')

    sub_image (ImageConverted1, ImageConverted2, ImageSub, 1, 0)
    dual_threshold (ImageSub, RegionDiff, 500, 20, 10)

    closing_circle(RegionDiff, RegionClosing, 3.5)
    select_shape (RegionClosing, SelectedRegions, ['area','height'], 'and', [40000, 250], [80000, 450])
    count_obj(SelectedRegions, Number)
    if (Number = 2)
        select_obj(SelectedRegions, FirstObject, 1)
        select_obj(SelectedRegions, NextObject, 2)
        if (Index = 1)
            concat_obj(Robots, FirstObject, Robots)
        endif
        concat_obj(Robots, NextObject, Robots)
    endif
endfor
* Display islemleri
* Katedilen mesafe (pixel cinsinden) ve doğrultu (açı) yazalım
dev_display(Image2)
dev_display(Robots)
dev_set_color('yellow')
area_center(Robots, Area, Row, Column)
count_obj(Robots, Number)
for Index := 1 to Number - 1 by 1
    disp_arrow(3600, Row[Index - 1], Column[Index-1], Row[Index], Column[Index], 5)
    distance_pp(Row[Index - 1], Column[Index-1], Row[Index], Column[Index], Distance)
    angle_lx(Row[Index - 1], Column[Index-1], Row[Index], Column[Index], Angle)
    tuple_deg(Angle, Deg)
    disp_message (3600, Distance$'.3' + ' px.', 'image', Row[Index-1], Column[Index-1], 'white', 'false')
    disp_message (3600, Deg$'.2' + ' derece', 'image', Row[Index-1] + 40, Column[Index-1], 'white', 'false')
endfor

Bu kod çalıştırıldığında elde edilen ekran görüntüsü ise aşağıdaki gibi olacaktır. Robotun son 5 hareketinde, nereden nereye gittiğini ve kaç derece dönerek hareket ettiğini gözlemlemek mümkündür. Otoyollarda kullanılan Radar sistemi doppler frekansı mantığına göre çalışmakla birlikte, kamera ile yapılan hız kontrollerinde bu ve benzeri yöntemler kullanılmaktadır.

Defne Yaprağı Ayıklama Kontrolü

Ülkemizde bol miktarda yetişen defne yapraklarının, ayıklanıp sağlam olanlarının paketlenmesi ile birlikte, ekonomik değeri yüksek bir ürüne dönüşmesi mümkündür. Burada asıl maliyet, sağlam yaprakların bozuk (kırık, ezik, renksiz vb.) yapraklardan ayıklanmasını sağlamaktır. Üretici ya da toplayıcılardan çuvallarla getirilen yaprak, geliştirdiğimiz bir görüntü işleme uygulaması ile seri ve hızlı olarak ayıklanmaktadır.

Mavis olarak, defne yaprağı ayıklama projemizde, her tür yaprak hatalarına göre çalışan uygulamaya sahibiz. Binlerce yaprakla test edilmiş uygulamamız, en basit hatalardan en karmaşık hatalara kadar algılayabilmektedir. Bu yazı dizimizin devam eden sayfalarında, tüm sistemin çalışması detaylı olarak anlatılacaktır.

Sistem 2 bileşenden oluşmaktadır.

  1. Yaprakların konveyör üzerine tek tek dizilmesini sağlayan otomasyon sistemi
  2. Yaprakların sağlam olup olmadığını denetleyen kameralı kontrol sistemi.

Bu iki sistemden birincisi bir çok farklı şekillerde uyarlanabilir. Pnömatik döner borularla yaprakların hava ile emilmesi ve konveyör üzerine koyulması, aynı anda çok sayıda hava kanalcığının yaprakları emmesi ve ilerleyip konveyör üzerine bırakması vb. farklı alternatifler olabilir. Mavis olarak işin bu yanı ile fazla ilgilenmemekle birlikte, halihazırda çalışan otomasyon çözümlerine de sahibiz.

İşin yaprak ayrıştırma algoritması (sağlam ve bozuk yaprakların ayırt edilmesi) aşağıdaki şekilde çalışmaktadır.

1. Konveyör üzerinde giden yaprakların görüntüsünün alınması

Yapraklar hareket halinde olacağı için, olabildiğince kısa sürede fotoğraf almak gerekmektedir. Bu yüzden pozlama süresini en azda tutarak, güçlü bir aydınlatma kullanmak gerekmektedir. Yapraklar geniş bir yüzeye dağılmış ise fluoresan aydınlatma, dar bir kanaldan geliyor ise led aydınlatma kullanılabilir.

(Fluoresan aydınlatmanın daha uygun olacağı durum. Yüzey geniş ve tüm yüzeyi aydınlatmak fluoresan ile daha homojen olabilir)

(Yapraklar ardışıl bir kanalcıklardan gelmektedir ve tüm yüzey yerine belirli bir kanal aydınlatılabilir. Dolayısıyla power led kullanılabilir)

2. Alınan Görüntünün işlenmesi

Sistemin en hassas noktası burasıdır. Görüntü işleme uygulaması ile yaprakların sağlam ya da bozuk olup olmadığına karar vermek gerekmektedir.

2.1. Alınan Görüntüdeki Tüm Yaprakların Seçilmesi

Yeterince hızlı çalışan bir sistemde her bir fotoğraf karesine birden fazla yaprak girebilir. Bu durumda her bir yaprağın tek tek ayrıştırılması gerekmektedir. HALCON görüntü işleme kütüphanesi ile her bir yaprak ayrı bir nesne olarak ele alınır ve her bii için aşağıdaki kontroller tek tek sınanır

2.1.1 İçinde Delik bulunan yaprakların elenmesi

Burada kullanıcı yaprak içindeki deliği eleyebilmek için sabir bir rakam (3 mm2 gibi) ya da oran (%2) belirleyebilmektedir. Kullanıcı tarafından belirlenen değerden daha büyük bir delik belirlenmişse yaprak elenir.

2.1.2 Sağlam Yaprağa çok yakın hatalı yaprak varsa elenmesi

Bazı durumlarda sağlam yaprağı sistem ayrıştırırken, sağlam yaprağın çok yakınında bozuk yaprak varsa, o yaprak ta sağlam sepetine gidebilmektedir. Bunu önlemek için sağlam yaprağa çok yakın hatalı yaprak varsa her ikisinin de elenmesi istenebilir (Ne de olsa hatalı yaprakları sistemden 2. kez geçirmek mümkün)

2.1.3 Bir tarafı eksik yaprağın elenmesi

Mavis tarafından matematiksel modellemeye göre geliştirilen görüntü işleme kodu, yaprağın silüetini akıllı olarak tamamlayıp, herhangi bir yerde silüetten farklılık varsa (eksiklik, kopukluk, kırıklık, içe katlanma vb.) yaprağın bozuk olarak elenmesini sağlamaktadır.

Yeni Distribütörlüğümüz : e2v

Mavis, Yapay Görme konusunda ürettiği bileşenler ile lider firmalardan biri olan e2v firmasının Türkiye distribütörü olmuştur.

e2v, endüstriyel görüntü işleme, uzay teknolojileri, savunma, sağlık vb. gibi konularda yatırımları olan uluslararası bir firmadır. Türkiye’de Mavis ile birlikte çalışmaya karar vermiştir.

e2v ile yapılan çalışmalarımız ve genişleyen ürün portföyümüz hakkında ileride daha detaylı bilgiler vereceğiz.