3

EKM

2010

Görüntü İşleme Teknikleriyle Gerçek Zamanlı Plaka Tanıma Sistemi

Yazan: Barış Samancı
Kategoriler:Yazılım

Zaman zaman arama yaparken bilgisayarımın derinliklerinde daha önceden yaptığım çalışmalara denk gelip şaşırıyorum. Geçen gün ise bir döküman ararken öğrencilik yıllarımda üzerinde çalıştığım, üniversite bittikten sonraysa heralde unuttuğum iki adet çalışmaya denk geldim. Uygulamaları görünce bunları benmi yapmışım diye ağzım açık kaldı :D inanılmaz bir duygu. Bu yazımda bu uygulamalardan ilki olan görüntü işleme teknikleri ile plaka tanıma sisteminin tanıtımını bulacaksınız.

Günümüzde çok popüler bir halde olan görüntü işlemenin gelecekte epey ilerleyerek gelişeceğini, günlük hayatın içine kadar gireceğini düşünüyorum. Bana göre bilim kurgu filmleri gerçek hale gelecek :). Görüntü işleme çeşitli sensörler ile (CMOS , CCD , vb ) görüntünün yakalanıp sayısal hale getirilmesi, ardından sayısal hale getirilen görüntünün çeşitli algoritmalar, yöntem ve teknikler ile anlamlandırılıp sayısal sistemler üzerinde (bilgisayar, cep telefonu, mikrodenetleyiciler)  kullanılabilir hale getirilmesidir. Görüntü işleme ile yapılabilecekler tamamen sistemin niteliklerine ( kızılötesi, termal, rgb, vb) ve sistemi kuranların amacına bağlıdır. Aşağıda derlediğim şekilde görüntü işlemenin kullanım alanlarından bazılarını görebilirsiniz.

Görüntü İşlemenin Kullanım Alanları

Yukarıdaki şekillerde görüntü işlemenin tıbbi uygulamalarda, uzaydan coğrafya ve maden keşfinde, seri üretimlerde üretim bandından geçen ürünlerin kontrolünde, parmak izi ve plaka tanıma sistemlerinde kullanılabilirliği gösterilmiştir. Ayrıca maddeleyecek olursak

  • Yüz tanıma ile giriş çıkışlarda personel takibi veya suçlu takibi
  • Plaka tanıma sistemleri ile plakaların merkezi veritabanından karşılaştırılıp suçlu veya arananların tespiti
  • Plaka tanıma sistemleri ile bir alışveriş merkezine en çok gelen müşteriyi tespit edip reklam yaparak diğer müşterileride teşvik etmek ve satışları arttırmak (biraz aç gözlüce oldu galiba :D )
  • Termal kameralar ile canlı tanıma (insan, hayvan ...), sınır güvenliği
  • Ormanlarda çıkan yangınlarda, yangının büyümeden tespit edilmesi
  • Uzaydan coğrafya, maden veya doğal kaynak taraması
  • Retina veya parmak izi tanıma gibi biyokimlik uygulamaları


olabilir. Uygulamalarla örnekler çoğaltılabilir. Dediğim gibi görüntü işleme ile yapılabilecekler sistemi kuran kişiye ve sistemin niteliklerine bağlıdır. 

Yapay Sinir Ağları

Son yıllarda gelişen bilgisayar sistemleri ve görüntü işleme teknikleriyle birlikte gelişen bir konu daha vardır.Bu konu çoğunlukla görüntü işlemede kullanılan yapay sinir ağlarıdır (Neural Networks). Yapay sinir ağları ile insan beynindeki nöronlardan esinlenerek sayısal sistemler için insan beyninin çalışma yapısına benzer sistemler geliştirilmektedir. Yapay sinir ağları nöron olarak adlandırılan transfer fonksiyonlarının birbiri ile etkileşimi ile oluşan matematiksel modellerdir. Bu modeller depolama ve öğrenebilme kabiliyetine sahiptirler. Bu alandaki gelişim yapay zekaya doğru gitmektedir. İşlem yükü çok fazladır, bu yüzden gelişmiş YSA uygulamalarında mikroişlemci yerine son yıllarda revaçta olan FPGA ler kullanılmaktadır. Bu sayede mikroişlemci ile seri işlem yapmak yerine FPGA ler ile paralel işlem yaparak işlem yükü ve zamanı büyük ölçüde azaltılmaktadır.

Plaka Tanıma Uygulamam

İşin giriş kısmını geçtikren sonra benim yapmış olduğum uygulamaya dönelim.Üniversitedeki son yılımda üzerinde çalıştığım bir uygulamaydı. Üniversitenin bitmesiyle birlikte geçirdiğim yaz tatilinden sonra bu uygulamayı tamamen unutmuşum. Geçen gün şans eseri bilgisayarımda bulduktan sonra çok şaşırdım. Sallasam neler dökülecek acaba bilgisayardan :) Bu uygulamadaki ilk amacım canlı kamera görüntülerindeki araçların plakalarını anlık olarak gerçek zamanlı bir şekilde tespit etmekti.İkinci amacım ise plaka tanımayı yapan sistemin bilgisayar kullanmadan küçültülerek taşınabilir hale getirilmesiydi. Bu yüzden plaka tanıma yapan sistem olarak ARM tabanlı bir işlemci kullanmayı düşünüyorum.

Uygulamanın arayüz kodlarını C# ile yazdım, yukarıda bahsettiğim nedenden dolayı filitre ve işlem yapan algoritmaları ANSII C ile yazdım ve dll haline getirdim. Böylece aynı kodları dll i C# uygulamama ekleyip bilgisayarda kullanabilir, aynı zamanda saf C kodunu taşıyıp ARM tabanlı mikrodeneyleyicili sistemlerde kullanabilir hale getirdim. Fonksiyonlara görüntünün hafızadaki bölgesinin adresini, koordinat, uzunluk, genişlik gibi parametreleri geçiyorum ve her fonksiyon kendisini ilgilendiren görevi gerçekleştiriyor.

Uygulamayı tamamen bitirememişim :) yapılacaklar listesine ekledim :) Sistem şuan sabit bir fotoğraftan plakayı kesip çıkartıyor ve karakterlerin ayrıştırılıp tanınması basamağına kadar geliyor. Görüntü işleme hızını arttırmak ve  hafıza gereksinimini azaltmak amacıyla görüntü RGB den gri seviyeye çevriliyor.Gri seviyeye çevrilen fotoğraf belirli bir eşik seviyesine göre siyah beyaza çevrilip temizleniyor. Griye çevrilmeden RGB olarak 3 katman işlem yapınca plakanın öne çıkarılma işlemi daha başarılı ve temiz oluyor. Fakat işlem süresi epey uzuyor ve düşük hafızalı mikrodenetleyicilerde kullanılamaz hale geliyor. Başarım / maliyet kıyaslaması yaparsak gri seviye olarak işlemek daha mantıklı. Gri seviye ile yapılan tüm işlemler 640 X 480 çözünürlük için 600ms civarı sürüyor. Aşağıda orjinal fotoğraf, gri  ve RGB olarak işlenildiğinde elde edilen sonuçları görüyorsunuz.



Orjinal görüntü


Gri seviye olarak işlenmiş görüntü


RGB olarak işlenmiş görüntü

