# Снимање слике - Raspberry Pi У овом делу лекције, додаћете сензор камере на ваш Raspberry Pi и читати слике са њега. ## Хардвер Raspberry Pi захтева камеру. Камера коју ћете користити је [Raspberry Pi Camera Module](https://www.raspberrypi.org/products/camera-module-v2/). Ова камера је дизајнирана да ради са Raspberry Pi и повезује се преко посебног конектора на самом уређају. > 💁 Ова камера користи [Camera Serial Interface, протокол из Mobile Industry Processor Interface Alliance](https://wikipedia.org/wiki/Camera_Serial_Interface), познат као MIPI-CSI. Ово је посебан протокол за слање слика. ## Повезивање камере Камера се може повезати са Raspberry Pi помоћу тракастог кабла. ### Задатак - повежите камеру ![Raspberry Pi камера](../../../../../translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.sr.png) 1. Искључите Raspberry Pi. 1. Повежите тракасти кабл који долази са камером на саму камеру. Да бисте то урадили, нежно повуците црну пластичну копчу на држачу тако да се мало извуче, затим уметните кабл у утичницу, са плавом страном окренутом од објектива, а металним контактима окренутим ка објективу. Када кабл буде потпуно уметнут, вратите црну пластичну копчу на место. Анимацију која показује како да отворите копчу и уметнете кабл можете пронаћи у [документацији за почетак рада са Raspberry Pi камера модулом](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/2). ![Тракасти кабл уметнут у модул камере](../../../../../translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.sr.png) 1. Уклоните Grove Base Hat са Raspberry Pi. 1. Провуците тракасти кабл кроз отвор за камеру на Grove Base Hat. Уверите се да је плава страна кабла окренута ка аналогним портовима означеним са **A0**, **A1** итд. ![Тракасти кабл пролази кроз Grove Base Hat](../../../../../translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.sr.png) 1. Уметните тракасти кабл у порт за камеру на Raspberry Pi. Поново, подигните црну пластичну копчу, уметните кабл, а затим вратите копчу на место. Плава страна кабла треба да буде окренута ка USB и Ethernet портовима. ![Тракасти кабл повезан са утичницом за камеру на Raspberry Pi](../../../../../translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.sr.png) 1. Поново поставите Grove Base Hat. ## Програмирање камере Сада можете програмирати Raspberry Pi да користи камеру помоћу Python библиотеке [PiCamera](https://pypi.org/project/picamera/). ### Задатак - омогућите режим застареле камере Нажалост, са издањем Raspberry Pi OS Bullseye, софтвер за камеру који долази са оперативним системом је промењен, што значи да PiCamera подразумевано више не ради. У току је развој замене под називом PiCamera2, али она још увек није спремна за употребу. За сада можете подесити ваш Raspberry Pi у режим застареле камере како би PiCamera функционисала. Порт за камеру је такође подразумевано онемогућен, али укључивање застарелог софтвера за камеру аутоматски омогућава порт. 1. Укључите Raspberry Pi и сачекајте да се покрене. 1. Покрените VS Code, било директно на Raspberry Pi, или се повежите преко Remote SSH екстензије. 1. Покрените следеће команде из вашег терминала: ```sh sudo raspi-config nonint do_legacy 0 sudo reboot ``` Ово ће укључити подешавање за омогућавање застарелог софтвера за камеру, а затим поново покренути Raspberry Pi како би подешавање ступило на снагу. 1. Сачекајте да се Raspberry Pi поново покрене, а затим поново покрените VS Code. ### Задатак - програмирајте камеру Програмирајте уређај. 1. Из терминала, направите нови директоријум у кућном директоријуму корисника `pi` под називом `fruit-quality-detector`. У овом директоријуму направите датотеку под називом `app.py`. 1. Отворите овај директоријум у VS Code. 1. Да бисте комуницирали са камером, можете користити Python библиотеку PiCamera. Инсталирајте Pip пакет за ово помоћу следеће команде: ```sh pip3 install picamera ``` 1. Додајте следећи код у вашу `app.py` датотеку: ```python import io import time from picamera import PiCamera ``` Овај код увози неке потребне библиотеке, укључујући библиотеку `PiCamera`. 1. Испод овога додајте следећи код за иницијализацију камере: ```python camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2) ``` Овај код креира објекат PiCamera, поставља резолуцију на 640x480. Иако су подржане веће резолуције (до 3280x2464), класификатор слика ради са много мањим сликама (227x227), тако да нема потребе за снимањем и слањем већих слика. Линија `camera.rotation = 0` поставља ротацију слике. Тракасти кабл улази у доњи део камере, али ако је ваша камера ротирана како би лакше била усмерена ка објекту који желите да класификујете, можете променити ову линију у број степени ротације. ![Камера виси изнад лименке пића](../../../../../translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.sr.png) На пример, ако суспендујете тракасти кабл изнад нечега тако да је на врху камере, поставите ротацију на 180: ```python camera.rotation = 180 ``` Камери је потребно неколико секунди да се покрене, због чега је ту линија `time.sleep(2)`. 1. Испод овога додајте следећи код за снимање слике као бинарних података: ```python image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0) ``` Овај код креира објекат `BytesIO` за чување бинарних података. Слика се чита са камере као JPEG датотека и чува у овом објекту. Овај објекат има индикатор позиције који показује где се налази у подацима како би се могли додати нови подаци на крај ако је потребно, па линија `image.seek(0)` помера ову позицију назад на почетак како би сви подаци могли бити прочитани касније. 1. Испод овога додајте следеће за чување слике у датотеку: ```python with open('image.jpg', 'wb') as image_file: image_file.write(image.read()) ``` Овај код отвара датотеку под називом `image.jpg` за писање, затим чита све податке из објекта `BytesIO` и пише их у датотеку. > 💁 Можете снимити слику директно у датотеку уместо у објекат `BytesIO` тако што ћете проследити назив датотеке у позив `camera.capture`. Разлог за коришћење објекта `BytesIO` је тај што ћете касније у овој лекцији моћи да пошаљете слику вашем класификатору слика. 1. Усмерите камеру ка нечему и покрените овај код. 1. Слика ће бити снимљена и сачувана као `image.jpg` у тренутном директоријуму. Ову датотеку ћете видети у VS Code истраживачу. Изаберите датотеку да бисте видели слику. Ако је потребна ротација, ажурирајте линију `camera.rotation = 0` по потреби и направите нову слику. > 💁 Овај код можете пронаћи у директоријуму [code-camera/pi](../../../../../4-manufacturing/lessons/2-check-fruit-from-device/code-camera/pi). 😀 Ваш програм за камеру је успешно завршен! --- **Одрицање од одговорности**: Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.