Görüntü İşleme ile Araç Plaka Tespiti

in #utopian-io7 years ago (edited)

Görüntü İşlemenin ana konularından biri de yapay zeka ile plaka okuma da yapılabilmesidir. Bu projede plaka okuyabilmek için gerekli araçlardan biri de opencv kütüphaneleridir. Plaka okuma projesi için opencv kütüphanelere ve visual studio kurulmalıdır.Fakat biz bunun yanısıra aynı işlemleri python3 kullanarak da yapabiliriz.Projeyi ortak fonksiyonları kullanarak anlatacağım.Hangi platformda işlem yapacağınız size kalmış.Bir plakayı başarılı şekilde okuyabilmek için izlenmesi gereken birtakım yollar mevcuttur. Bu yolları bir algoritmayla gösterecek olursak;

1)Plaka yerinin tespiti.
2)Plakanın sonraki algoritmalara uygun yeniden konumlandırılması ve ebatlandırılması.
3)Parlaklık,zıtlık gibi görüntü özelliklerinin normalizasyonu.
4)Karakter ayırma ile görüntüden karakterlerin bulunması.
5)Optik karakter tanıma.
1.PLAKA YERİNİN TESPİTİ
İlk olarak orijinal fotoğraf alınır. Daha sonra proje içinde bulunan PreProcess sınıfındaki fonksiyonlar yardımıyla fotoğraf 2 farklı hale (GrayScale,imgTresh) çevrilir.

Plaka okumadaki en kritik nokta olan karakterlerin okunması işlemi OCR yöntemi ile okunur. Bu proje içinde kullanılan algoritma ise KNN algoritması dır.

Plaka okumada kullandığımız KNN algoritmasının karmaşıklığı ise, eğitim yapılırken O(nk) olurken test verileri için ise O(n) dir.

Bu projenin çalışmasının başladığı süreç olan input girişinde, input formatı png uzantılı fotoğraflar alınır. Bu fotoğrafların pixelleri ayrı ayrı değerlendirilir.

01.png

Resimler sırası ile su filtrelere uğramıştır. Orijinal , GrayScale , imgTresh
Ardından DetectPlates sınıfı içindeki findPossibleCharsInScene fonksiyonuyla imgTresh fotoğrafında bulunan muhtemel bütün karakterler ele alınır. Bu fonksiyon sonucunda imgTresh halindeki fotoğrafta 2362 olası karakter bulunmuştur. Bu karakterlerin daha gerçekçi ve aza indirgenmesi için başka fonksiyonlarda uygulanmalıdır.
Ardından DetectChars sınıfı içindeki findVectorOfVectorsOfMatchingChars() fonksiyonuyla 2362 sonuç arasından herhangi bir karakterle eşleşen vektörler bulunur. Bu fonksiyon sonucu olası sonuç 131’e düşmüştür. Fonksiyon sonucu oluşan görüntü aşağıdaki gibidir.
01 (1).png

Ardından DetectPlates sınfı içindeki extractPlate() fonksiyonuyla az önce oluşan görüntüdeki muhtemel plakalar tespit edilir. 131 muhtemel karakter sonuçları, 13 muhtemel plaka tespitine düşürülüyor. Daha sonra yakınlık algoritmaları kullanılıyor ve asıl plaka tespit ediliyor.
01 (2).png

2)TESPİT EDİLEN PLAKANIN YENİDEN KONUMLANDIRILMASI
Uygulanan fonksiyonlar sonucu plaka tespit edildi. Buna uygun olarak plakanın konumuna göre plaka alınıyor ve yeniden ebatlandırılıp,konumlandırılıyor.
3)GÖRÜNTÜ ÖZELLİKLERİNİN NORMALİZASYONU
Tespit edilip yeniden ebatlandırılan plakamız artık karakterlerin okunması aşamasına yaklaşıyor. Karakterlerin daha iyi ve gerçeğe yakın okunabilmesi için birtakım görüntü özelliklerinin değişmesi gerekiyor. Bu sebepten dolayı ilk olarak PreProcess() fonksiyonu uygulanarak fotoğraf grayScale ve imgTresh hale getirilir.

01 (3).png

Orijinal GrayScale imgTresh
4)KARAKTER AYIRMA İLE GÖRÜNTÜDEN KARAKTERLERİN ÇIKARILMASI
Ardından DetectChars sınıfı içindeki findPossibleCharsInPLate() fonksiyonuyla imgTresh görüntüsündeki karakter harici gürültüler yok edilir. Oluşan görüntü aşağıdaki gibidir.
01 (4).png

Ardından DetectChars sınıfı içindeki findVectorOfVectorsOfMatchingChars() fonksiyonuyla herhangi bir karakterle örtüşmeyen vektörler görüntüde gürültü olarak kabul edilip çıkartılır. Oluşan görüntü aşağıdaki gibidir.
01 (5).png

Ardından DetectChars sınıfı içindeki removeInnerOverLappingChars() fonksiyonuyla üst eğer üste binen karakterler varsa, görüntüden çıkarır. Bu görüntüde herhangi bir karakter çıkarma gerçekleşmedi.
01 (6).png

  1. OPTİK KARAKTER TANIMA
    Bu aşamaya kadar plaka tespiti gerçekleşmiş olup, daha sonra uygulanan fonksiyonlar sonucu plaka daha okunabilir hale getirilmiştir. Bu aşamadan sonra sadece karakterlerin okunması işlemi kalmıştır.
    DetectChars sınıfı içindeki RecongizeCharsInPlate fonksiyonu yardımıyla karakterler KNN algoritmasıyla bulunur. Oluşan görüntüler aşağıdaki gibidir.
    01 (7).png

    01 (8).png

    Görüşmek üzere :)
    Github Link



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Your contribution cannot be approved because it does not follow the Utopian Rules.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.028
BTC 57297.27
ETH 3101.41
USDT 1.00
SBD 2.41