Yukarıdaki işlenmiş görüntülerin ilkinde görüntü RGB den gri seviyeye çevrilmektedir. Ardından histogram eşitleme uygulanmakta ve görüntüye özel eşik değeri hesaplanmaktadır. Bu eşik değere göre görüntü siyah beyaza çevrilmekte ve plaka bölgesini öne çıkarıcı bir filitre uygulanmaktadır. Buraya kadar geçen süre 400ms civarıdır. Bu andan sonra yukarıda görülen görüntüde piksellerin komşuluklarına göre plaka fotograftan kesilip alınmakta ve karakter ayrıştırma işlemi basamağına getirilmektedir.Bu işlemde 200ms civarı sürmektedir. Toplamda 600ms süresince plaka bölgesi tespit edilmekte ve karakter ayrıştırma, tanıma basamağına geçilmektedir. Bu basamaktada geçecek olan sürenin önceki işlemlere göre çok kısa olacağını düşünürsek bir saniye altında, kameradan gelen görüntüden bir kare alınıp plaka tespit edilebilir. Bu sürede gerçek zamanlı olarak kullanmak için yeterli bir süredir. Yukarıdaki görüntülerin sonuncusunda ise fotoğrafı gri seviyeye çevirmeden RGB olarak işleyip , her kanal için 3 ayrı siyah beyaz görüntü elde edildikten sonra plaka bölgesinin öne çıkarılması işleminin sonucu görülmektedir. İkinci ve Üçüncü görüntü karşılaştırıldığında çok fazla fark görülmemekte ama RGB işlem süresi ve kaynak gereksinimi çok yüksek olmaktadır.

Histogram Eşitleme

Histogram eşitleme ile fotoğraftaki piksellerin değerlerini 0-255 aralığında gererek piksellerin değerlerinin aralarının açılmasını sağlıyoruz. Bu sayede görüntüde hem gözle görülür bir iyileşme oluyor, detaylar ortaya çıkıyor hemde görüntüyü işlerken eşik seviyeleri daha etkili hesaplanıp daha verimli sonuçlar elde ediliyor. Aşağıdaki fotoğraflarda favori mekanlarımdan biri olan Fethiye'deki 12 adalar görülmekte :) Şimdi fotoğrafların önceki ve sonraki histogramlarını karşılaştırıp fotoğrafta ne gibi bir etki yarattığına bakalım.


fethiye 12 adalar
Fethiye 12 Adalar - Orjinal görüntü

Fethiye 12 adalar
Fotoğrafın gri seviyeye çevrilmiş hali

Fethiye 12 adalar
Gri seviyeye histogram eşitleme uygulanmış hali

Yukarıdaki fotoğraflarda histogram eşitleme sonucu siyahların ve beyazların birbirlerinden uzaklaşarak fotografta bir keskinlik yarattığını gözle görebilirsiniz. Bilgisayardaki yazdığım kod içinse histogram eşitleme siyah ve beyazların birbirinden uzaklaşması sonucu daha doğru bir eşik değer ve daha verimli sonuçlar demektir. Aşağıdaki şekillerde plaka fotoğrafının histogram eşitlemeli ve eşitlemesiz gri seviyeden siyah beyaza çevrilmiş halini görebilirsiniz.



Histogram eşitleme uygulanmış gri seviye fotoğrafın s/b hale çevrilmiş hali


Histogram eşitlemeden gri seviye fotoğrafın s/b hale çevrilmiş hali

Yazdığım C# Uygulaması

Şimdi yazdığım C# arayüzüne bir göz atalım. Arayüzde fotoğraf açma, R,G,B veya Gri seviyede işlem yapma ve uygulanacak olan filitreleri seçmek için menu butonları vardır. Bu filitreler C dilinde yazılmıştır ve dll haline getirilmiştir. Arayüz açılırken C ile oluşturulan dll ler yüklenir ve bir işlem seçildiğinde dll deki C fonksiyonları istenilen filitreyi adresi verilen hafıza bölgesindeki görüntüye uygular. Filtreleri C ile yazmamın sebebi aynı kodu alıp gömülü mikrodenetleyicili sistemlerde değişiklik yapmadan kullanabilmektir.Bu sayede her kamera başına bir bilgisayar koymak yerine bir kart koymak hem daha kolay hemde daha ucuz olacaktır. Ayrıca C dilindeki gösterici kavramı ile hafıza bölgesine direk olarak ulaşıp adresler üzerinde işlem yapıldığından performans artmaktadır. Matlabta yaklaşık 1 dakikada elde edilen sonucu yazdığım C kodları 600ms civarında gerçekleştiriyor :) Buda sistemin gerçek zamanlı olarak kullanılabilmesine imkan veriyor. Aşağıdaki şekillerde programın arayüzünü ve tüm filitreler uygulandıktan sonra kesilen plakayı görebilirsiniz.


