# ਇੱਕ ਚਿੱਤਰ ਕੈਪਚਰ ਕਰੋ - ਵਰਚੁਅਲ IoT ਹਾਰਡਵੇਅਰ ਇਸ ਪਾਠ ਦੇ ਇਸ ਭਾਗ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਿੱਚ ਇੱਕ ਕੈਮਰਾ ਸੈਂਸਰ ਸ਼ਾਮਲ ਕਰੋਗੇ ਅਤੇ ਇਸ ਤੋਂ ਚਿੱਤਰ ਪੜ੍ਹੋਗੇ। ## ਹਾਰਡਵੇਅਰ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਇੱਕ ਨਕਲੀ ਕੈਮਰਾ ਵਰਤੇਗਾ ਜੋ ਜਾਂ ਤਾਂ ਫਾਈਲਾਂ ਤੋਂ ਚਿੱਤਰ ਭੇਜਦਾ ਹੈ ਜਾਂ ਤੁਹਾਡੇ ਵੈਬਕੈਮ ਤੋਂ। ### ਕਾਊਂਟਰਫਿਟ ਵਿੱਚ ਕੈਮਰਾ ਸ਼ਾਮਲ ਕਰੋ ਵਰਚੁਅਲ ਕੈਮਰਾ ਵਰਤਣ ਲਈ, ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਕਾਊਂਟਰਫਿਟ ਐਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਪਵੇਗਾ। #### ਟਾਸਕ - ਕਾਊਂਟਰਫਿਟ ਵਿੱਚ ਕੈਮਰਾ ਸ਼ਾਮਲ ਕਰੋ ਕਾਊਂਟਰਫਿਟ ਐਪ ਵਿੱਚ ਕੈਮਰਾ ਸ਼ਾਮਲ ਕਰੋ। 1. ਆਪਣੇ ਕੰਪਿਊਟਰ 'ਤੇ `fruit-quality-detector` ਨਾਮਕ ਫੋਲਡਰ ਵਿੱਚ ਇੱਕ ਨਵਾਂ ਪਾਇਥਨ ਐਪ ਬਣਾਓ ਜਿਸ ਵਿੱਚ `app.py` ਨਾਮਕ ਇੱਕ ਫਾਈਲ ਹੋਵੇ ਅਤੇ ਇੱਕ ਪਾਇਥਨ ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਬਣਾਓ, ਅਤੇ ਕਾਊਂਟਰਫਿਟ ਪਿਪ ਪੈਕੇਜ ਸ਼ਾਮਲ ਕਰੋ। > ⚠️ ਤੁਸੀਂ [ਪਾਠ 1 ਵਿੱਚ ਕਾਊਂਟਰਫਿਟ ਪਾਇਥਨ ਪ੍ਰੋਜੈਕਟ ਬਣਾਉਣ ਅਤੇ ਸੈਟਅੱਪ ਕਰਨ ਦੇ ਨਿਰਦੇਸ਼ਾਂ](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md) ਨੂੰ ਜ਼ਰੂਰਤ ਪੈਣ 'ਤੇ ਵੇਖ ਸਕਦੇ ਹੋ। 1. ਇੱਕ ਵਾਧੂ ਪਿਪ ਪੈਕੇਜ ਇੰਸਟਾਲ ਕਰੋ ਜੋ ਕਾਊਂਟਰਫਿਟ ਸ਼ਿਮ ਨੂੰ ਕੈਮਰਾ ਸੈਂਸਰਾਂ ਨਾਲ ਗੱਲ ਕਰਨ ਲਈ ਇੰਸਟਾਲ ਕਰਦਾ ਹੈ, ਜੋ ਕਿ ਕੁਝ [Picamera Pip ਪੈਕੇਜ](https://pypi.org/project/picamera/) ਨੂੰ ਨਕਲ ਕਰਦਾ ਹੈ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਸੀਂ ਇਹ ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਐਕਟੀਵੇਟ ਕੀਤੇ ਹੋਏ ਟਰਮੀਨਲ ਤੋਂ ਇੰਸਟਾਲ ਕਰ ਰਹੇ ਹੋ। ```sh pip install counterfit-shims-picamera ``` 1. ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਕਾਊਂਟਰਫਿਟ ਵੈਬ ਐਪ ਚੱਲ ਰਹੀ ਹੈ। 1. ਕੈਮਰਾ ਬਣਾਓ: 1. *Sensors* ਪੈਨ ਵਿੱਚ *Create sensor* ਬਾਕਸ ਵਿੱਚ, *Sensor type* ਡ੍ਰਾਪਡਾਊਨ ਬਾਕਸ ਵਿੱਚੋਂ *Camera* ਚੁਣੋ। 1. *Name* ਨੂੰ `Picamera` ਸੈਟ ਕਰੋ। 1. **Add** ਬਟਨ ਚੁਣੋ ਤਾਂ ਜੋ ਕੈਮਰਾ ਬਣਾਇਆ ਜਾ ਸਕੇ। ![ਕੈਮਰਾ ਸੈਟਿੰਗ](../../../../../translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.pa.png) ਕੈਮਰਾ ਬਣਾਇਆ ਜਾਵੇਗਾ ਅਤੇ ਸੈਂਸਰਾਂ ਦੀ ਸੂਚੀ ਵਿੱਚ ਦਿਖਾਈ ਦੇਵੇਗਾ। ![ਬਣਾਇਆ ਗਿਆ ਕੈਮਰਾ](../../../../../translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.pa.png) ## ਕੈਮਰੇ ਨੂੰ ਪ੍ਰੋਗਰਾਮ ਕਰੋ ਹੁਣ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਨੂੰ ਵਰਚੁਅਲ ਕੈਮਰਾ ਵਰਤਣ ਲਈ ਪ੍ਰੋਗਰਾਮ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ### ਟਾਸਕ - ਕੈਮਰੇ ਨੂੰ ਪ੍ਰੋਗਰਾਮ ਕਰੋ ਡਿਵਾਈਸ ਨੂੰ ਪ੍ਰੋਗਰਾਮ ਕਰੋ। 1. ਯਕੀਨੀ ਬਣਾਓ ਕਿ `fruit-quality-detector` ਐਪ VS Code ਵਿੱਚ ਖੁੱਲੀ ਹੈ। 1. `app.py` ਫਾਈਲ ਖੋਲ੍ਹੋ। 1. `app.py` ਦੇ ਉੱਪਰ ਹਿੱਸੇ ਵਿੱਚ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ ਤਾਂ ਜੋ ਐਪ ਨੂੰ ਕਾਊਂਟਰਫਿਟ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਸਕੇ: ```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` ਆਬਜੈਕਟ ਤੋਂ ਸਾਰਾ ਡੇਟਾ ਪੜ੍ਹਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਫਾਈਲ ਵਿੱਚ ਲਿਖਦਾ ਹੈ। > 💁 ਤੁਸੀਂ ਚਿੱਤਰ ਨੂੰ ਸਿੱਧੇ ਫਾਈਲ ਵਿੱਚ ਕੈਪਚਰ ਕਰ ਸਕਦੇ ਹੋ `camera.capture` ਕਾਲ ਵਿੱਚ ਫਾਈਲ ਨਾਮ ਪਾਸ ਕਰਕੇ। `BytesIO` ਆਬਜੈਕਟ ਵਰਤਣ ਦਾ ਕਾਰਨ ਇਹ ਹੈ ਕਿ ਇਸ ਪਾਠ ਵਿੱਚ ਬਾਅਦ ਵਿੱਚ ਤੁਸੀਂ ਚਿੱਤਰ ਨੂੰ ਆਪਣੇ ਚਿੱਤਰ ਕਲਾਸੀਫਾਇਰ ਨੂੰ ਭੇਜ ਸਕਦੇ ਹੋ। 1. ਕਾਊਂਟਰਫਿਟ ਵਿੱਚ ਕੈਮਰੇ ਦੁਆਰਾ ਕੈਪਚਰ ਕੀਤੇ ਜਾਣ ਵਾਲੇ ਚਿੱਤਰ ਨੂੰ ਕਨਫਿਗਰ ਕਰੋ। ਤੁਸੀਂ *Source* ਨੂੰ *File* 'ਤੇ ਸੈਟ ਕਰ ਸਕਦੇ ਹੋ, ਫਿਰ ਇੱਕ ਚਿੱਤਰ ਫਾਈਲ ਅਪਲੋਡ ਕਰੋ, ਜਾਂ *Source* ਨੂੰ *WebCam* 'ਤੇ ਸੈਟ ਕਰੋ, ਅਤੇ ਚਿੱਤਰ ਤੁਹਾਡੇ ਵੈਬਕੈਮ ਤੋਂ ਕੈਪਚਰ ਕੀਤੇ ਜਾਣਗੇ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਚਿੱਤਰ ਚੁਣਨ ਜਾਂ ਵੈਬਕੈਮ ਚੁਣਨ ਦੇ ਬਾਅਦ **Set** ਬਟਨ ਚੁਣੋ। ![ਕਾਊਂਟਰਫਿਟ ਵਿੱਚ ਫਾਈਲ ਨੂੰ ਚਿੱਤਰ ਸਰੋਤ ਵਜੋਂ ਸੈਟ ਕੀਤਾ ਗਿਆ ਹੈ, ਅਤੇ ਵੈਬਕੈਮ ਵਿੱਚ ਇੱਕ ਵਿਅਕਤੀ ਕੇਲਾ ਫੜੇ ਹੋਏ ਦਿਖਾਈ ਦੇ ਰਿਹਾ ਹੈ](../../../../../translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.pa.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) ਫੋਲਡਰ ਵਿੱਚ ਪਾ ਸਕਦੇ ਹੋ। 😀 ਤੁਹਾਡਾ ਕੈਮਰਾ ਪ੍ਰੋਗਰਾਮ ਸਫਲ ਰਿਹਾ! --- **ਅਸਵੀਕਰਤਾ**: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚੀਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇਸ ਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।