Yeni Raspberry Pi 5, amiral gemisi Raspberry Pi’de ilk kez çift kamera konektörlerini sunuyor. Bu, Raspberry Pi 5’e iki kamera (veya bir kamera ve ekran veya iki ekran) bağlayabileceğimiz anlamına gelir. Peki kameraları nasıl kontrol edeceğiz?
Daha önceki bir Raspberry Pi OS sürümünde tanıtılan libcamera ve Picamera2, kameraları kontrol etmenin iki farklı yoludur. Libcamera kamerayı terminal aracılığıyla kullanmaya odaklanırken, Picamera2 tamamen Python’la ilgili.
Bu nasıl yapılır, çift kamerayla fotoğraf çekmek için her ikisini de nasıl kullanacağımızı öğreneceğiz.
Bu Proje İçin İhtiyacınız Olanlar
Kameraları Bağlama
Raspberry Pi 5, Raspberry Pi form faktörüne birden fazla kamera (CSI) konektörü sunar. Raspberry Pi Hesaplama Modülü IO kartları uzun süredir birden fazla kamerayı desteklemektedir, ancak Raspberry Pi 5 bunları destekleyen ilk “Model B” kartıdır.
Çift konnektörleri kolaylaştırmak için Raspberry Pi 5, normal 22 pinli yerine 15 pinli düz esnek kablolar kullanıyor. Bu daha küçük konektörler Raspberry Pi Zero ile birlikte tanıtıldı ve kameralarınızı bağlamak için adaptörler kolayca temin edilebilir. Tüm resmi Raspberry Pi kameraları 22 pinli konnektörü kullandığından bir adaptör veya uyarlanmış bir kablo kullanmanız gerekecektir.
Uyarlanmış kablolar esasen 22 pimli bağlantıyı 15 pime kadar yoğunlaştırır. Ucuzdurlar ve birden fazla uzunlukta gelirler. Amazon’dan 10 dolardan daha düşük bir fiyata bir avuç dolusu aldık.
Pimoroni’nin bu adaptörü, 22 pinli düz esnek kabloyu 15 pinli kabloya bağlar. Çok sayıda 22 pinli kablonuz varsa bu adaptörü 15 pinli kısa bir kabloyla kullanmak, kameranızı bağlamak için esnek bir yol sunacaktır.
Kameraları Raspberry Pi 5’e Bağlama
1. Raspberry Pi 5’i kapatın ve güç kablosunu çıkarın. Kameraların bağlanması/bağlantısının kesilmesi Raspberry Pi 5 kapalıyken yapılmalıdır. Aksi takdirde Pi’ye ve kameraya zarar verme riskiyle karşı karşıya kalırsınız.
2. Tırnak veya plastik bir alet kullanarak tespit klipslerini yavaşça kaldırın. Klip kırılgandır, bu yüzden dikkatli olun! Yukarı doğru hareket edecek, sonra duracak ve bir tarafa eğilecektir.
3. Kameraların 15 pinli düz esnek kablosunu konektörlere takın. Kablonun altın pinlerinin Ethernet bağlantı noktasına baktığını unutmayın.
4. Raspberry Pi 5’i masaüstüne açın. Kameranın Raspberry Pi 5’e, özellikle de GPIO’ya temas etmediğinden emin olun.
Kameraları Libcamera ile Test Etme
Artık Raspberry Pi 5’imize bağlı iki kameramız var. Biri CAM0’da, diğeri CAM1’de. İlk amacımız kameraların düzgün çalıştığını kontrol etmek ve bunun için libcamera terminal komutunu kullanarak kameraları kullanabildiğimizi ve çıktıyı görebildiğimizi kontrol edeceğiz.
1. CAM 0’a bağlı kamerayı kullanmak için bir terminal açın ve bu komutu girin. Komutun iki argümanı var. Birincisi kullanmak istediğimiz kamera, ikincisi ise gecikme zamanlayıcısı. Varsayılan olarak komut beş saniyelik bir önizleme gösterecektir. -t 0 kullanıldığında önizleme penceresi otomatik olarak kapanmaz. Bunun yerine çıkmak için önizleme penceresini kapatmamız gerekiyor.
libcamera-hello –camera 0 -t 0
2. CAM 0’a bağlı kamerayı kullanmak için ikinci bir terminal açın ve bu komutu girin. Komutun iki argümanı var. Birincisi kullanmak istediğimiz kamera, ikincisi ise gecikme zamanlayıcısı. Varsayılan olarak komut beş saniyelik bir önizleme gösterecektir. -t 0 kullanıldığında önizleme penceresi otomatik olarak kapanmaz. Bunun yerine çıkmak için önizleme penceresini kapatmamız gerekiyor.
libcamera-hello –camera 1 -t 0
3. Her iki kameranın da düzgün çalışıp çalışmadığını kontrol edin. Masaüstünde iki önizleme penceresi görmelisiniz. İstediğiniz çekimi elde etmek için kameraları hareket ettirin.
4. Önizleme pencerelerini kapatın.
Libcamera ile Fotoğraf Çekmek
Libcamera uygulamasının resim / video yakalamak için birkaç farklı yolu vardır.
- libcamera-merhaba: Kamerayı başlatır, kameranın görebildiği şeyin önizleme penceresini görüntüler ve ardından kapanır. Temel olarak kamera projeleri için “Merhaba Dünya”dır. Bu nedenle kameralarımızın çalıştığını test etmek için kullandık.
- libcamera-jpeg: Görüntüleri bir jpeg dosyasına yakalar.
- libcamera-hareketsiz: Libcamera-jpeg’e benzer ancak eski “raspistill” komutunda bulunan özelliklerin çoğunu destekler.
- libcamera-vid: Bir h264 kapsayıcısına video çeker.
- libcamera-ham: Ham Bayer karelerini doğrudan kameradan kaydeder; önizleme penceresi yoktur.
Her kamerada bir görüntü yakalamak için libcamera-jpeg’i kullanacağız. Bu komutlar, işlemi otomatikleştirmek için bir Bash betiğinde de kullanılabilir.
1. CAM 0’a bağlı kamerayla görüntü çekmek için bir terminal açın ve bu komutu girin. Komutun üç argümanı var. Birincisi çıktı dosyasının adı, ikincisi kamera, üçüncüsü ise çekimi çerçevelememiz için bize zaman vermek üzere beş saniyelik bir gecikme (5000 ms) ayarladık.
libcamera-jpeg -o cam0.jpg –camera 0 -t 5000
2. CAM 1’e bağlı kamerayla görüntü çekmek için bir terminal açın ve bu komutu girin. Komutun üç argümanı var. Birincisi çıktı dosyasının adı, ikincisi kamera, üçüncüsü ise çekimi çerçevelememiz için bize zaman vermek üzere beş saniyelik bir gecikme (5000 ms) ayarladık.
libcamera-jpeg -o cam1.jpg –camera 1 -t 5000
3. Dosya yöneticisini kullanarak görüntüleri açın. Görüntüler artık komutların çalıştırıldığı dizine kaydediliyor.
Picamera2’yi Kullanarak Aynı Anda İki Fotoğraf Çekin
Picamera2 Python modülünü kullanarak Raspberry Pi 5’in çift kamera konnektörleri sayesinde aynı anda iki görüntü çekebiliyoruz. Temel olarak Python kodunda her kamerayı kontrol etmek için kullandığımız iki nesne yaratıyoruz. Daha sonra her kameraya başlamasını, bir önizleme penceresi yüklemesini, bir çekimi çerçevelememiz için bize zaman vermesini söylüyoruz, ardından kamera görüntüleri JPEG formatında yakalıyor. Daha sonra kameralarla olan bağlantıyı kapatıyoruz ve önizleme pencerelerini kapatıyoruz.
1. Ana menüden Programlama >> Thonny’yi seçin.
2. Boş belgede Python kodunun iki modülünü içe aktarın. Bunlardan ilki Python ile kameralar arasındaki arayüzümüz olan Picamera2’dir. Ayrıca, görüntü çekilmeden önce çekimin ön izlemesini yapmak için kullanılan Önizleme işlevini de içe aktarıyoruz. İkinci modül ise zamandır, özellikle de kodu duraklatmak için kullanılan uyku fonksiyonudur.
from picamera2 import Picamera2, Preview
from time import sleep
3. İki kamerayı temsil eden iki nesne oluşturun. İlki picam0’dır. Picamera2 fonksiyonunu 0 argümanıyla çağırmak, kamera konnektörünü CAM0’a kullanmak istediğimizi belirtir. İkinci nesne picam1’dir ve CAM1’e bağlı kamerayı kullanır.
picam0 = Picamera2(0)
picam1 = Picamera2(1)
4. Nesneleri kullanarak her kamera için bir önizleme penceresi başlatın.
picam0.start_preview(Preview.QTGL)
picam1.start_preview(Preview.QTGL)
5. Kameraları başlatın. Bu, kameradan canlı yayın göstermek için önizleme pencerelerini tetikleyecektir.
picam0.start()
picam1.start()
6. Kodu on saniye duraklatın. Bu bize kamera çekimlerini çerçevelemek için zaman kazandırır. Biraz daha zamana ihtiyacınız varsa bunu daha yüksek bir değerle değiştirin.
sleep(10)
7. Her kameradaki görüntüleri bir JPEG görüntüsüne yakalayın.
picam0.capture_file("cam0.jpg")
picam1.capture_file("cam1.jpg")
8. Kameraları durdurun.
picam0.stop()
picam1.stop()
9. Önizleme pencerelerini kapatın.
picam0.stop_preview()
picam1.stop_preview()
Tam Kod Listesi: Python ile Çift Kameralar
from picamera2 import Picamera2, Preview
from time import sleep
picam0 = Picamera2(0)
picam1 = Picamera2(1)
picam0.start_preview(Preview.QTGL)
picam1.start_preview(Preview.QTGL)
picam0.start()
picam1.start()
sleep(10)
picam0.capture_file("cam0.jpg")
picam1.capture_file("cam1.jpg")
picam0.stop()
picam1.stop()
picam0.stop_preview()
picam1.stop_preview()