bu Ahududu Pi birçoğuna sahip en iyi aksesuarlar ve bu listede yer alacağı kesin olan yeni Kamera Modülü 3’tür. Raspberry Pi Kamera Modülümüz 3 incelemesihızlı otomatik odaklama ve HDR görüntüleri sevdiğimizi ve bu özellikleri bu nasıl yapılır sizinle paylaşmak istediğimizi söyledik.
Daha önce hiç Raspberry Pi kamera kullanmadıysanız, Picamera2 için başlangıç kılavuzu Pi’nizin harika fotoğraflar çekmesini sağlamak için harika bir başlangıç. Bu nasıl yapılır bölümünde, Kamera Modülü 3’ün odak sistemini Picamera2 ile kullanmanın birçok yolunu keşfedeceğiz ve süreci otomatikleştiren hızlı ve basit bir komut dosyasıyla HDR görüntülerin nasıl çekileceğini öğreneceğiz. Python size göre değilse, Kamera Modülü 3 kullanılarak da kontrol edilebilir. terminal aracılığıyla libcamera.
Otomatik Odaklamayı Tanıma
Otomatik odaklamanın çalıştığı üç mod vardır.
- Manuel: Lensin odağını değiştirmek için kullanıcının LensPosition kontrolünü belirtmesini zorunlu kılmak. Sıfır değeri sonsuz bir odak üretecektir. Odak 1/10 metre (10CM) olarak ayarlanarak 10’a kadar olan değerler kabul edilir.
- Oto: Bir otomatik odaklama döngüsü başlatmak için AfTrigger kullanan tipik otomatik odaklama.
- Sürekli: Kamera, algoritma algıladığında hedefe yeniden odaklanarak bir hedef arayacak.
Proje 1: Sürekli Odağı Kullanma
Sürekli odak, görüntü akışında bir hedef aramak için bir algoritma kullanır. Hedefin yakın (yaklaşık 10 cm) veya uzak olması fark etmez, algoritma hedefi bulur ve kilitlenir. Ama nasıl kullanacağız? Hızlı bir test yapalım. Hedefimize mümkün olan en iyi şekilde odaklanmak için sürekli odak modu kullanacağız. Kameraya tutabileceğiniz bir nesne olması faydalı olacaktır, biz bir dolarlık banknot kullandık.
1. Ana menüden Programlama >> Thonny’yi açın.
2. Picamera2’yi içe aktarın.
from picamera2 import Picamera2
3. libcamera’nın kontrol sınıfını içe aktarın. Bununla kamerayı gereksinimlerimize uyacak şekilde yapılandırabiliriz.
from libcamera import controls
4. Bir nesne oluşturun, picam2 kod ile kameramız arasında bir bağlantı olarak kullanacağımız.
picam2 = Picamera2()
5. Bir önizleme penceresi başlatın. Ön izleme, kameranın çıktısını gördüğümüz yerdir.
picam2.start(show_preview=True)
6. AfMode’u (Otomatik Odak Modu) sürekli olacak şekilde ayarlayın.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
7. Kodu AFtest.py olarak kaydedin.
8. Kodu başlatmak için Çalıştır’a tıklayın. Bir önizleme penceresi görünecektir. Bir nesneyi hareket ettirin, çerçevenin etrafında bir dolarlık banknot seçtik ve odak kaymasını izledik. Nesneyi merceğe yaklaştırmayı deneyin, en yakın odak noktasının 10 santimetre olduğunu unutmayın.
Eksiksiz Kod Listesi
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
Proje 2: Odağı Manuel Olarak Ayarlama
Bazen o harika kareyi elde etmek için ihtiyacımız olan şey sabit bir odak noktasıdır. Sonuçta, bulanık bir karmaşa yakalamak istemiyoruz. Odağı sabitlemek nispeten basittir; aslında o kadar kolay ki önceki örnekteki kodun çoğunu yeniden kullanabiliriz.
1. Farklı Kaydet’i kullanın önceki örnekte to ManualFocusTest.py adlı yeni bir dosya oluşturun
2. LensPosition’ı kullanmak için son satırı değiştirinbu durumda sonsuz odak için değeri 0,0 olarak ayarlayın.
picam2.set_controls("AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.0)
3. Kodu çalıştırın. Uzaktaki nesneler için odağın ne kadar keskin olduğuna dikkat edin, ancak yakından bakıldığında bulanıktırlar.
4. LensPosition değerini 0,5 olarak değiştirin. Bu bize yaklaşık 50 cm odak uzaklığı verecektir.
5. Kodu kaydedin ve çalıştırın. Bir nesneyi kameraya doğru ve kameradan hareket ettirin. Odaklamanın 50 cm civarında nasıl keskinleştiğine dikkat edin.
Eksiksiz Kod Listesi
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.5)
Proje 3: Birden Fazla Görüntü için Hızlı Odaklanma
İster kuş kamerası, ister okul sporları günü veya ev güvenliği olsun, bazen bir dizi keskin görüntü elde etmemiz gerekir. Şans eseri, Kamera Modülü 3’ü bir dizi hızlı fotoğraf çekecek ve otomatik odaklamayı yüksek hıza ayarlayacak şekilde ayarlayabiliyoruz.
1. AfFastFocus.py adlı yeni bir dosya oluşturun
2. Picamera2’yi içe aktarın.
from picamera2 import Picamera2
3. libcamera’nın kontrol sınıfını içe aktarın. Bununla kamerayı gereksinimlerimize uyacak şekilde yapılandırabiliriz.
from libcamera import controls
4. Bir nesne oluşturun, picam2 kod ile kameramız arasında bir bağlantı olarak kullanacağımız.
picam2 = Picamera2()
5. Bir önizleme penceresi başlatın. Ön izleme, kameranın çıktısını gördüğümüz yerdir.
picam2.start(show_preview=True)
6. Otomatik odak modunu Sürekli olarak ayarlayın ve AfSpeed’i Hızlı olarak ayarlayın.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
7. Kamerayı, her çekim arasında yarım saniyelik bir gecikmeyle üç dosya çekecek şekilde ayarlayın. “fastfocus.jpg” dosya adının sonuna 0, ardından 1 ve 2 eklenir. Bize sayısal sırayla üç dosya veriyor.
picam2.start_and_capture_files("fastfocus:d.jpg", num_files=3, delay=0.5)
8. Önizleme penceresini kapatın.
picam2.stop_preview()
9. Kamera bağlantısını kapatın.
picam2.stop()
10. Kodu kaydedin ve çalıştırın. Bir nesneyi kameraya üç farklı mesafede tutun ve odak değiştikçe izleyin, kamera çekim yaparken ön izleme penceresi donar ve sonraki çekim için serbest kalır. Üç çekim yapıldığında önizleme penceresi kapanacaktır.
Eksiksiz Kod Listesi
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("fastfocus-test:d.jpg", num_files=3, delay=0.5)
picam2.stop_preview()
picam2.stop()
Picamera2 ile HDR Görüntü Yakalama
HDR (Yüksek Dinamik Aralık) görüntüleri kolayca yakalanabilir. libcamera. Komutu çalıştırdığımızda sadece –hdr argümanını iletmemiz gerekiyor. Ancak Picamera2 için Python kodumuzu çalıştırmadan önce bir terminal komutu çalıştırmamız gerekiyor.
HDR, görüntülerin dinamik parlaklık aralığını artırır. HDR ile daha derin karanlık ve daha parlak görüntüler elde ediyoruz. Bu, her biri farklı pozlamalara sahip aynı sahnenin birden fazla görüntüsünü yakalayarak çalışır. Bu görüntüler daha sonra tüm aralığı kapsayan tek bir görüntüde birleştirilir. Kamera Modülü 3, HDR görüntüleri yakalayabilir ancak tam 12 MP çözünürlükte yakalayamaz. Bunun yerine 2304 x 1296 piksel çözünürlüğe sahip 3MP bir görüntü elde ediyoruz.
Testimiz için kodu yeniden kullanacağız. AfFastFocus.py Proje, bir dizi HDR görüntüsü yakalamak için. Kullanıcı etkileşimi olmadan HDR ayarını açıp kapatan bir terminal komutunu çalıştırmak için Python’un OS kitaplığını da kullanacağız. Bu, HDR ayarlarını açıp kapatmayı unutmayacağımız anlamına gelir.
1. HDRAfFastFocus.py adlı yeni bir dosya oluşturun.
2. Picamera2’yi içe aktarın.
from picamera2 import Picamera2
3. libcamera’nın kontrol sınıfını içe aktarın. Bununla kamerayı gereksinimlerimize uyacak şekilde yapılandırabiliriz.
from libcamera import controls
4. İşletim sistemi modülünü içe aktarın. Bu, kodumuzun temel işletim sistemiyle, bu durumda Raspberry Pi OS (Linux) ile etkileşime girmesini sağlar.
import os
5. Bir nesne oluşturun, picam2 kod ile kameramız arasında bir bağlantı olarak kullanacağımız.
picam2 = Picamera2()
6. Kamerayı HDR kullanacak şekilde ayarlamak için os modülündeki sistem işlevini kullanın. Picamera2, HDR’yi destekler, ancak doğrudan modülde desteklemez. Sorun, kamera ile Linux video sistemi arasındaki çekirdek arayüzü olan V4L2 ile ilgilidir. Şu anda, bu kamerayla HDR için hazır destek sunmuyor, bu nedenle onu Picamera2’de kullanılabilir hale getirmek için bu hızlı geçici çözümü çalıştırmamız gerekiyor.
7. Python Kabuğuna bir mesaj yazdırın bize HDR’nin açık olduğunu bildiriyor.
print("Setting HDR to ON")
8. Bir önizleme penceresi başlatın. Ön izleme, kameranın çıktısını gördüğümüz yerdir.
picam2.start(show_preview=True)
9. Otomatik odak modunu Sürekli olarak ayarlayın ve AfSpeed’i Hızlı olarak ayarlayın.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
10. Kamerayı, her çekim arasında bir saniye gecikme olacak şekilde üç dosya çekecek şekilde ayarlayın. “HDRfastfocus.jpg dosya adı, her dosyaya 0, ardından 1 ve 2 ekler. Bize sayısal sırayla üç dosya veriyor. Kameraya önceki görüntüyü kaydetmesi ve ardından odağı bir sonraki görüntüye ayarlaması için zaman vermek amacıyla her çekim arasındaki gecikmeyi iki katına çıkarırız. 0,5 gecikmeyle test ettik ve çekimlerimiz bazen biraz fazla bulanıktı.
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
11. Önizleme penceresini kapatın.
picam2.stop_preview()
12. Kamera bağlantısını kapatın.
picam2.stop()
13. Kullanıcıya bir mesaj yazdır HDR’nin artık kapalı olduğunu ve ardından os.system’i kullanarak komutu çalıştırın.
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
14. Kodu kaydedin ve çalıştırın. Bir nesneyi kameraya üç farklı mesafede tutun ve odak değiştikçe izleyin, kamera çekim yaparken ön izleme penceresi donar ve sonraki çekim için serbest kalır. Üç çekim yapıldığında önizleme penceresi kapanacaktır.
Eksiksiz Kod Listesi
from picamera2 import Picamera2
from libcamera import controls
import os
picam2 = Picamera2()
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=1 -d /dev/v4l-subdev0")
print("Setting HDR to ON")
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
picam2.stop_preview()
picam2.stop()
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")