You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/hr/4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md

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

Raspberry Pi kamera

  1. Isključite napajanje Pi-ja.

  2. 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.

    Vrpčasti kabel umetnut u modul kamere

  3. Uklonite Grove Base Hat s Pi-ja.

  4. 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.

    Vrpčasti kabel prolazi kroz Grove Base Hat

  5. 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.

    Vrpčasti kabel povezan s priključkom za kameru na Pi-ju

  6. 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.

  1. Uključite Pi i pričekajte da se pokrene.

  2. Pokrenite VS Code, bilo izravno na Pi-ju ili se povežite putem Remote SSH ekstenzije.

  3. 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.

  4. Pričekajte da se Pi ponovno pokrene, a zatim ponovno pokrenite VS Code.

Zadatak - programiranje kamere

Programirajte uređaj.

  1. Iz terminala, stvorite novu mapu u početnom direktoriju korisnika pi nazvanu fruit-quality-detector. Stvorite datoteku u ovoj mapi nazvanu app.py.

  2. Otvorite ovu mapu u VS Code-u.

  3. Za interakciju s kamerom možete koristiti Python biblioteku PiCamera. Instalirajte Pip paket za ovo pomoću sljedeće naredbe:

    pip3 install picamera
    
  4. 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.

  5. 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.

    Kamera visi iznad limenke pića

    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).

  6. 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 linija image.seek(0) pomiče ovu poziciju natrag na početak kako bi se svi podaci mogli kasnije pročitati.

  7. 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 iz BytesIO objekta i zapisuje ih u datoteku.

    💁 Slika se može snimiti izravno u datoteku umjesto u BytesIO objekt tako da se naziv datoteke proslijedi pozivu camera.capture. Razlog za korištenje BytesIO objekta je taj što kasnije u ovoj lekciji možete poslati sliku svom klasifikatoru slika.

  8. Usmjerite kameru na nešto i pokrenite ovaj kod.

  9. 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 liniju camera.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.