8.0 KiB
Užfiksuokite vaizdą - Raspberry Pi
Šioje pamokos dalyje pridėsite kameros jutiklį prie savo Raspberry Pi ir nuskaitysite vaizdus iš jo.
Aparatinė įranga
Raspberry Pi reikalinga kamera.
Kamera, kurią naudosite, yra Raspberry Pi Camera Module. Ši kamera sukurta veikti su Raspberry Pi ir jungiasi per specialų jungtį ant Pi.
💁 Ši kamera naudoja Camera Serial Interface, protokolą iš Mobile Industry Processor Interface Alliance, žinomą kaip MIPI-CSI. Tai specialus protokolas vaizdams perduoti.
Prijunkite kamerą
Kamera gali būti prijungta prie Raspberry Pi naudojant juostinį kabelį.
Užduotis - prijunkite kamerą
-
Išjunkite Pi.
-
Prijunkite juostinį kabelį, kuris yra su kamera, prie kameros. Norėdami tai padaryti, švelniai patraukite juodą plastikinį klipą laikiklyje, kad jis šiek tiek išslystų, tada įstumkite kabelį į lizdą, mėlyną pusę nukreipdami nuo objektyvo, o metalines kontaktų juostas nukreipdami link objektyvo. Kai kabelis bus visiškai įstumtas, pastumkite juodą plastikinį klipą atgal į vietą.
Animaciją, kaip atidaryti klipą ir įstatyti kabelį, galite rasti Raspberry Pi dokumentacijoje apie kameros modulio naudojimą.
-
Nuimkite Grove Base Hat nuo Pi.
-
Perkiškite juostinį kabelį per kameros angą Grove Base Hat. Įsitikinkite, kad mėlyna kabelio pusė nukreipta link analoginių prievadų, pažymėtų A0, A1 ir pan.
-
Įstatykite juostinį kabelį į kameros jungtį ant Pi. Vėlgi, patraukite juodą plastikinį klipą aukštyn, įstatykite kabelį, tada pastumkite klipą atgal. Mėlyna kabelio pusė turėtų būti nukreipta į USB ir Ethernet prievadus.
-
Vėl pritvirtinkite Grove Base Hat.
Programuokite kamerą
Dabar Raspberry Pi galima programuoti naudoti kamerą naudojant PiCamera Python biblioteką.
Užduotis - įjunkite senąjį kameros režimą
Deja, su Raspberry Pi OS Bullseye išleidimu, kameros programinė įranga, kuri buvo su OS, pasikeitė, todėl pagal numatymą PiCamera nebeveikia. Šiuo metu kuriama nauja versija, vadinama PiCamera2, tačiau ji dar nėra paruošta naudojimui.
Kol kas galite nustatyti savo Pi į senąjį kameros režimą, kad PiCamera veiktų. Kamero jungtis taip pat yra išjungta pagal numatymą, tačiau įjungus senąją kameros programinę įrangą, jungtis automatiškai įjungiama.
-
Įjunkite Pi ir palaukite, kol jis užsikraus.
-
Paleiskite VS Code, tiesiogiai ant Pi arba prisijungę per Remote SSH plėtinį.
-
Paleiskite šias komandas iš terminalo:
sudo raspi-config nonint do_legacy 0 sudo reboot
Tai pakeis nustatymą, kad įjungtų senąją kameros programinę įrangą, tada perkraus Pi, kad šis nustatymas įsigaliotų.
-
Palaukite, kol Pi bus perkrautas, tada vėl paleiskite VS Code.
Užduotis - programuokite kamerą
Programuokite įrenginį.
-
Terminale sukurkite naują aplanką
pi
vartotojo namų kataloge, pavadintąfruit-quality-detector
. Sukurkite failą šiame aplanke, pavadintąapp.py
. -
Atidarykite šį aplanką VS Code.
-
Norėdami sąveikauti su kamera, galite naudoti PiCamera Python biblioteką. Įdiekite Pip paketą su šia komanda:
pip3 install picamera
-
Pridėkite šį kodą į savo
app.py
failą:import io import time from picamera import PiCamera
Šis kodas importuoja reikalingas bibliotekas, įskaitant
PiCamera
biblioteką. -
Pridėkite šį kodą žemiau, kad inicializuotumėte kamerą:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
Šis kodas sukuria PiCamera objektą, nustato rezoliuciją į 640x480. Nors palaikomos didesnės rezoliucijos (iki 3280x2464), vaizdų klasifikatorius veikia su daug mažesniais vaizdais (227x227), todėl nėra reikalo fiksuoti ir siųsti didesnių vaizdų.
Eilutė
camera.rotation = 0
nustato vaizdo pasukimą. Juostinis kabelis įeina į kameros apačią, tačiau jei jūsų kamera buvo pasukta, kad būtų lengviau nukreipti į objektą, kurį norite klasifikuoti, galite pakeisti šią eilutę į pasukimo laipsnių skaičių.Pavyzdžiui, jei pakabinsite juostinį kabelį virš objekto, kad jis būtų kameros viršuje, nustatykite pasukimą į 180:
camera.rotation = 180
Kamera užtrunka kelias sekundes, kol pradeda veikti, todėl naudojama
time.sleep(2)
. -
Pridėkite šį kodą žemiau, kad užfiksuotumėte vaizdą kaip dvejetainius duomenis:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
Šis kodas sukuria
BytesIO
objektą, skirtą saugoti dvejetainius duomenis. Vaizdas iš kameros nuskaitomas kaip JPEG failas ir saugomas šiame objekte. Šis objektas turi pozicijos indikatorių, kad žinotų, kur yra duomenyse, todėlimage.seek(0)
eilutė perkelia šią poziciją atgal į pradžią, kad vėliau būtų galima perskaityti visus duomenis. -
Žemiau pridėkite šį kodą, kad išsaugotumėte vaizdą į failą:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
Šis kodas atidaro failą, pavadintą
image.jpg
, rašymui, tada perskaito visus duomenis išBytesIO
objekto ir įrašo juos į failą.💁 Vaizdą galite užfiksuoti tiesiai į failą, o ne į
BytesIO
objektą, perduodami failo pavadinimącamera.capture
iškvietimui. Priežastis, kodėl naudojamasBytesIO
objektas, yra ta, kad vėliau šioje pamokoje galėsite siųsti vaizdą į savo vaizdų klasifikatorių. -
Nukreipkite kamerą į ką nors ir paleiskite šį kodą.
-
Vaizdas bus užfiksuotas ir išsaugotas kaip
image.jpg
dabartiniame aplanke. Šį failą matysite VS Code naršyklėje. Pasirinkite failą, kad peržiūrėtumėte vaizdą. Jei reikia pasukimo, atnaujinkite eilutęcamera.rotation = 0
pagal poreikį ir padarykite kitą nuotrauką.
💁 Šį kodą galite rasti code-camera/pi aplanke.
😀 Jūsų kameros programa buvo sėkminga!
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius dėl šio vertimo naudojimo.