Ne zaman Raspberry Pi OS taşındı Debian Buster’a dayalı olmaktan, bullseye, geçiş en yumuşak değildi. Uzun yıllar Raspberry Pi OS, resmi Raspberry Pi kamerasına erişmek için üç araç kullandı. İlk ikisi, Linux terminali aracılığıyla kameraya kontrol ve erişim sunan raspistill / raspivid idi.
Kamerayla çalışmak için güçlü ve esnek bir yoldu, her ikisi de video efektleri oluşturun ve video akışı yapın ekstra çalışma olmadan. Diğer araç, PiCamera adlı topluluk tarafından oluşturulan bir projeydi. tarafından oluşturuldu Dave Jones, Picamera bir topluluk projesinden önemli bir araca dönüştü. Picamera, kamerayla etkileşim kurmak için tamamen Python aracını sundu ve Python’u temel aldığından, kamerayı projelerimize karıştırabileceğimiz anlamına da geliyordu.
Bullseye’a geçişle birlikte Picamera’nın ne yazık ki kırıldığını gördük. Raspberry Pi LTD, bir teklif sunacak kadar ileri gitti. Buster’ın “eski” versiyonu Picamera ve güvenlik güncellemeleri ile. Bu, geliştiricileri Picamera2 üzerinde çalışırken geçici bir önlemdi. İle Raspberry Pi OS’nin Eylül 2022 sürümü artık projelerimizde kullanabileceğimiz çalışan bir Picamera2 modülümüz var.
Bu nasıl yapılır’da nasıl kullanılacağını öğreneceğiz Picamera2’nin oldukça muhteşem API’si [pdf] görüntü yakalamak, video kaydetmek ve bir görüntü yakalama aracı olarak girdiye tepki vermek için GPIO ile çalışmak.
İhtiyacınız olacak projeler için
Raspberry Pi Kameranızı Bağlama
Raspberry Pi kamera, en iyi Raspberry Pi aksesuarları neredeyse Pi bizimle olduğu sürece. Raspberry Pi’nin neredeyse her modelinde bir kamera (CSI) konektörü bulunur (bir istisna, Raspberry Pi Zero’nun ilk modelidir) ve bu, kameranın hızla Pi’niz için olmazsa olmaz bir aksesuar haline geldiği anlamına gelir. Aynı şey hala geçerli, teşekkürler resmi HQ kamera çok daha iyi görüntü kalitesi ve bir dizi değiştirilebilir lens sunar.
Herhangi bir resmi kamerayı Raspberry Pi’ye bağlamak kolaydır, sadece aşağıdaki adımları izleyin.
3. Kabloyu takın mavi sekme USB / Ethernet bağlantı noktasına bakacak şekilde.
4. Sekmeleri yavaşça aşağı kaydırın Kabloyu yerine kilitlemek için
5. Kamerayı sabitleyin / monte edin böylece devrilip Pi’ye veya GPIO’suna dokunmaz. Bir yöntem, modelleme kil / blu tack kullanmaktır.
Picamera2 yazılımını yükleme
1. Pi’yi önyükleyin.
2. Bir terminal aç ve yüklü yazılımı güncelleyin.
sudo apt update
sudo apt upgrade -y
3. Picamera2 Python3 modülünü kurun. En son Raspberry Pi OS sürümleri için (Eylül 2022 ve sonrası) önceden yüklenmiş olarak gelir, ancak bu komut aynı zamanda sürümünüzü en son sürüme güncelleyecektir.
sudo apt install -y python3-picamera2
Picamera2 ile Fotoğraf Çekme
Picamera2 ile fotoğraf çekmek, modül ile gerçekleştirebileceğiniz en temel görevdir. Tasarım gereği, kullanımı basit olacak şekilde yaratılmıştır, ancak basitliğin altında, ihtiyaçlarımıza göre ayarlayabileceğimiz karmaşık bir modül vardır.
Bu projede, çekimi çerçevelemek için bir önizleme kullanarak bir görüntü yakalayacağız.
1. Thonny’yi açın. Ana menüde bulabilirsiniz.
2. Yeni bir dosyada, Önizleme sınıfıyla birlikte Picamera2 modülünü içe aktarın. Yeni bir satırda zaman modülünü içe aktarın. Picamera2 modülü bize kameranın kontrolünü sağlayacak ve önizleme görüntüsünün ekranda ne kadar kalacağını kontrol etmek için zaman kullanılıyor.
from picamera2 import Picamera2, Preview
import time
3. Bir nesne oluşturun, picam2, Picamera2 modülüne referans vermek ve kamerayı kontrol etmek için kullanılır.
picam2 = Picamera2()
4. Yeni bir nesne oluşturun, camera_config ve hareketsiz görüntü çözünürlüğünü (ana) 1920 x 1080’ye ve 640 x 480 boyutunda “düşük” bir görüntüye ayarlamak için kullanın. Bu alçaltılmış görüntü, bir çekimi çerçevelerken önizleme görüntüsü olarak kullanılır.
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (640, 480), display="lores")
5. Yapılandırmayı yükleyin.
picam2.configure(camera_config)
6. Önizleme penceresini başlat ve sonra kamerayı başlatın.
picam2.start_preview(Preview.QTGL)
picam2.start()
7. Kodu iki saniye duraklatın.
time.sleep(2)
8. Bir görüntü yakalayın ve test.jpg olarak kaydedin.
picam2.capture_file("test.jpg")
9. Kodu camera-test.py olarak kaydedin ve başlatmak için Çalıştır’ı tıklayın. Bir önizleme penceresi görünecek, çekiminizi çerçevelemek için bunu kullanın. İki saniye çok kısa bir gecikmeyse, ihtiyaçlarınızı karşılamak için gecikmeyi değiştirin.
10. Sistem Dosya Yöneticisini açın ve resmi görüntülemek için test.jpg’ye çift tıklayın.
Komple Kod Listeleme
from picamera2 import Picamera2, Preview
import time
picam2 = Picamera2()
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (640, 480), display="lores")
picam2.configure(camera_config)
picam2.start_preview(Preview.QTGL)
picam2.start()
time.sleep(2)
picam2.capture_file("test.jpg")
Picamera2 ile Video Kaydetme
HD video kaydı, artık hafife aldığımız bir şey. Aynısı, çok sayıda resmi (ve resmi olmayan) kamera modeli sayesinde Raspberry Pi için de geçerlidir. Picamera2 ile farklı kodlayıcılar kullanarak çeşitli çözünürlüklerde video kaydedebiliriz.
Bu projede, akışı daha düşük çözünürlüklü bir pencerede önizlerken basit bir 1080P video akışının nasıl kaydedileceğini göstereceğiz.
1. Thonny’yi aç ve yeni bir dosya oluşturun. Thonny’yi ana menüde bulabilirsiniz.
2. H264 kodlayıcıyı Picamera2 modülünden içe aktarın.
from picamera2.encoders import H264Encoder
3. Önizleme sınıfıyla birlikte Picamera2 modülünü içe aktarın. Ardından zaman modülünü içe aktarın.
from picamera2 import Picamera2, Preview
import time
4. Bir nesne oluşturun, picam2, Picamera2 modülüne referans vermek ve kamerayı kontrol etmek için kullanılır.
picam2 = Picamera2()
5. Yeni bir nesne oluşturun, video_config ve hareketsiz görüntü çözünürlüğünü (ana) 1920 x 1080 olarak ayarlamak için kullanın. ve 640 x 480 boyutunda bir “alçak” görüntü. Bu alçaltılmış görüntü, bir çekimi çerçevelerken önizleme görüntüsü olarak kullanılır.
video_config = picam2.create_video_configuration(main="size": (1920, 1080), lores="size": (640, 480), display="lores")
6. Yapılandırmayı yükleyin.
picam2.configure(video_config)
7. H264 kodlayıcının bit hızını ayarlayın.
encoder = H264Encoder(bitrate=10000000)
8. Çıktı dosyasını test.h264 olarak ayarlayın. Bu, videoyu içeren bir dosya oluşturacaktır.
output = "test.h264"
9. Önizleme penceresini başlatın, ardından kodlayıcı ayarlarını kullanarak kayda başlayın ve videoyu çıktı dosyasına kaydedin.
picam2.start_preview(Preview.QTGL)
picam2.start_recording(encoder, output)
10. On saniyelik video kaydetmek için uyku modunu kullanın. Önceki kayıt komutu, engelleyici bir kod satırı değildir. Bir uyku komutu kullanarak, saniyenin bir bölümünden sonra kaydın durmasını engelleriz.
time.sleep(10)
11. Kamera kaydını durdurun ve önizleme penceresini kapatın.
picam2.stop_recording()
picam2.stop_preview()
12. Kodu video-test.py olarak kaydedin ve başlatmak için Çalıştır’ı tıklayın. Önizleme penceresi görünecek ve bir video kaydetmek için on saniyeniz olacak.
13. Videoyu görüntüleyin.Test.h264’ü bularak Dosya Yöneticisinde oraya ulaşabilirsiniz. Ve VLC’de oynatmak için video dosyasına çift tıklayın.
Komple Kod Listeleme
from picamera2.encoders import H264Encoder
from picamera2 import Picamera2, Preview
import time
picam2 = Picamera2()
video_config = picam2.create_video_configuration(main="size": (1920, 1080), lores="size": (640, 480), display="lores")
picam2.configure(video_config)
encoder = H264Encoder(bitrate=10000000)
output = "test.h264"
picam2.start_preview(Preview.QTGL)
picam2.start_recording(encoder, output)
time.sleep(10)
picam2.stop_recording()
picam2.stop_preview()
Raspberry Pi’de Resim Çekmek için Tetik Kullanma
Kamera tetikleyicileri, klasik bir Raspberry Pi projesidir. Hayvanların, davetsiz misafirlerin görüntülerini / videolarını çekmek veya isteksiz aile üyelerine şaka yapmak için kullanılırlar. Tetikleyici, Pasif Kızılötesi (PIR) hareket sensörü, ultrasonik sensör veya bizim durumumuzda basit bir basma düğmesi gibi bir sensör olabilir.
Bu projede basit bir tetik aktif kamera tuzağı oluşturacağız. Düğmeye basıyoruz, önizleme penceresini kullanarak çekimi çerçevelendiriyoruz ve dosya, dosya adı olarak mevcut saat ve tarih kullanılarak otomatik olarak Pi’mize kaydediliyor.
Bu proje için kablolama basittir. Düğme, bir devre tahtası ve iki dişi-erkek kablo aracılığıyla GPIO17 ve GND’ye bağlanır.
1. Thonny’yi aç ve yeni bir dosya oluşturun. Thonny’yi ana menüde bulabilirsiniz.
2. Önizleme sınıfıyla birlikte Picamera2 modülünü içe aktarın. Sonraki zaman modülünü içe aktarın.
from picamera2 import Picamera2, Preview
import time
3. Datetime, GPIO Zero ve Signal modüllerini içe aktarın. Datetime, resim dosya adlarımız için bir zaman damgası oluşturmak için kullanılır. GPIO Zero, basit bir düğme arayüzü için kullanılır. Python kodunun çıkmasını durdurmak için sinyal kullanılır.
from datetime import datetime
from gpiozero import Button
from signal import pause
4. Bir nesne oluşturun, picam2, Picamera2 modülüne referans vermek ve kamerayı kontrol etmek için kullanılır.
picam2 = Picamera2()
5. Bir nesne oluşturun, düğme, ve düğmemizin bağlı olduğu GPIO pinini saklamak için nesneyi kullanın.
button = Button(17)
6. Yeni bir nesne oluşturun, camera_config ve hareketsiz görüntü çözünürlüğünü (ana) 1920 x 1080’ye ve 640 x 480 boyutunda “düşük” bir görüntüye ayarlamak için kullanın. Bu alçaltılmış görüntü, bir çekimi çerçevelerken önizleme görüntüsü olarak kullanılır.
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (640, 480), display="lores")
7. Yapılandırmayı yükleyin.
picam2.configure(camera_config)
8. Bir dizi komutu depolamak için bir işlev oluşturun, yakalama () tetiğe basıldığında çalıştırılacaktır. Fonksiyonun içindeki kod, fonksiyona ait olduğunu göstermek için otomatik olarak girintilenir.
def capture():
9. Bir önizleme penceresi başlatın. Bu, imajımızı çerçevelememizi sağlayacaktır.
picam2.start_preview(Preview.QTGL)
10. Bir nesne, zaman damgası oluşturun, ve tetikleyici olayın saatini ve tarihini saklamak için kullanın.
timestamp = datetime.now().isoformat()
11. Kamerayı başlatın, ardından görüntüyü çerçevelemek için zaman tanımak için iki saniye bekleyin.
picam2.start()
time.sleep(2)
12. Dosya adı olarak geçerli zaman damgasını kullanmak için yakalama dosyasını, nihayetinde görüntü dosyasını ayarlayın.
picam2.capture_file('/home/pi/%s.jpg' % timestamp)
13. Sonunda fonksiyonda önizlemeyi durdur, ve kamerayı durdur.
picam2.stop_preview()
picam2.stop()
14. Bir düğmeye basıldığında tepki vermek için “yakalama” işlevimizi çağırarak GPIO Zero’nun düğme sınıfını kullanın. Nihayet kodun bitmesini önlemek için duraklama() kullanın.
button.when_pressed = capture
pause()
15. Kodu trigger-test.py olarak kaydedin ve kodu başlatmak için Çalıştır’ı tıklayın.
16. düğmesine basın Kamerayı başlatmak ve bir resim çekmek için
17. Sistem Dosya Yöneticisini açın ve görüntülemek için resme çift tıklayın.
Komple Kod Listeleme
from picamera2 import Picamera2, Preview
import time
from datetime import datetime
from gpiozero import Button
from signal import pause
picam2 = Picamera2()
button = Button(17)
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (640, 480), display="lores")
picam2.configure(camera_config)
def capture():
picam2.start_preview(Preview.QTGL)
timestamp = datetime.now().isoformat()
picam2.start()
time.sleep(2)
picam2.capture_file('/home/pi/%s.jpg' % timestamp)
picam2.stop_preview()
picam2.stop()
button.when_pressed = capture
pause()