12 KiB
Заснемане на изображение - Raspberry Pi
В тази част от урока ще добавите камера към вашия Raspberry Pi и ще прочетете изображения от нея.
Хардуер
Raspberry Pi се нуждае от камера.
Камерата, която ще използвате, е Raspberry Pi Camera Module. Тази камера е проектирана да работи с Raspberry Pi и се свързва чрез специален конектор на устройството.
💁 Тази камера използва Camera Serial Interface, протокол от Mobile Industry Processor Interface Alliance, известен като MIPI-CSI. Това е специализиран протокол за предаване на изображения.
Свързване на камерата
Камерата може да бъде свързана към Raspberry Pi с помощта на лентов кабел.
Задача - свържете камерата
-
Изключете захранването на Raspberry Pi.
-
Свържете лентовия кабел, който идва с камерата, към нея. За да направите това, внимателно издърпайте черния пластмасов клипс в държача, така че да се отвори леко, след което плъзнете кабела в гнездото, като синята страна е обърната настрани от обектива, а металните пинове са обърнати към обектива. След като кабелът е напълно вкаран, натиснете черния пластмасов клипс обратно на мястото му.
Можете да намерите анимация, показваща как да отворите клипса и да поставите кабела, в документацията за започване с камерата на Raspberry Pi.
-
Свалете Grove Base Hat от Raspberry Pi.
-
Прекарайте лентовия кабел през отвора за камерата в Grove Base Hat. Уверете се, че синята страна на кабела е обърната към аналоговите портове, обозначени като A0, A1 и т.н.
-
Поставете лентовия кабел в порта за камерата на Raspberry Pi. Отново издърпайте черния пластмасов клипс нагоре, поставете кабела и след това натиснете клипса обратно. Синята страна на кабела трябва да е обърната към USB и Ethernet портовете.
-
Поставете отново Grove Base Hat.
Програмиране на камерата
Сега Raspberry Pi може да бъде програмиран да използва камерата с помощта на Python библиотеката PiCamera.
Задача - активирайте режим за стара камера
За съжаление, с пускането на Raspberry Pi OS Bullseye, софтуерът за камерата, който идва с операционната система, беше променен, което означава, че по подразбиране PiCamera вече не работи. Работи се по замяна, наречена PiCamera2, но тя все още не е готова за използване.
За момента можете да настроите вашия Raspberry Pi в режим за стара камера, за да позволите на PiCamera да работи. Портът за камерата също е деактивиран по подразбиране, но включването на софтуера за стара камера автоматично активира порта.
-
Включете Raspberry Pi и изчакайте да се зареди.
-
Стартирайте VS Code, директно на Raspberry Pi или чрез разширението Remote SSH.
-
Изпълнете следните команди от терминала:
sudo raspi-config nonint do_legacy 0 sudo reboot
Това ще активира настройка за включване на софтуера за стара камера и ще рестартира Raspberry Pi, за да влязат промените в сила.
-
Изчакайте Raspberry Pi да се рестартира, след което стартирайте отново VS Code.
Задача - програмирайте камерата
Програмирайте устройството.
-
От терминала създайте нова папка в домашната директория на потребителя
pi
, нареченаfruit-quality-detector
. Създайте файл в тази папка, нареченapp.py
. -
Отворете тази папка в VS Code.
-
За да взаимодействате с камерата, можете да използвате Python библиотеката PiCamera. Инсталирайте пакета с Pip с помощта на следната команда:
pip3 install picamera
-
Добавете следния код във файла
app.py
:import io import time from picamera import PiCamera
Този код импортира необходимите библиотеки, включително библиотеката
PiCamera
. -
Добавете следния код под този, за да инициализирате камерата:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
Този код създава обект PiCamera и задава резолюцията на 640x480. Въпреки че се поддържат по-високи резолюции (до 3280x2464), класификаторът на изображения работи с много по-малки изображения (227x227), така че няма нужда да се заснемат и изпращат по-големи изображения.
Линията
camera.rotation = 0
задава ротацията на изображението. Лентовият кабел влиза в долната част на камерата, но ако камерата ви е завъртяна, за да улесни насочването към обекта, който искате да класифицирате, можете да промените тази линия на броя градуси на ротация.Например, ако окачите лентовия кабел над нещо, така че да е в горната част на камерата, задайте ротацията на 180:
camera.rotation = 180
Камерата се нуждае от няколко секунди, за да стартира, затова е добавена линията
time.sleep(2)
. -
Добавете следния код под този, за да заснемете изображението като бинарни данни:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
Този код създава обект
BytesIO
за съхранение на бинарни данни. Изображението се чете от камерата като JPEG файл и се съхранява в този обект. Обектът има индикатор за позиция, който показва къде се намира в данните, така че да може да се добавят още данни, ако е необходимо. Линиятаimage.seek(0)
връща индикатора в началото, за да могат всички данни да бъдат прочетени по-късно. -
Под това добавете следния код, за да запазите изображението във файл:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
Този код отваря файл, наречен
image.jpg
, за запис, след което чете всички данни от обектаBytesIO
и ги записва във файла.💁 Можете да заснемете изображението директно във файл, вместо в обект
BytesIO
, като подадете името на файла на извикванетоcamera.capture
. Причината за използването на обектаBytesIO
е, че по-късно в този урок ще изпращате изображението към класификатора на изображения. -
Насочете камерата към нещо и изпълнете този код.
-
Изображение ще бъде заснето и запазено като
image.jpg
в текущата папка. Ще видите този файл в VS Code Explorer. Изберете файла, за да видите изображението. Ако е необходимо завъртане, актуализирайте линиятаcamera.rotation = 0
и направете нова снимка.
💁 Можете да намерите този код в папката code-camera/pi.
😀 Вашата програма за камерата беше успешна!
Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.