Raspberry Pi kamera modülü ile çektiğim en iyi fotoğraflar
Not: Bu makale Dmitry Maslov tarafından yazılmış olup, ilk olarak Hackster.io‘da yayınlanmıştır.
Bu makalede yeni Raspberry Pi Yüksek Kalite Kamera‘ya göz atacağız, eski V2 kamera ile karşılaştıracağız ve Raspberry Pi’nizde arka plandan insanları ayırmak için bir görüntü segmentasyon modeli eğiteceğiz!
Gerekli Donanım:
- Raspberry Pi Yüksek Kalite Kamera – 12.3 Megapiksel (Sony IMX477)
- C-Mount ile Raspberry Pi Yüksek Kalite Kamera için 8-50mm 3MP Lens
- C-Mount ile Raspberry Pi Yüksek Kalite Kamera için 25mm 10MP Telefoto Lens
- Raspberry Pi 4 Bilgisayar Model B 2GB V1.2 veya Raspberry Pi 4 Bilgisayar Model B 4GB
Yeni HQ kameraların örneğini alacağımızı duyduğumda, hemen videolar çekmek için denemek istedim – eski kamera modülü 8MP olmasına rağmen kötü optiklere ve küçük bir sensör boyutuna sahipti, bu nedenle YouTube videoları ve fotoğrafçılık için pek uygun değildi. HQ sensörün özellikleri iyi görünüyordu – bu arada özellikler neler?
Burada kısalık adına eski v1 modülünü göz ardı edeceğiz ve v2 ile HQ modüllerinin özelliklerini karşılaştıracağız.
Yeni HQ modülü, 4056 x 3040 piksel çözünürlükte sabit resimler ve 1980×1080 piksel çözünürlükte videolar çekebilir. Ben kesinlikle bir fotoğraf uzmanı değilim, ama megapiksellerin her şey olmadığını biliyorum (akıllı telefon reklamlarının size inandırmak istediği gibi) – sensör boyutu ve iyi optikler çok önemlidir. Yeni HQ kamera modülü, mevcut Kamera Modülü v2’ye göre geliştirilmiş düşük ışık performansı için piksel başına yaklaşık %50 daha büyük bir alana sahiptir ve hem C- hem de CS-mount form faktörlerinde değiştirilebilir lenslerle çalışacak şekilde tasarlanmıştır.
Geçen hafta örneği aldığımda, sadece 25mm 10MP Telefoto Lens vardı ve ilk kez Raspberry Pi 4’e bağladığımda ve bazı fotoğraflar çektiğimde oldukça şaşırdım… alnımın fotoğraflarını çektim. Bu bir telefoto lens, bu nedenle uzaktaki nesnelerin fotoğraflarını çekmek için gerçekten iyi – bu nedenle biraz oynadım, dairemdeki nesnelerin güzel yakın çekim fotoğraflarını çektim, ancak eski v2 modülü ile anlamlı bir karşılaştırma yapamadım. İşte çektiğim bazı fotoğraflar:



Bu hafta başka bir lens aldım, 8-50mm 3MP lens ve daha fazla karşılaştırma çekimi yapabildim – çekimler yeni HQ modül kamera modülü, v2 kamera modülü ve 18-135 odak uzunluğuna sahip Canon 700D ile yapıldı.





Ve işte 25mm 10MP Telefoto Lens ile yapılan video kaydı:
Genel olarak görüntü kalitesi DSLR kameralarla çok daha yakın hissediliyor, güzel net çekimler elde edebilirsiniz bulanık arka plan ve net ön plan. Hadi yeni HQ kamerayı bir görüntü segmentasyon modeli ile deneyelim ve biraz sinir ağı görüntü sihri yapalım.
Görüntü segmentasyon modelini eğitmek için aXeleRate, kenarda AI için Keras tabanlı bir çerçeve kullanacağız, bu model görüntüleri iki sınıfa ayıracak: arka plan ve insan. Ardından Keras modelini daha hızlı çıkarım için Raspberry Pi’de kullanılacak.tflite modeline dönüştüreceğiz ve çıkarım sonuçlarını video akışından arka planı bulanıklaştırmak (veya kaldırmak) için kullanacağız.
Anlamsal segmentasyon modelleri (diğer adıyla görüntü segmentasyonu) giriş görüntüsünün her pikselini bir kategoriye sınıflandırır – buna karşılık gelen görüntü sınıflandırma modelleri tüm görüntüyü sınıflandırır ve nesne tespiti modelleri, görüntüde mevcut nesneler için sınırlayıcı kutular çıkarır. aXeleRate’de, görüntü segmentasyonu için SegNet-basic mimarisi kullanılır.

