捕捉影像 - 虛擬物聯網硬體
在本課程中,你將為虛擬物聯網設備添加一個相機感測器,並從中讀取影像。
硬體
虛擬物聯網設備將使用模擬相機,該相機可以從文件或你的網絡攝像頭發送影像。
將相機添加到 CounterFit
要使用虛擬相機,你需要將其添加到 CounterFit 應用中
任務 - 將相機添加到 CounterFit
將相機添加到 CounterFit 應用中。
-
在你的電腦上創建一個名為
fruit-quality-detector
的新 Python 應用,該應用位於一個文件夾中,並包含一個名為app.py
的文件和一個 Python 虛擬環境,然後添加 CounterFit pip 套件。⚠️ 如果需要,你可以參考第 1 課中創建和設置 CounterFit Python 項目的說明。
-
安裝一個額外的 Pip 套件,以安裝一個 CounterFit shim,它可以通過模擬一些 Picamera Pip 套件 來與相機感測器通信。確保你在啟動虛擬環境的終端中安裝此套件。
pip install counterfit-shims-picamera
-
確保 CounterFit 網頁應用正在運行
-
創建一個相機:
-
在 Sensors 面板的 Create sensor 框中,展開 Sensor type 框並選擇 Camera。
-
將 Name 設置為
Picamera
-
選擇 Add 按鈕以創建相機
相機將被創建並出現在感測器列表中。
-
編程相機
現在可以編程虛擬物聯網設備以使用虛擬相機。
任務 - 編程相機
編程設備。
-
確保
fruit-quality-detector
應用在 VS Code 中打開 -
打開
app.py
文件 -
將以下代碼添加到
app.py
的頂部,以將應用連接到 CounterFit:from counterfit_connection import CounterFitConnection
CounterFitConnection.init('127.0.0.1', 5000) -
將以下代碼添加到你的
app.py
文件中:import io
from counterfit_shims_picamera import PiCamera此代碼導入了一些所需的庫,包括來自 counterfit_shims_picamera 庫的
PiCamera
類。 -
在此代碼下方添加以下代碼以初始化相機:
camera = PiCamera()
camera.resolution = (640, 480)
camera.rotation = 0此代碼創建了一個 PiCamera 對象,將解析度設置為 640x480。雖然支持更高的解析度,但影像分類器處理的影像要小得多(227x227),因此無需捕捉和發送更大的影像。
camera.rotation = 0
行設置影像的旋轉角度。如果需要旋轉來自網絡攝像頭或文件的影像,請適當設置此值。例如,如果你想 將橫向模式下的網絡攝像頭中的香蕉影像更改為縱向模式,請設置camera.rotation = 90
。 -
在此代碼下方添加以下代碼以將影像捕捉為二進制數據:
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
對象中讀取所有數據並將其寫入文件。💁 你可以通過將文件名傳遞給
camera.capture
調用來直接將影像捕捉到文件中。使用BytesIO
對象的原因是,在本課程的後面,你可以將影像發送到你的影像分類器。 -
配置 CounterFit 中相機將捕捉的影像。你可 以將 Source 設置為 File,然後上傳一個影像文件,或者將 Source 設置為 WebCam,影像將從你的網絡攝像頭捕捉。確保在選擇圖片或選擇網絡攝像頭後選擇 Set 按鈕。
-
影像將被捕捉並保存為當前文件夾中的
image.jpg
。你將在 VS Code 資源管理器中看到此文件。選擇該文件以查看影像。如果需要旋轉,請根據需要更新camera.rotation = 0
行並重新拍攝照片。
💁 你可以在 code-camera/virtual-iot-device 文件夾中找到此代碼。
😀 你的相機程序成功了!