# Захват изображения - Raspberry Pi В этой части урока вы добавите сенсор камеры к вашему Raspberry Pi и будете считывать изображения с него. ## Оборудование Для Raspberry Pi требуется камера. Камера, которую вы будете использовать, — это [модуль камеры Raspberry Pi](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.ru.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.ru.png) 1. Снимите Grove Base Hat с Raspberry Pi. 1. Пропустите ленточный кабель через слот для камеры в Grove Base Hat. Убедитесь, что синяя сторона кабеля направлена к аналоговым портам, обозначенным **A0**, **A1** и т.д. ![Ленточный кабель проходит через Grove Base Hat](../../../../../translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ru.png) 1. Вставьте ленточный кабель в порт камеры на Raspberry Pi. Снова потяните черный пластиковый зажим вверх, вставьте кабель, затем зафиксируйте его, вернув зажим на место. Синяя сторона кабеля должна быть направлена к USB и Ethernet портам. ![Ленточный кабель подключен к разъему камеры на Raspberry Pi](../../../../../translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ru.png) 1. Установите Grove Base Hat обратно. ## Программирование камеры Теперь Raspberry Pi можно запрограммировать для работы с камерой, используя библиотеку Python [PiCamera](https://pypi.org/project/picamera/). ### Задание - включить режим устаревшей камеры К сожалению, с выпуском Raspberry Pi OS Bullseye программное обеспечение для камеры, поставляемое с ОС, изменилось, и теперь PiCamera по умолчанию не работает. Ведется разработка замены под названием PiCamera2, но она пока не готова к использованию. На данный момент вы можете включить режим устаревшей камеры, чтобы 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.ru.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). Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.