plaka tanıma sistemi arayüzü

tepit edilen plaka
 

Görüldüğü gibi daha önce plaka bölgesinin kesilip alınması, karakterlerin tespit edilmesi aşamasına kadar gelmişim. İşlerimin hafiflediği bir zamanda ve şuan çalışmakta olduğum uygulamaları bitidikten sonra yarım kalan bu çalışmamıda bahsettiğim hedefler çerçevesinde tamamlayarak gerçek zamanlı olarak uygulamaya sokmak istiyorum. Şuan için sistemin gördüğüm eksikleri plakanın tek satır olması, karşıdan çekilmiş olması gerektiğidir.Plaka bölgesinin kesilmesi esnasındaki algoritma geliştirilerek bu eksiklikler giderilebilir. Yukarıdaki sistem ile rastgele seçtiğim 20 plaka ile deneme yaptım.Sistem her fotoğraf için plaka bölgesini öne çıkarma işlemini başarılı olarak gerçekleştiriyor fakat dediğim gibi şuan için görüntülerin karşıdan veya yukarıdan çekilmesi gerekmektedir. 20 fotoğraf için epey fazlaca çıktı olduğundan görüntüleri buraya koymuyorum. Ayrıca YSA kullanılarak yandan çekilen fotoğraflarda esneyen ve bozulan karakterleri sistem öğrenerek, sistem açıdan bağımsız hale getirilebilir. Sistem şuanda 640 X 480 çözünürlüğe sahip fotoğrafları 600ms de işlemekte. Karakterlerin tanınması işleminide işin içine katarsak toplam sürenin 700ms yi geçmeyeceğini düşünüyorum. Ayrıca gerekirse çözünürlük düşürülerek kaynakları sınırlı olan mikrodenetleyicili uygulamalardada rahatlıkla kullanılabilir.

Böylece bir yazının sonuna daha geldik. Bir sonrakinde görüşmek üzere :)

Yorumlar
yakup
06 Eki 2010 Çarşamba, 11:13 tarihinde yazmış.

Merhaba, Gerçekten güzel bir yazı, elinize sağlık fotoğrafları işleyen kodları yayınlamayı planlıyormusunuz? teşekkürler,

06 Eki 2010 Çarşamba, 14:36 tarihinde yazmış.

Merhaba, özel bir uygulama olduğu için kullanmayı düşünüyorum. İşime yaramazsa ileride tüm kodlarıyla birlikte açarım.

21 Eyl 2011 Çarşamba, 19:55 tarihinde yazmış.

Eline sağlık Barış. Benim de görüntü işleme ile yangın tespiti üzerine bir çalışmam olmuştu, miniPC üzerinden yaptırmıştım. Kullanmayı düşündüğün donanım neydi? Mobil bir sistem mi yapacaktın?

23 Eyl 2011 Cuma, 13:15 tarihinde yazmış.

Merhaba, görüntüden yangın tespiti plaka tanıma sisteminden önce benimde yapmış olduğum bir çalışmaydı. Evet mobil sistem yapıcam.

Adınız *:
e-Mail Adresiniz *:  ??
Web Siteniz:
Yorumunuz *:
Kalan karakter sayısı: 500
 
 

Tasarım ve Programlama Barış SAMANCI
Her hakkı saklıdır.
barissamanci.net  ©  2010-2018