7.8 KiB
Snimanje slike - Raspberry Pi
U ovom dijelu lekcije dodat ćete senzor kamere na svoj Raspberry Pi i čitati slike s njega.
Hardver
Raspberry Pi treba kameru.
Kamera koju ćete koristiti je Raspberry Pi Camera Module. Ova kamera je dizajnirana za rad s Raspberry Pi-jem i povezuje se putem namjenskog konektora na Pi-ju.
💁 Ova kamera koristi Camera Serial Interface, protokol Mobile Industry Processor Interface Alliance, poznat kao MIPI-CSI. Ovo je namjenski protokol za prijenos slika.
Povezivanje kamere
Kamera se može povezati s Raspberry Pi-jem pomoću vrpčastog kabela.
Zadatak - povezivanje kamere
-
Isključite napajanje Pi-ja.
-
Spojite vrpčasti kabel koji dolazi s kamerom na kameru. Da biste to učinili, lagano povucite crnu plastičnu kopču u držaču tako da se malo izvuče, zatim umetnite kabel u utičnicu, s plavom stranom okrenutom od objektiva, a metalnim kontaktima prema objektivu. Kada je kabel potpuno umetnut, gurnite crnu plastičnu kopču natrag na mjesto.
Animaciju koja prikazuje kako otvoriti kopču i umetnuti kabel možete pronaći u Raspberry Pi dokumentaciji za početak rada s modulom kamere.
-
Uklonite Grove Base Hat s Pi-ja.
-
Provucite vrpčasti kabel kroz utor za kameru na Grove Base Hat-u. Provjerite je li plava strana kabela okrenuta prema analognim priključcima označenim A0, A1 itd.
-
Umetnite vrpčasti kabel u priključak za kameru na Pi-ju. Ponovno, povucite crnu plastičnu kopču prema gore, umetnite kabel, a zatim gurnite kopču natrag. Plava strana kabela trebala bi biti okrenuta prema USB i Ethernet priključcima.
-
Ponovno postavite Grove Base Hat.
Programiranje kamere
Raspberry Pi sada se može programirati za korištenje kamere pomoću Python biblioteke PiCamera.
Zadatak - omogućavanje naslijeđenog načina rada kamere
Nažalost, s izdanjem Raspberry Pi OS Bullseye, softver za kameru koji dolazi s OS-om promijenio se, što znači da PiCamera prema zadanim postavkama više ne radi. U pripremi je zamjena, nazvana PiCamera2, ali još nije spremna za korištenje.
Za sada možete postaviti svoj Pi u naslijeđeni način rada kamere kako bi PiCamera radila. Priključak za kameru također je prema zadanim postavkama onemogućen, ali uključivanjem naslijeđenog softvera za kameru automatski se omogućuje priključak.
-
Uključite Pi i pričekajte da se pokrene.
-
Pokrenite VS Code, bilo izravno na Pi-ju ili se povežite putem Remote SSH ekstenzije.
-
Pokrenite sljedeće naredbe iz terminala:
sudo raspi-config nonint do_legacy 0 sudo reboot
Ovo će omogućiti postavku za naslijeđeni softver kamere, a zatim ponovno pokrenuti Pi kako bi postavka stupila na snagu.
-
Pričekajte da se Pi ponovno pokrene, a zatim ponovno pokrenite VS Code.
Zadatak - programiranje kamere
Programirajte uređaj.
-
Iz terminala, stvorite novu mapu u početnom direktoriju korisnika
pi
nazvanufruit-quality-detector
. Stvorite datoteku u ovoj mapi nazvanuapp.py
. -
Otvorite ovu mapu u VS Code-u.
-
Za interakciju s kamerom možete koristiti Python biblioteku PiCamera. Instalirajte Pip paket za ovo pomoću sljedeće naredbe:
pip3 install picamera
-
Dodajte sljedeći kod u svoju datoteku
app.py
:import io import time from picamera import PiCamera
Ovaj kod uvozi potrebne biblioteke, uključujući biblioteku
PiCamera
. -
Dodajte sljedeći kod ispod ovog za inicijalizaciju kamere:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
Ovaj kod stvara PiCamera objekt, postavlja rezoluciju na 640x480. Iako su podržane veće rezolucije (do 3280x2464), klasifikator slika radi na mnogo manjim slikama (227x227), tako da nema potrebe za snimanjem i slanjem većih slika.
Linija
camera.rotation = 0
postavlja rotaciju slike. Vrpčasti kabel ulazi na dno kamere, ali ako je vaša kamera rotirana kako bi lakše usmjerila predmet koji želite klasificirati, možete promijeniti ovu liniju na broj stupnjeva rotacije.Na primjer, ako objesite vrpčasti kabel iznad nečega tako da je na vrhu kamere, postavite rotaciju na 180:
camera.rotation = 180
Kamere treba nekoliko sekundi da se pokrene, zbog čega je tu linija
time.sleep(2)
. -
Dodajte sljedeći kod ispod ovog za snimanje slike kao binarnih podataka:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
Ovaj kod stvara
BytesIO
objekt za pohranu binarnih podataka. Slika se čita s kamere kao JPEG datoteka i pohranjuje u ovaj objekt. Ovaj objekt ima pokazivač pozicije kako bi znao gdje se nalazi u podacima, tako da se više podataka može dodati na kraj ako je potrebno, pa linijaimage.seek(0)
pomiče ovu poziciju natrag na početak kako bi se svi podaci mogli kasnije pročitati. -
Ispod ovoga, dodajte sljedeće za spremanje slike u datoteku:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
Ovaj kod otvara datoteku nazvanu
image.jpg
za pisanje, zatim čita sve podatke izBytesIO
objekta i zapisuje ih u datoteku.💁 Slika se može snimiti izravno u datoteku umjesto u
BytesIO
objekt tako da se naziv datoteke proslijedi pozivucamera.capture
. Razlog za korištenjeBytesIO
objekta je taj što kasnije u ovoj lekciji možete poslati sliku svom klasifikatoru slika. -
Usmjerite kameru na nešto i pokrenite ovaj kod.
-
Slika će biti snimljena i spremljena kao
image.jpg
u trenutnoj mapi. Vidjet ćete ovu datoteku u VS Code exploreru. Odaberite datoteku za pregled slike. Ako je potrebno rotirati, ažurirajte linijucamera.rotation = 0
prema potrebi i snimite novu sliku.
💁 Ovaj kod možete pronaći u mapi code-camera/pi.
😀 Vaš program za kameru je uspješno završen!
Odricanje od odgovornosti:
Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda.