İçindekiler:

Raspberry Pi Nesne Sayma: 5 Adım
Raspberry Pi Nesne Sayma: 5 Adım

Video: Raspberry Pi Nesne Sayma: 5 Adım

Video: Raspberry Pi Nesne Sayma: 5 Adım
Video: Raspberry Pi ve SSD Mobile Net ile Nesne Tanıma 2024, Temmuz
Anonim
Raspberry Pi Nesne Sayma
Raspberry Pi Nesne Sayma

Bilgisayar görüşü, şüphesiz, harika bir şey! Bunu kullanarak, bir bilgisayar, karmaşık, kullanışlı ve havalı uygulamaların geliştirilmesine izin veren, etrafındaki ortamı daha iyi "görme" ve algılama yeteneği kazanır. Yüz tanıma ve tanıma, nesne izleme ve nesne algılama gibi uygulamalar, bilgisayarla görme alanındaki gelişmeler sayesinde günlük faaliyetlerimizde giderek daha fazla yer almaktadır.

Bilgisayarlı görü çerçevelerinin ve araçlarının ne kadar gelişmiş ve erişilebilir olduğu göz önüne alındığında, bu makalede açıklanan uygulama iyi uyuyor: hareket halindeki nesneleri saymak için basit bir Raspberry PI ve OpenCV adlı ücretsiz ve açık kaynaklı bir bilgisayarlı görü çerçevesi kullanmak, daha kesin olarak ne kadar nesneler belirli bir izlenen bölgeye girer ve çıkar.

Adım 1: Derinleşmek: Bir Görüntü Akışında Nesne Hareketi Nasıl Tespit Edilebilir?

Derinleşmek: Bir Görüntü Akışında Nesne Hareketi Nasıl Tespit Edilebilir?
Derinleşmek: Bir Görüntü Akışında Nesne Hareketi Nasıl Tespit Edilebilir?

Şimdi görüntü işleme işlerinde daha derine inme zamanı:

bazı web kamerası akış görüntüleri nasıl alınır ve oraya bir şeyin taşındığını tespit eder

Beş adımdan oluşur:

Adım 1: Hareket halindeki nesneyi vurgulamak için

Klasik fizikte tanımlandığı gibi, bir şeyin hareket ettiğini veya durduğunu anlamak için bir referans gereklidir. Burada, bir şeyin hareket edip etmediğini belirlemek için hemen hemen aynıdır: her bir web kamerası akışı yakalanan kare bir referans kare ile karşılaştırılacaktır. Bir şey farklıysa, bir şey taşındı. Kulağa geldiği kadar basit.

Bu referans çerçevesi en mükemmel koşullarda yakalanmalıdır (örneğin, hareket eden hiçbir şey). Görüntü işleme dünyasında, yakalanan bir çerçeve ile bir referans çerçevesi arasındaki bu karşılaştırma, arka plan çıkarma adı verilen bir teknikten oluşur. Arka plan çıkarma, yakalanan çerçeveden ve referans çerçeveden tam anlamıyla pikselden piksele renk bilgisinin çıkarılmasından oluşur. Bu nedenle, bu işlemden elde edilen görüntü, yalnızca bu iki kare arasında neyin farklı olduğunu (veya neyin hareket ettiğini / hareket ettiğini) daha fazla ayrıntıyla vurgulayacak / gösterecek ve görüntüdeki diğer her şey siyah olacaktır (gri üzerinde sıfır değerinin rengi). -ölçekli piksel). Önemli: Aydınlatma koşulları ve yakalanan web kamerası görüntüsünün kalitesi (yakalama sensörlerinin kalitesi nedeniyle) çerçeveden çerçeveye biraz değişebilir. Referans çerçevesinden ve diğer çerçevelerden "eşit parçaların" arka plan çıkarma işleminden sonra tamamen siyah olmayacağı anlamına gelir. Bu davranışa rağmen, bu projede görüntü işlemenin sonraki adımlarında ciddi sonuçlar yoktur.

Görüntü işleme süresini en aza indirmek için, bir arka plan çıkarma işlemi yapmadan önce, yakalanan çerçeve ve referans çerçeve, gri ölçekli bir görüntüye dönüştürülür. Ama neden? Bu bir bilgi işlem verimliliği sorunudur: birden çok renk (renkli görüntü) sunan bir görüntü, piksel başına üç bilgiye sahiptir: Kırmızı, Mavi ve Yeşil renk bileşenleri (eski ancak altın RGB standardı). Böylece matematiksel olarak her piksel, her biri bir renk bileşenini temsil eden üç değerli bir dizi olarak tanımlanabilir. Bu nedenle, onu tüm görüntüye genişleterek, son görüntü aslında üç görüntü bileşeninin karışımı olacaktır: Kırmızı, Mavi ve Yeşil görüntü bileşenleri.

Onu işlemek için çok çalışmak gerekiyor! Ancak gri tonlamalı görüntülerde her pikselin yalnızca bir renk bilgisi vardır. Bu nedenle, renkli bir görüntünün işlenmesi, gri tonlamalı görüntü durumundan üç kat daha yavaştır (hangi tekniğe bağlı olduğuna bağlı olarak en az üç kat). Ve dahası da var: bazı amaçlar için (bu proje gibi), tüm renkleri işlemek gerekli veya hiç önemli değil. Bu nedenle, şu sonuca vardık: görüntü işleme amacıyla gri tonlamalı görüntülerin kullanılması şiddetle tavsiye edilir. Arka plan çıkarma işleminden sonra Gauss Bulanıklığı filtresi uygulamak gerekir.

Arka plandan çıkarılan görüntü üzerine uygulanan Gauss Bulanıklığı filtresi, hareket eden algılanan nesnenin tüm dış hatlarını yumuşatır. Elbette, görüntü işlemenin sonraki adımlarında yardımcı olacaktır.

Adım 2: Binarizasyon

Binarizasyon
Binarizasyon

Çoğu görüntü işleme durumunda, ikilileştirme, bir görüntüdeki nesneleri / özellikleri vurguladıktan sonra neredeyse zorunlu bir adımdır. Sebep: ikili bir görüntüde, her piksel rengi yalnızca iki değer alabilir: 0x00 (siyah) veya 0xFF (beyaz). Bu, sonraki adımlarda görüntü işleme tekniklerini uygulamak için daha da az "bilgisayar gücü" gerektirmek için görüntü işlemeye çok yardımcı olur. Binarizasyon, gri tonlamalı görüntünün her piksel rengini belirli bir eşik ile karşılaştırarak yapılabilir. Piksel renginin değeri eşik değerinden büyükse bu piksel rengi beyaz değerini (0xFF), piksel renginin değeri eşik değerinden düşükse bu piksel rengi siyah değerini (0x00) alır. Maalesef eşik değeri seçimi yapmak o kadar kolay değil. Aydınlatma koşulları gibi çevre faktörlerine bağlıdır. Yanlış bir eşik değeri seçimi, tüm adımları daha da mahvedebilir. Bu nedenle, başka herhangi bir işlem yapmadan önce durumunuz için projede bir eşiği manuel olarak ayarlamanızı şiddetle tavsiye ederim. Bu eşik değeri, hareketli nesnenin ikili görüntüde gösterilmesini sağlamalıdır. Benim durumumda, bir eşik yeterli bir seçimden sonra, şekil 5'te gördüğünüzle sonuçlanır.

Şekil 5 - ikili görüntü

3. Adım: Genişlet

Şimdiye kadar, hareketli nesneleri algılamak, onları vurgulamak ve ikilileştirme uygulamak mümkündü, bu da hareketli nesnenin oldukça net bir görüntüsüyle sonuçlanır (= görüntü işleme amaçları için nesnenin oldukça net görüntüsü). Nesne sayımı için hazırlık YAPILMIŞTIR. Buradaki "HERKES" ifadesi, devam etmeden önce yapılması gereken bazı ince ayarlar olduğu anlamına gelir. Bu noktada, nesnelerde "delikler" bulunması için gerçek bir şans vardır (beyaz vurgulanmış nesnede siyah piksel kütleleri). Bu delikler, belirli aydınlatma koşullarından nesne şeklinin bir kısmına kadar herhangi bir şey olabilir. Delikler, gerçek nesnelerin içinde yanlış nesneler "üretebildiğinde" (ne kadar büyük ve nerede olduklarına bağlı olarak), bir görüntüdeki deliklerin varlığının sonuçları, nesnelerin sayımı için felaket olabilir. Bu delikleri ortadan kaldırmanın bir yolu, Dilate adlı bir görüntü işleme Tekniği kullanmaktır. Bunu kullan ve delikler kaybolsun.

Adım 4: Konturları (ve Merkezlerini) Arama

Konturları (ve Merkezlerini) Arama
Konturları (ve Merkezlerini) Arama

Bu noktada, vurgulanan nesnelere sahibiz, içinde delik yok ve bir sonraki adıma hazırız: konturları (ve merkezlerini) aramak. OpenCV'de konturları otomatik olarak algılamak için kaynaklar vardır, ancak algılanan sayaçlar akıllıca seçilmelidir (yalnızca gerçek nesneyi veya nesneleri seçmek için). Bu nedenle, konturları tespit etme kriteri, nesnenin piksel² cinsinden ölçülen alanıdır. Bir kontur bir limitten daha yüksek bir alana sahipse (yazılımda konfigüre edilir), bu nedenle sayılacak gerçek bir nesne olarak düşünülmelidir. Bu alan sınırının/kriterinin seçimi çok önemlidir ve burada yanlış bir seçim yanlış sayım anlamına gelir. Bazı alan değeri limitleri değerlerini denemeli ve kullanımınıza daha uygun olanı kontrol etmelisiniz. Merak etmeyin, bu limitleri bulmak/ayarlamak çok zor değil. Görüntüdeki tüm nesneler seçildiğinde, sonraki adım üzerine bir dikdörtgen çizmektir (bu dikdörtgenin içinde algılanan nesnenin tamamını içermesi gerekir). Ve bu dikdörtgenin merkezi…. nesne merkezi! Belki de "Bu ağırlık merkezinin nesi var?" diye düşünüyorsunuz, değil mi? İşte cevabınız: Nesnenin şekli ne kadar büyük olursa olsun, hareketi ağırlık merkezininkiyle aynıdır. Başka bir deyişle: centroid adı verilen bu basit nokta, nesnenin tüm hareketini temsil eder. Artık saymayı çok kolaylaştırıyor, değil mi? Nesnenin ağırlık merkezinin siyah bir nokta olarak gösterildiği aşağıdaki resme bakın (şekil 6).

Adım 5: Centorid'in Hareketi ve Nesne Sayma

Büyük final: nesnenin merkez koordinatlarını giriş ve çıkış hatlarının koordinatlarıyla karşılaştırın ve daha önce açıklanan sayma algoritmasını uygulayın. Ve hareketli nesnelerin sayımı olacak!

Nihai sonuçBu gönderinin en başında gösterildiği gibi, işte proje şu şekildedir:

Önerilen: