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

126 lines
9.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "3ba7150ffc4a6999f6c3cfb4906ec7df",
"translation_date": "2025-08-28T16:07:06+00:00",
"source_file": "4-manufacturing/lessons/2-check-fruit-from-device/virtual-device-camera.md",
"language_code": "uk"
}
-->
# Захоплення зображення - Віртуальне IoT обладнання
У цій частині уроку ви додасте сенсор камери до вашого віртуального IoT пристрою та зчитуватимете зображення з нього.
## Обладнання
Віртуальний IoT пристрій використовуватиме симульовану камеру, яка надсилатиме зображення або з файлів, або з вашої вебкамери.
### Додайте камеру до CounterFit
Щоб використовувати віртуальну камеру, потрібно додати її до додатку CounterFit.
#### Завдання - додати камеру до CounterFit
Додайте камеру до додатку CounterFit.
1. Створіть новий Python-додаток на вашому комп'ютері у папці `fruit-quality-detector` з одним файлом `app.py` та віртуальним середовищем Python, і додайте пакети CounterFit через pip.
> ⚠️ Ви можете звернутися до [інструкцій зі створення та налаштування Python-проєкту CounterFit у уроці 1, якщо це необхідно](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md).
1. Встановіть додатковий пакет через pip для встановлення CounterFit shim, який може взаємодіяти з сенсорами камери, симулюючи деякі функції [Picamera Pip package](https://pypi.org/project/picamera/). Переконайтеся, що ви встановлюєте це з терміналу, де активоване віртуальне середовище.
```sh
pip install counterfit-shims-picamera
```
1. Переконайтеся, що веб-додаток CounterFit запущений.
1. Створіть камеру:
1. У вікні *Create sensor* на панелі *Sensors* розгорніть поле *Sensor type* і виберіть *Camera*.
1. Встановіть *Name* як `Picamera`.
1. Натисніть кнопку **Add**, щоб створити камеру.
![Налаштування камери](../../../../../translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.uk.png)
Камера буде створена і з'явиться у списку сенсорів.
![Створена камера](../../../../../translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.uk.png)
## Програмування камери
Тепер віртуальний IoT пристрій можна запрограмувати для використання віртуальної камери.
### Завдання - програмування камери
Програмуйте пристрій.
1. Переконайтеся, що додаток `fruit-quality-detector` відкритий у VS Code.
1. Відкрийте файл `app.py`.
1. Додайте наступний код на початок `app.py`, щоб підключити додаток до CounterFit:
```python
from counterfit_connection import CounterFitConnection
CounterFitConnection.init('127.0.0.1', 5000)
```
1. Додайте наступний код до вашого файлу `app.py`:
```python
import io
from counterfit_shims_picamera import PiCamera
```
Цей код імпортує необхідні бібліотеки, включаючи клас `PiCamera` з бібліотеки counterfit_shims_picamera.
1. Додайте наступний код нижче, щоб ініціалізувати камеру:
```python
camera = PiCamera()
camera.resolution = (640, 480)
camera.rotation = 0
```
Цей код створює об'єкт PiCamera, встановлює роздільну здатність 640x480. Хоча підтримуються вищі роздільні здатності, класифікатор зображень працює з набагато меншими зображеннями (227x227), тому немає потреби захоплювати та надсилати більші зображення.
Рядок `camera.rotation = 0` встановлює обертання зображення в градусах. Якщо потрібно повернути зображення з вебкамери або файлу, налаштуйте це відповідно. Наприклад, якщо ви хочете змінити зображення банана на вебкамері в ландшафтному режимі на портретний, встановіть `camera.rotation = 90`.
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. Налаштуйте зображення, яке камера в CounterFit буде захоплювати. Ви можете встановити *Source* як *File*, потім завантажити файл зображення, або встановити *Source* як *WebCam*, і зображення будуть захоплюватися з вашої вебкамери. Переконайтеся, що ви натиснули кнопку **Set** після вибору зображення або вебкамери.
![CounterFit з файлом, встановленим як джерело зображення, і вебкамерою, що показує людину, яка тримає банан у попередньому перегляді вебкамери](../../../../../translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.uk.png)
1. Зображення буде захоплено і збережено як `image.jpg` у поточній папці. Ви побачите цей файл у провіднику VS Code. Виберіть файл, щоб переглянути зображення. Якщо воно потребує обертання, оновіть рядок `camera.rotation = 0` відповідно і зробіть ще одну фотографію.
> 💁 Ви можете знайти цей код у папці [code-camera/virtual-iot-device](../../../../../4-manufacturing/lessons/2-check-fruit-from-device/code-camera/virtual-iot-device).
😀 Ваша програма для камери була успішною!
---
**Відмова від відповідальності**:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.