Bu yazıda, yoldaki potansiyel tehlikeleri tespit etmek ve çarpışmaları önlemek için bisikletçiler için gelişmiş bilgisayarlı görme algoritmasına sahip bir akıllı kamera geliştirme konusundaki kendi deneyimimi paylaşmak istiyorum. Aşağıda sıfırdan prototip oluşturma ve video veri toplama sürecinin tamamını kısaca anlattım. Hem Gömülü hem de Makine Öğrenimi mühendisleri için ilginç olabilir. Başlamadan önce küçük bir spoiler: Daha sonra toplanan veri seti açık kaynaklıydı.
20'si kamuya açık yollarda olmak üzere 30 yıllık deneyime sahip hevesli bir bisikletçiyim. Bir keresinde yolda trafik kazası geçirdim: yandan bir araba bisikletimin üzerinden geçti. Şans eseri hafif bir morluk ve burkulmayla kurtuldum. Bu yüzden özellikle bisikletlilerin halka açık yollarda yaşadığı güvenlik sorunlarını anlıyorum.
Sorunun çözümlerinden biri, olayları yakalamak için bisiklet kameraları kullanmaktır. Yolda bisiklet sürmek, bildiğimiz gibi, bakış açınızı yakalayan bir kamerayla donatıldığında daha güvenli hale gelir. Sürücüyle yaşanan bir tartışmada kamera görüntülerinin alınması ek bir koruyucu katman görevi görebilir. Kanıt olmadan, etik olmayan bir sürücü sorumluluğu inkar edebilir, ancak bisikletçiler için bir kameraya sahip olmak böyle bir durumda cankurtaran görevi görebilir. Birleşik Krallık'ta, aksiyon kamerası görüntülerinin polise gönderilmesini kolaylaştıran, süreci kolaylaştıran ve komplikasyonları azaltan Nextbase adında bir web sitesi bile var.
Başka bir deyişle, kazayı kamerada yakalayabilirsiniz ancak itiraf etmelisiniz ki tehlikeli bir durumdan kaçınmak her zaman daha iyidir. Projeye başladığımda yollarda tehlikeli durumların önlenmesine yönelik proaktif çözümler yoktu. Bu yüzden akıllı bisiklet arka ışığımı kamerayla oluşturmaya karar verdim. Projenin misyonu bisikletçiler arasındaki ölüm ve yaralanmaları azaltmaktı.
Başlangıçta cihazın, bisikletçiler için yoldaki potansiyel tehlikeleri tespit edebilen, medyada genellikle "yapay zeka" olarak adlandırılan gelişmiş bir bilgisayarlı görme algoritmasıyla ayarlanması planlanmıştı. Konsepti basit kelimelerle açıklayayım: Yazılım bir tehlike tespit ederse cihaz, sürücülerin dikkatini çekmek için yanıp sönen bir ışık yayar. Ayrıca güvenlik sistemi, çarpışma öncesinde arkadaki araca yüksek bir ses vererek çarpışmanın önlenmesine yardımcı oluyor.
Nesne algılama sinir ağımı (algı için kullanılan bilgisayarlı görme algoritmasının bir parçası) eğitmek için, arka görüş kameraları tarafından yakalanan halka açık yollardan farklı senaryolardan oluşan geniş bir veri kümesi bulmam gerekiyordu. Ne yazık ki başladığımda bu tür açık kaynaklı veri kümeleri web'de mevcut değildi.
Sürüş davranışına ilişkin çalışmaların tamamı ulaşım mühendisliğinde son derece faydalıdır; istatistiksel analiz için veri toplama, sürüş modellerinin tanımlanması ve modelleme parametrelerinin tahmin edilmesi gibi çeşitli amaçlara hizmet eder. Veriler ve modeller, karayolu güvenliği analizi, trafik simülasyonu için mikroskobik modeller, tahmin ve kontrol ve gelişmiş sürüş destek sistemleri için kontrol mantığı dahil olmak üzere çeşitli alanlarda uygulanabilir.
Devam edersek, bu proje üzerinde çalışırken, 2021'deki ilk MVP kullanıcılarının arka görüş kameraları tarafından yakalanan Ukrayna kamu yollarından veri kümesini oluşturduğumu söylemeliyim.
Bu tür veri kümelerinin kamuya açık olmasının kamusal ve toplumsal önemini tamamen anladığımdan, çalışmamın sonuçlarını buraya yükledim.
Sinir ağına kazaları tahmin etmeyi öğretmek için çok fazla veri toplamam gerekiyordu. Bu durumda, ilk beta testçilerime sürüşlerini kaydetmeleri için vermek üzere kamera prototipleri geliştirmem gerekiyordu. Neyse ki, bisiklet topluluğu ağım çok sayıda güvenli yol aktivistini içeriyor. Geriye kalan tek şey birkaç cihazı bir araya getirerek onları ilk kullanıcılarıma teslim etmekti.
Aşağıda geliştirme sürecini kısaca anlatıp spesifik teknik çözümlerin seçilmesinin mantığını açıklayayım.
Donanım konfigürasyonu: kasa 3 boyutlu olarak basılmıştır. Platform olarak Raspberry Pi 3B+ Bilgisayar modülü seçildi ve kasayı kompakt ve hafif tutmak için özel PCB'ler yapıldı.
Kamera için standart bir Raspberry Pi IMX219 sensörü kullandım ancak 120 derecelik bir lens kullandım. Yolda daha iyi görüş sağlamak için yüksek güçlü LED ışıklar ve kırmızı renkli lens (ayrıca 3D baskılı) eklendi.
Cihazda sinir ağlarını çalıştırmak için düşük maliyetli ve güçlü bir 4 TOP sinir hızlandırıcı olan Google Coral Edge TPU'yu (fotoğraflar dahil) kullandım. TPU USB üzerinden bağlandı.
Tüm bu elektronikler maksimum yükte (video kaydı, gerçek zamanlı sinir ağı çalışması ve LED'in yanıp sönmesi) 7-8W tüketiyordu. 4-5 saatlik çalışmayı sağlamak için 8Ah Li-ion pil (kasanın iç fotoğrafları dahil) kullanıldı.
İşletim sistemi için, daha iyi desteklendiğinden ve ihtiyaç duyduğum tüm sürücülerin herhangi bir sorun olmadan kolayca kurulduğundan standart Raspbian'ı kullandım. İşletim sistemini başlattıktan sonra yazmaya karar verdiğim ana kod C++ idi.
Bununla başlamanızı önermiyorum; deneme amaçlı olarak Python'un yeni başlayanlar için daha iyi bir seçenek olabileceğine inanıyorum. Ancak Raspberry Pi'deki sınırlı kaynakların tamamını maksimum donanım özellikleriyle etkili ve hassas bir şekilde kontrol etmek istiyorsanız, bunu C/C++ ile yazmaya değer.
Bu projede yaptığım en ilginç çözümlerden biri OTA (over-the-air update) mekanizması ve cihazlardan video kayıtlarını toplama mekanizmasıdır.
Süreç şuna benziyordu: Kullanıcı yolculuğunu bitirip eve geldiğinde, evdeki Wi-Fi'ye bağlanan bir USB WiFi adaptörünü takıyor ve cihaz senkronizasyona başlıyor.
Tüm videolar Google Drive aracılığıyla senkronize edildi - Her cihaz için ayrı bir Google hesabı oluşturdum. Benim durumumda Google Drive'ın pek çok avantajı var: Google Drive web arayüzü aracılığıyla videoları anında izleyebiliyordum, yeni dosyaları manuel olarak silmek veya eklemek kolaydı ve sonuncu ama bir o kadar da önemlisi, deneylerim için ücretsizdi ( her hesap için 20 GB'a kadar). ( Google , lütfen kötü olmayın, yeni doğan girişimimde yalnızca dört MVP vardı).
H.264 video kodlamasının kullanılması, yüzlerce videonun kapasite tükenmeden tek bir Google Drive'da tutulmasına yardımcı olur.
OTA sürecini anlatayım: Yeni bir firmware derledikten sonra onu bir Google sürücüsüne yüklüyorum. Google Drive ile bir sonraki senkronizasyon sırasında, cihaz daha yeni donanım yazılımı sürümünü indirir ve eskisinin yerini alır.
Bunun için basit bir gdrive yardımcı programını kullandım. Yeni bir ürün yazılımı dosyası yüklemek için kullandığım kod:
gdrive upload -p “gdrive folder id” “file”
Aşağıda bir cihaza yeni ürün yazılımı yüklemek için bir kod satırı veriyorum:
gdrive update “id” “file”
Donanım yazılımı sürümünü kontrol ettikten sonra video senkronizasyonu gerçekleşir ve tüm yeni kayıtlar Google Drive'a yüklenir.
Videolar bir cihazdan diske şu şekilde indirilir:
gdrive sync upload “local folder” “gdrive folder id”
Günde bir kez, tüm Google Drive'ları yerel klasörlerimle senkronize etmek için sunucumda bir komut dosyası çalıştırıyordum ve tüm yeni videoları indiriyordum.
gdrive sync download “gdrive folder id” “local folder”
Böylece, birkaç aylık çalışmanın ardından cihazlarım etiketlemeye hazır 200'den fazla video topladı.
Videoyu topladıktan sonra işledim, filtreledim ve veri setini oluşturdum. Daha sonra manuel etiketleme için küçük bir ekip topladım. Ekip, her fotoğrafı etiketleyen 4 kişiden oluşuyordu.
Sonunda daha önce de belirttiğim gibi veri setini açık kaynağa verdim. Bağlantıyı kullanarak bulabilirsiniz: GitHub bağlantısı.
Açık kaynaklı veri setlerinin araştırma topluluğu için değerli bir kaynak olduğuna ve karayolu güvenliği alanında yeni algoritma ve modellerin geliştirilmesine büyük katkı sağlayabileceğine inanıyorum.