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

126 lines
9.3 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-28T12:27:12+00:00",
"source_file": "4-manufacturing/lessons/2-check-fruit-from-device/virtual-device-camera.md",
"language_code": "sr"
}
-->
# Снимање слике - Виртуелни IoT хардвер
У овом делу лекције, додаћете сензор камере вашем виртуелном IoT уређају и читати слике са њега.
## Хардвер
Виртуелни IoT уређај ће користити симулирану камеру која шаље слике или из датотека, или са ваше веб камере.
### Додавање камере у CounterFit
Да бисте користили виртуелну камеру, потребно је да је додате у CounterFit апликацију.
#### Задатак - додавање камере у CounterFit
Додајте камеру у CounterFit апликацију.
1. Направите нову Python апликацију на вашем рачунару у фасцикли под називом `fruit-quality-detector` са једним фајлом под називом `app.py` и Python виртуелним окружењем, и додајте CounterFit pip пакете.
> ⚠️ Можете се позвати на [упутства за креирање и подешавање CounterFit Python пројекта у лекцији 1 ако је потребно](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md).
1. Инсталирајте додатни Pip пакет за инсталацију CounterFit shim-а који може комуницирати са сензорима камере симулирајући неке од функција [Picamera Pip пакета](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.sr.png)
Камера ће бити креирана и појавиће се на листи сензора.
![Креирана камера](../../../../../translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.sr.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.sr.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). Иако се трудимо да превод буде тачан, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.