Burada özellik çıkarıcının çıktısı, bizim durumumuzda MobileNet alpha 0.5, bir çözücüye beslenmektedir; bu çözücü, Conv2D ve upsampling katmanlarından oluşur. Upsampling katmanları, havuzlama katmanlarının tam tersidir – özellik haritası boyutunu artırır, azaltmak yerine. Nihai çözücü çıktısı özellik haritaları, piksel bazında sınıflandırma için bir soft-max sınıflandırıcısına beslenir.
Açık hazırladığım Colab defterini açın ve modelinizi eğitmek ve dönüştürmek için oradaki adımları izleyin.
Bu fotoğraf ile doğrulama veri setinden kippah giyen çok karizmatik bir Yahudi adamın fotoğrafı arasında tereddüt ettim.
aXeleRate’in en son sürümünde, .tflite modelleri için birkaç dönüştürücü seçeneği ekledim – bunlar TensorFlow Lite için Eğitim sonrası kuantizasyon belgelerindeki seçeneklerle eşleşiyor.
“tflite_dynamic” Dinamik aralık kuantizasyonudur.
“tflite_fullint” Tam tamsayı kuantizasyonudur ve float geri dönüşü ile birlikte gelir – model hala float giriş ve çıkışlara sahip olacaktır(!)
Eğitim tamamlandıktan sonra, tflite modelini Raspberry Pi’nize kopyalayın ve aşağıdaki komutları çalıştırın.
Demo için bağımlılıkları yükleyin:
python3 -m pip install --user opencv-python numpy flask
En iyi çıkarım hızını elde etmek için, 2.3.0 sürümünde iş parçacığı etkinleştirilmiş en son Tensorflow Lite yorumlayıcısını yüklemeniz gerekiyor. Binaries’i bu Github deposundan indirebilirsiniz.
Ya da kendiniz derleyebilirsiniz.
Daha sonra örnek betikleri indirin ve çalıştırın:
git clone https://github.com/AIWintermuteAI/aXeleRate.gitcd aXeleRatepython example_scripts/raspberry_pi/segnet/segnet_video.py --model path-to-your-model --labels path-to-your-labels-file --source picamera
Her iki durumda da, en son resmi TensorFlow Yorumlayıcı paketini (2.1.0) kullanıyorsanız, segnet_video.py dosyasındaki satırı değiştirmeniz gerekiyor.
self.interpreter = Interpreter(model_file, num_threads = 4)
şu şekilde değiştirin:
self.interpreter = Interpreter(model_file)
Etiket dosyası, aşağıdaki formatta sınıf adlarının bulunduğu bir .txt dosyasıdır: “background”, “human”
Betik çalışmaya başladıktan sonra web tarayıcınızı açın ve canlı akışı görmek için 0.0.0.0:5000 yazın. Optimize edilmiş bir model kullanarak 4 iş parçacığı ile çıkarım hızı ~150 ms saniyede birdir – görüntü işleme de biraz ek yük ekler.
_esyYXMbodJ.jpg?auto=compress%2Cformat&w=740&h=555&fit=max)
İyi bir güç kaynağı kullanmayı unutmayın – 2.1A olarak derecelendirilmiş ucuz bir güç kaynağı kullandığımda düşük voltaj uyarısı aldım ve çıkarım hızı ~300 ms oldu!
Bir sonraki sefere kadar!
