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/lt/4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md

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ą

Raspberry Pi kamera

  1. Išjunkite Pi.

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

    Juostinis kabelis įstatytas į kameros modulį

  3. Nuimkite Grove Base Hat nuo Pi.

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

    Juostinis kabelis perkištas per Grove Base Hat

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

    Juostinis kabelis prijungtas prie kameros jungties ant Pi

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

  1. Įjunkite Pi ir palaukite, kol jis užsikraus.

  2. Paleiskite VS Code, tiesiogiai ant Pi arba prisijungę per Remote SSH plėtinį.

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

  4. Palaukite, kol Pi bus perkrautas, tada vėl paleiskite VS Code.

Užduotis - programuokite kamerą

Programuokite įrenginį.

  1. Terminale sukurkite naują aplanką pi vartotojo namų kataloge, pavadintą fruit-quality-detector. Sukurkite failą šiame aplanke, pavadintą app.py.

  2. Atidarykite šį aplanką VS Code.

  3. Norėdami sąveikauti su kamera, galite naudoti PiCamera Python biblioteką. Įdiekite Pip paketą su šia komanda:

    pip3 install picamera
    
  4. Pridėkite šį kodą į savo app.py failą:

    import io
    import time
    from picamera import PiCamera
    

    Šis kodas importuoja reikalingas bibliotekas, įskaitant PiCamera biblioteką.

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

    Kamera pakabinta virš gėrimo skardinės

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

  6. 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ėl image.seek(0) eilutė perkelia šią poziciją atgal į pradžią, kad vėliau būtų galima perskaityti visus duomenis.

  7. Ž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 naudojamas BytesIO objektas, yra ta, kad vėliau šioje pamokoje galėsite siųsti vaizdą į savo vaizdų klasifikatorių.

  8. Nukreipkite kamerą į ką nors ir paleiskite šį kodą.

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