8.3 KiB
Kép rögzítése - Raspberry Pi
Ebben a leckében hozzáadunk egy kamerát a Raspberry Pi-hez, és képeket olvasunk be róla.
Hardver
A Raspberry Pi-hez kamera szükséges.
Az általad használt kamera a Raspberry Pi Camera Module. Ez a kamera kifejezetten a Raspberry Pi-hez készült, és egy dedikált csatlakozón keresztül kapcsolódik a Pi-hez.
💁 Ez a kamera a Camera Serial Interface, a Mobile Industry Processor Interface Alliance protokollját használja, amelyet MIPI-CSI néven ismernek. Ez egy dedikált protokoll a képek továbbítására.
A kamera csatlakoztatása
A kamerát egy szalagkábel segítségével lehet csatlakoztatni a Raspberry Pi-hez.
Feladat - a kamera csatlakoztatása
-
Kapcsolja ki a Pi-t.
-
Csatlakoztassa a kamerához mellékelt szalagkábelt a kamerához. Ehhez óvatosan húzza ki a fekete műanyag klipet a tartóból, hogy kissé kijöjjön, majd csúsztassa be a kábelt a foglalatba úgy, hogy a kék oldal a lencsétől elfelé, a fém érintkezők pedig a lencse felé nézzenek. Miután teljesen behelyezte, nyomja vissza a fekete műanyag klipet a helyére.
Az animáció, amely bemutatja, hogyan kell kinyitni a klipet és behelyezni a kábelt, megtalálható a Raspberry Pi Getting Started with the Camera module dokumentációban.
-
Távolítsa el a Grove Base Hat-et a Pi-ről.
-
Vezesse át a szalagkábelt a Grove Base Hat kamera nyílásán. Ügyeljen arra, hogy a kábel kék oldala az A0, A1 stb. analóg portok felé nézzen.
-
Helyezze be a szalagkábelt a Pi kamera portjába. Ismét húzza fel a fekete műanyag klipet, helyezze be a kábelt, majd nyomja vissza a klipet. A kábel kék oldala az USB és ethernet portok felé nézzen.
-
Szerelje vissza a Grove Base Hat-et.
A kamera programozása
A Raspberry Pi most már programozható, hogy használja a kamerát a PiCamera Python könyvtár segítségével.
Feladat - régi kamera mód engedélyezése
Sajnos a Raspberry Pi OS Bullseye kiadásával megváltozott az operációs rendszerhez tartozó kamera szoftver, ami miatt alapértelmezés szerint a PiCamera már nem működik. Egy új verzió készül, PiCamera2 néven, de ez még nem áll készen a használatra.
Egyelőre beállíthatja a Pi-t régi kamera módba, hogy a PiCamera működjön. A kamera foglalat alapértelmezés szerint le van tiltva, de a régi kamera szoftver bekapcsolása automatikusan engedélyezi a foglalatot.
-
Kapcsolja be a Pi-t, és várja meg, amíg elindul.
-
Indítsa el a VS Code-ot, akár közvetlenül a Pi-n, akár a Remote SSH bővítmény segítségével csatlakozva.
-
Futtassa a következő parancsokat a terminálból:
sudo raspi-config nonint do_legacy 0 sudo reboot
Ez engedélyezi a régi kamera szoftvert, majd újraindítja a Pi-t, hogy a beállítás érvénybe lépjen.
-
Várja meg, amíg a Pi újraindul, majd indítsa újra a VS Code-ot.
Feladat - a kamera programozása
Programozza az eszközt.
-
A terminálból hozzon létre egy új mappát a
pi
felhasználó otthoni könyvtárábanfruit-quality-detector
néven. Hozzon létre egy fájlt ebben a mappábanapp.py
néven. -
Nyissa meg ezt a mappát a VS Code-ban.
-
A kamerával való interakcióhoz használhatja a PiCamera Python könyvtárat. Telepítse a Pip csomagot a következő parancs segítségével:
pip3 install picamera
-
Adja hozzá a következő kódot az
app.py
fájlhoz:import io import time from picamera import PiCamera
Ez a kód importálja a szükséges könyvtárakat, beleértve a
PiCamera
könyvtárat. -
Adja hozzá a következő kódot alatta a kamera inicializálásához:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
Ez a kód létrehoz egy PiCamera objektumot, és beállítja a felbontást 640x480-ra. Bár nagyobb felbontások is támogatottak (akár 3280x2464), az image classifier sokkal kisebb képeken (227x227) dolgozik, így nincs szükség nagyobb képek rögzítésére és küldésére.
A
camera.rotation = 0
sor beállítja a kép forgatását. A szalagkábel a kamera aljába csatlakozik, de ha a kamerát elforgatta, hogy könnyebben ráirányítsa a kívánt tárgyra, akkor ezt a sort a forgatás szögének megfelelően módosíthatja.Például, ha a szalagkábelt úgy helyezi el, hogy a kamera tetején legyen, állítsa a forgatást 180 fokra:
camera.rotation = 180
A kamera néhány másodpercet igényel az indításhoz, ezért van szükség a
time.sleep(2)
sorra. -
Adja hozzá a következő kódot alatta, hogy a képet bináris adatként rögzítse:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
Ez a kód létrehoz egy
BytesIO
objektumot bináris adatok tárolására. A képet JPEG fájlként olvassa be a kamerából, és ebben az objektumban tárolja. Az objektumnak van egy pozíciójelzője, amely megmutatja, hol tart az adatokban, így további adatok hozzáadhatók a végéhez, ha szükséges. Aimage.seek(0)
sor visszaállítja ezt a pozíciót az elejére, hogy később az összes adatot el lehessen olvasni. -
Alatta adja hozzá a következőt, hogy a képet fájlba mentse:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
Ez a kód megnyit egy
image.jpg
nevű fájlt írásra, majd az összes adatot kiolvassa aBytesIO
objektumból, és ezt a fájlba írja.💁 A képet közvetlenül fájlba is rögzítheti a
camera.capture
hívásnak fájlnevet megadva. Azért használjuk aBytesIO
objektumot, hogy a későbbiekben a képet elküldhessük az image classifier-nek. -
Irányítsa a kamerát valamire, és futtassa ezt a kódot.
-
Egy kép rögzítésre kerül, és
image.jpg
néven mentésre kerül az aktuális mappába. Ezt a fájlt látni fogja a VS Code böngészőjében. Válassza ki a fájlt, hogy megtekintse a képet. Ha forgatásra van szükség, módosítsa acamera.rotation = 0
sort, és készítsen új képet.
💁 Ezt a kódot megtalálja a code-camera/pi mappában.
😀 Sikerült a kamera programozása!
Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.