İçindekiler:
- Adım 1: Derinleşmek: Bir Görüntü Akışında Nesne Hareketi Nasıl Tespit Edilebilir?
- Adım 2: Binarizasyon
- 3. Adım: Genişlet
- Adım 4: Konturları (ve Merkezlerini) Arama
- Adım 5: Centorid'in Hareketi ve Nesne Sayma
Video: Raspberry Pi Nesne Sayma: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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?
Ş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
Ç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
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:
Nesne Yönelimli Programlama: Nesne Oluşturma Şekil Delgeç Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: 5 Adım
Nesneye Yönelik Programlama: Nesneler Oluşturma Shape Punch Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: Nesne yönelimli programlamaya yeni başlayan öğrenciler için öğrenme/öğretme yöntemi. Bu, sınıflardan nesne oluşturma sürecini görselleştirmelerine ve görmelerine izin vermenin bir yoludur. Parçalar:1. EkTools 2 inç büyük zımba; katı şekiller en iyisidir.2. Kağıt parçası veya c
Raspberry Pi Nesne Algılama: 7 Adım
Raspberry Pi Nesne Algılama: Bu kılavuz, Raspberry Pi'de TensorFlow'un Nesne Algılama API'sinin nasıl kurulacağına ilişkin adım adım talimatlar sağlar. Bu kılavuzdaki adımları takip ederek, Raspberry Pi'nizi bir P'den canlı videoda nesne algılaması yapmak için kullanabileceksiniz
Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini: 7 Adım (Resimlerle)
Raspberry Pi - OpenCV Nesne Takipli Otonom Mars Gezgini: Bir Raspberry Pi 3, Açık CV nesne tanıma, Ultrasonik sensörler ve dişli DC motorlar ile güçlendirilmiştir. Bu gezici, eğitildiği herhangi bir nesneyi takip edebilir ve herhangi bir arazide hareket edebilir
ÇOKLU KAMERA İLE RASPBERRY PI Pi NESNE TESPİTİ: 3 Adım
BİRDEN FAZLA KAMERA İLE RASPBERRY PI Pi NESNE TESPİTİ: Başlığın kendisi öğreticinin asıl amacının ne olduğunu gösterdiğinden, girişi kısa tutacağım. Bu adım adım talimatta, 1-pi kamera ve en az bir USB kamera veya 2 USB kamera gibi birden fazla kamerayı nasıl bağlayacağınızı açıklayacağım.
Nesne Yönelimli Programlama: Nesne Oluşturma Makas Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: 5 Adım
Nesne Yönelimli Programlama: Nesne Oluşturma Öğrenme/Öğretme Yöntemi/Teknik Makas Kullanarak: Nesne yönelimli programlamaya yeni başlayan öğrenciler için öğrenme/öğretme yöntemi. Bu onların sınıflardan nesne yaratma sürecini görselleştirmelerine ve görmelerine izin vermenin bir yoludur. Parçalar: 1. Makas (her türlü olur). 2. Kağıt veya karton parçası. 3. İşaretleyici.