Bir park yeri bulmak için otoparkta kaç kez dolaşırsınız. Telefonunuz size en yakın park yerinin tam olarak nerede olduğunu söyleyebilirse, bu çok kullanışlı olacaktır!
Derin öğrenme ve OpenCV kullanmanın çözülmesi nispeten kolay bir problem olduğu ortaya çıktı. Tek gereken park yerinin havadan çekilmiş görüntüsü. Aşağıdaki GIF'e bakın, modelim Los Angeles Havaalanı otoparkındaki mevcut tüm park yerlerini vurgular ve mevcut durak sayısını gösterir. En önemlisi, gerçek zamanlı olarak çalışabilir!
Video yükleniyor ...
Gerçek zamanlı park yeri tespiti
Adımlara genel bakış
Bu park algılama modelini oluşturmanın iki ana adımı vardır:
1. Mevcut tüm park alanlarının yerini tespit edin
2. Park yerinin boş veya dolu olup olmadığını belirleyin
Buradaki kamera görüntüsü yüklendiğinden, her park yeri için bir kerelik haritalama kullanabiliriz. Her park yerinin yerini öğrendikten sonra, boş olup olmadığını tahmin etmek için derin öğrenmeyi kullanabilirsiniz. Bu blogda yer alan adımların üst düzey bir özetini paylaştım. Ayrıntılı kod parçacıklarıyla ilgileniyorsanız, lütfen web sitemdeki blogu kontrol edin.
Mevcut tüm park alanlarının yerini tespit edin
Park alanlarını tespit etmek için kullandığım temel fikir, buradaki tüm park alanlarının yatay çizgiler olması ve sütundaki park alanlarının kabaca eşit olmasıdır. İlk önce kenar görüntüsünü elde ederdim. Park yeri olmayan alanları da kapattım. aşağıdaki gibi:
Canny kenar algılama çıkışı
Daha sonra kenar görüntüsünü yaptım ve tanınabilecek tüm çizgileri çizdim. Yatay çizgileri sadece sıfıra yakın eğimli çizgileri seçerek izole ediyorum. Lütfen aşağıdaki hough dönüşüm çıktısına bakın:
Hat algılama için HoughLines kullanın
Gördüğünüz gibi, Hough hattı durma hatlarını tanımlamada oldukça iyi bir iş çıkarıyor, ancak çıktı temiz değil - birden çok durdurma hattı birden çok kez algılanıyor ve bazıları gözden kaçıyor. Nasıl temizlemeliyiz?
Sonra buradan başlamak için gözlem ve sezgiyi kullanıyorum. Hough hattının döndürdüğü koordinatları kullanarak, ana park şeridini belirlemek için x gözlemlerini topladım. Kümeleme mantığı, tespit edilen şerit çizgisinin x koordinatındaki boşlukları belirleyerek çalışır. Bu, burada 12 park şeridi bulmamı sağlıyor. aşağıdaki gibi
Hough hattından x koordinatlarını toplayarak park şeritlerini tanımlayın
Tüm bunlar karmaşık görünüyorsa endişelenmeyin, kodu github'daki jupyter not defterinde adım adım belgeledim.
Artık tüm park şeritlerinin yerini çok iyi biliyorum, tüm park yerlerinin aynı büyüklükte olduğunu varsayarak her park yerini belirliyorum, bu mantıklı bir varsayım. Noktalar arasındaki sınırların olabildiğince doğru bir şekilde yakalanmasını sağlamak için sonuçları gözlemledim. Sonunda her park yerini işaretleyebildim. aşağıdaki gibi.
Her park yeri işaretlenmiştir
Şimdi işimiz bitti - her noktaya bir kimlik atayabilir ve koordinatlarını sözlüğe kaydedebiliriz. Bu sözlüğü daha sonra almak için aldım. Bu mümkündür, çünkü kamera takılıyken, her noktanın konumunu tekrar tekrar kendi görünümünde hesaplamamız gerekmez.
Spotun işaretlenip işaretlenmediğini belirleyin
Artık bir park haritamız olduğuna göre, o yerin dolu olup olmadığını şu şekillerde belirleyebiliriz:
1. Noktanın piksel renginin boş park alanının rengiyle hizalı olup olmadığını kontrol etmek için OpenCV'yi kullanın. Bu basit bir yöntemdir, ancak hataya açıktır. Örneğin, aydınlatmadaki bir değişiklik, boş bir park alanının rengini değiştirecek ve bu da bu mantığın gün içinde çalışmasını zorlaştıracaktır. Ek olarak, mantık gri arabayı mümkünse boş bir park yeri olarak karıştıracaktır.
2. Tüm arabaları tanımlamak için nesne algılamayı kullanın ve ardından arabanın konumunun park alanıyla örtüşüp örtüşmediğini kontrol edin. Bunu denedim ve gerçek zamanlı çalışan bir nesne algılama modelinin küçük boyutlu nesneleri algılamanın gerçekten zor olduğunu gördüm. Tespit edilen arabaların% 30'undan fazlası yok
3. Her park alanını görüntülemek ve dolu olup olmadığını tahmin etmek için CNN'yi kullanın. Bu yöntem sonuçta en iyi sonucu verir
Bir CNN oluşturmak için, araçlı ve araçsız park alanlarının resimlerine ihtiyacımız var. Her noktanın görüntülerini çıkarıp bir klasöre kaydettim ve sonra bu görüntüleri dolu veya dolu olarak gruplandırdım. Bu eğitim klasörünü de Github'da paylaştım.
1280x720 görüntüde yaklaşık 550 park yeri olduğundan, her bir park alanının boyutu yalnızca yaklaşık 15x60 pikseldir. Aşağıdaki boş ve dolu noktaların örnek resmine bakın:
İşgal etmek
Boş nokta
Ancak işgal edilen noktalar ve boş noktalar çok farklı göründüğünden, CNN zorlu bir problem olmamalı
Ancak, bu iki sınıf için yalnızca yaklaşık 550 resmim var, bu yüzden VGG'nin ilk 10 katmanını alarak ve VGG modelinin çıktısına tek bir softmax katmanı ekleyerek transfer öğrenmeyi kullanmaya karar verdim. Bu transfer öğrenme modelinin kodunu burada bulabilirsiniz. Modelin doğrulama doğruluğuna ulaşıldı % 94 . aşağıdaki gibi:
CNN model testi ve eğitim doğruluğu
Şimdi, bir park yeri detektörü oluşturmak için park yeri algılayıcıyı ve CNN tahmincisini birleştiriyorum. Çok doğru çalışıyor.
Boş tahmin