7.5 KiB
画像をキャプチャする - 仮想IoTハードウェア
このレッスンでは、仮想IoTデバイスにカメラセンサーを追加し、画像を読み取る方法を学びます。
ハードウェア
仮想IoTデバイスは、ファイルからの画像またはウェブカメラからの画像を送信するシミュレートされたカメラを使用します。
CounterFitにカメラを追加する
仮想カメラを使用するには、CounterFitアプリにカメラを追加する必要があります。
タスク - CounterFitにカメラを追加する
CounterFitアプリにカメラを追加します。
-
fruit-quality-detector
というフォルダーにapp.py
という単一のファイルを持つ新しいPythonアプリを作成し、Python仮想環境を設定して、CounterFitのpipパッケージを追加します。⚠️ 必要に応じて、レッスン1でのCounterFit Pythonプロジェクトの作成と設定に関する手順を参照してください。
-
追加のPipパッケージをインストールして、Cameraセンサーと通信できるCounterFit shimをインストールします。このshimは、一部のPicamera Pipパッケージをシミュレートします。仮想環境が有効化されたターミナルからインストールしてください。
pip install counterfit-shims-picamera
-
CounterFitウェブアプリが実行中であることを確認します。
-
カメラを作成します:
-
SensorsペインのCreate sensorボックスで、Sensor typeボックスをドロップダウンし、Cameraを選択します。
-
Nameを
Picamera
に設定します。 -
Addボタンを選択してカメラを作成します。
カメラが作成され、センサーリストに表示されます。
-
カメラをプログラムする
仮想IoTデバイスは、仮想カメラを使用するようにプログラムできます。
タスク - カメラをプログラムする
デバイスをプログラムします。
-
fruit-quality-detector
アプリがVS Codeで開かれていることを確認します。 -
app.py
ファイルを開きます。 -
CounterFitにアプリを接続するために、以下のコードを
app.py
の先頭に追加します: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フォルダーにあります。
😀 カメラプログラムが成功しました!
免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。