7.7 KiB
Zajem slike - Raspberry Pi
V tem delu lekcije boste svojemu Raspberry Pi-ju dodali senzor kamere in iz njega prebrali slike.
Strojna oprema
Raspberry Pi potrebuje kamero.
Kamera, ki jo boste uporabili, je Raspberry Pi Camera Module. Ta kamera je zasnovana za delo z Raspberry Pi-jem in se poveže prek namenskega priključka na Pi-ju.
💁 Ta kamera uporablja Camera Serial Interface, protokol združenja Mobile Industry Processor Interface Alliance, znan kot MIPI-CSI. To je namenski protokol za pošiljanje slik.
Povežite kamero
Kamera se lahko poveže z Raspberry Pi-jem z uporabo traku kabla.
Naloga - povežite kamero
-
Izklopite Pi.
-
Povežite trak kabla, ki je priložen kameri, s kamero. Da to storite, nežno povlecite črno plastično sponko v držalu, da se nekoliko odmakne, nato pa vstavite kabel v vtičnico, pri čemer naj bo modra stran obrnjena stran od leče, kovinski kontakti pa proti leči. Ko je kabel popolnoma vstavljen, potisnite črno plastično sponko nazaj na svoje mesto.
Animacijo, ki prikazuje, kako odpreti sponko in vstaviti kabel, najdete v dokumentaciji Raspberry Pi za začetek uporabe kamere.
-
Odstranite Grove Base Hat iz Pi-ja.
-
Potegnite trak kabla skozi režo za kamero v Grove Base Hat. Prepričajte se, da je modra stran kabla obrnjena proti analognim priključkom, označenim z A0, A1 itd.
-
Vstavite trak kabla v priključek za kamero na Pi-ju. Spet povlecite črno plastično sponko navzgor, vstavite kabel in nato potisnite sponko nazaj. Modra stran kabla naj bo obrnjena proti USB in ethernet priključkom.
-
Ponovno namestite Grove Base Hat.
Programiranje kamere
Raspberry Pi lahko zdaj programirate za uporabo kamere z uporabo Python knjižnice PiCamera.
Naloga - omogočite način za starejše kamere
Na žalost se je z izdajo Raspberry Pi OS Bullseye spremenila programska oprema za kamere, ki je bila privzeto vključena v OS, kar pomeni, da PiCamera privzeto ne deluje več. Razvija se zamenjava, imenovana PiCamera2, vendar še ni pripravljena za uporabo.
Za zdaj lahko nastavite svoj Pi v način za starejše kamere, da omogočite delovanje PiCamera. Priključek za kamero je privzeto onemogočen, vendar omogočanje programske opreme za starejše kamere samodejno omogoči priključek.
-
Vklopite Pi in počakajte, da se zažene.
-
Zaženite VS Code, bodisi neposredno na Pi-ju bodisi prek razširitve Remote SSH.
-
Zaženite naslednje ukaze iz terminala:
sudo raspi-config nonint do_legacy 0 sudo reboot
To bo omogočilo nastavitev za uporabo programske opreme za starejše kamere, nato pa bo Pi znova zagnan, da bo nastavitev začela veljati.
-
Počakajte, da se Pi znova zažene, nato ponovno zaženite VS Code.
Naloga - programirajte kamero
Programirajte napravo.
-
V terminalu ustvarite novo mapo v domačem imeniku uporabnika
pi
, imenovanofruit-quality-detector
. V tej mapi ustvarite datoteko z imenomapp.py
. -
Odprite to mapo v VS Code.
-
Za interakcijo s kamero lahko uporabite Python knjižnico PiCamera. Namestite Pip paket za to z naslednjim ukazom:
pip3 install picamera
-
Dodajte naslednjo kodo v svojo datoteko
app.py
:import io import time from picamera import PiCamera
Ta koda uvozi nekaj potrebnih knjižnic, vključno s knjižnico
PiCamera
. -
Dodajte naslednjo kodo pod to, da inicializirate kamero:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
Ta koda ustvari objekt PiCamera, nastavi ločljivost na 640x480. Čeprav so podprte višje ločljivosti (do 3280x2464), razvrščevalnik slik deluje na veliko manjših slikah (227x227), zato ni potrebe po zajemanju in pošiljanju večjih slik.
Vrstica
camera.rotation = 0
nastavi rotacijo slike. Trak kabla vstopa na dno kamere, vendar če je vaša kamera obrnjena, da lažje usmeri predmet, ki ga želite razvrstiti, lahko to vrstico spremenite na število stopinj rotacije.Na primer, če trak kabla obesite nad nekaj, tako da je na vrhu kamere, nastavite rotacijo na 180:
camera.rotation = 180
Kamera potrebuje nekaj sekund, da se zažene, zato je tu vrstica
time.sleep(2)
. -
Dodajte naslednjo kodo pod to, da zajamete sliko kot binarne podatke:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
Ta koda ustvari objekt
BytesIO
za shranjevanje binarnih podatkov. Slika se prebere iz kamere kot datoteka JPEG in shrani v ta objekt. Ta objekt ima kazalec položaja, ki označuje, kje se nahaja v podatkih, zato vrsticaimage.seek(0)
premakne ta kazalec nazaj na začetek, da se lahko vsi podatki kasneje preberejo. -
Pod to dodajte naslednjo kodo za shranjevanje slike v datoteko:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
Ta koda odpre datoteko z imenom
image.jpg
za pisanje, nato prebere vse podatke iz objektaBytesIO
in jih zapiše v datoteko.💁 Sliko lahko zajamete neposredno v datoteko namesto v objekt
BytesIO
tako, da ime datoteke posredujete klicucamera.capture
. Razlog za uporabo objektaBytesIO
je, da boste kasneje v tej lekciji sliko poslali svojemu razvrščevalniku slik. -
Usmerite kamero v nekaj in zaženite to kodo.
-
Slika bo zajeta in shranjena kot
image.jpg
v trenutni mapi. To datoteko boste videli v raziskovalcu VS Code. Izberite datoteko, da si ogledate sliko. Če je potrebna rotacija, posodobite vrsticocamera.rotation = 0
po potrebi in posnemite novo sliko.
💁 To kodo najdete v mapi code-camera/pi.
😀 Vaš program za kamero je bil uspešen!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.