Huskylensを使った物体認識処理」で、HuskyLensで物体認識を行いました。「HuskyLens Raspberry Pi Tutorial」に従って、Raspberry PiにHuskyLensを接続し、Object Trackingを行います。

Raspberry PiとHuskyLensの接続

Raspberry PiとHuskylensは付属しているケーブルでI 2 Cにより接続します。

Raspberry PiとHuskylensの接続
Raspberry Pi Huskylens
GND black line
5V red line
SDA green line
SCL blue line

Raspberry PiとHuskyLensの接続画像を次に示します。

次のコマンド「sudo i2cdetect -y 1」で接続を確認します。

Raspberry PiとHuskyLensの接続確認

Raspberry PiとHuskyLensの接続を次の手順で確認します。

Google App EngineでHuskyLensの画像を処理するために、Pure Pythonのライブラリ「pypng」をインストールします

$ sudo pip3 install pypng --break-system-packages
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pypng
  Downloading https://www.piwheels.org/simple/pypng/pypng-0.20220715.0-py3-none-any.whl (58 kB)

             ・・・

接続を確認するために、つぎのスクリプトを実行します。メッセージ「Knock Recieved」が出力され、正常に接続されたことを確認できました。

$ python3
Python 3.11.2 (main, Nov 30 2024, 21:22:50) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from huskylib import HuskyLensLibrary
>>> hl= HuskyLensLibrary("I2C","",address=0x32)
>>> print(hl.knock())
Knock Recieved
>>>

knock関数の仕様を次に示します。

knock()

Description:
Send a simple knock to the HuskyLens to ensure that you are connected and is able to communicate.
Return:
Return “Knock Received” on success

「error: externally-managed-environment」の発生

ライブラリ「pypng」をインストールするときに、次の「error: externally-managed-environment」が発生しました。これは、「直接pipでパッケージインストールせずに、仮装環境でインストールする」必要があるようです。

$ sudo pip3 install pypng
error: externally-managed-environment

× This environment is externally managed
mq> To install Python packages system-wide, try apt install

             ・・・

HuskyLensでObject Tracking

Object Trackingで使用するボタンを次に示します。

  • Object Trackingは、「Function」ボタンを回して「Object Tracking」を選択します。
  • 「Auto Save」と「Learn Enable」を「ON」(プログレスバーを白から青)にします




  • Object Trackingの学習は、「Learning 」ボタンを押し続け、物体のいろいろな面を学習させます。ボタンを離すと「Click again to Forget!」が表示されるので、そのままタイムアウトさせると、学習データが保存されます。逆にタイムアウト前にボタンを押すと学習データが削除されます。

学習の準備と実行を次に示します。

Raspberry PiでHuskyLensで取得したObject Trackingの物体情報の取得

HuskyLens Raspberry Pi Tutorial」のサンプルスクリプト「exampleHL.py」の6行目をコメント、7行目をコメント削除して、I 2 Cを使ったインタフェースとして、Object Trackingの物体情報を取得します。

サンプルスクリプト「exampleHL.py」を実行した結果を次に示します。「 r). getBlocksByID(1)」を使用します。

$ ls
__pycache__  exampleHL.py  huskylib.py
pi@raspberrypi:~/ObjectTracking $ python3 exampleHL.py
********************************************************************************************************************
MENU OPTIONS:
a). knock()                                      b). setCustomName() #Random String & Cords
c). customText() #Random String & Cords          d). clearText()
e). requestAll()                                 f). saveModelToSDCard(1)
g). loadModelFromSDCard(1)                       h). savePictureToSDCard()
i). count()                                      j). learnedObjCount()
k). saveScreenshotToSDCard()                     l). blocks()
m). arrows()                                     n). learned()
o). learnedBlocks()                              p). learnedArrows()
q). getObjectByID(1)                             r). getBlocksByID(1)
s). getArrowsByID(1)                             t). algorthim() #Random Choice
u). learn(1)                                     v). forget()
w). frameNumber()                                x).
[*] TYPE "MENU" to show the command menu[*]
[*] TYPE "QUIT" to quit[*]
********************************************************************************************************************

Enter cmd letter:r
[*] COMMAND -> getBlocksByID(1)[*]
[*] RESPONSE [*]
         BLOCK_1 : {"x": 170, "y": 152, "width": 105, "height": 105, "ID": 1, "learned": true, "type": "BLOCK"}

Enter cmd letter:r
[*] COMMAND -> getBlocksByID(1)[*]
[*] RESPONSE [*]
         BLOCK_1 : {"x": 51, "y": 151, "width": 100, "height": 100, "ID": 1, "learned": true, "type": "BLOCK"}

Enter cmd letter:r
[*] COMMAND -> getBlocksByID(1)[*]
[*] RESPONSE [*]
         BLOCK_1 : {"x": 230, "y": 152, "width": 116, "height": 116, "ID": 1, "learned": true, "type": "BLOCK"}

Enter cmd letter:r
[*] COMMAND -> getBlocksByID(1)[*]
[*] RESPONSE [*]
         BLOCK_1 : {"x": 146, "y": 80, "width": 72, "height": 72, "ID": 1, "learned": true, "type": "BLOCK"}

Enter cmd letter:r
[*] COMMAND -> getBlocksByID(1)[*]
[*] RESPONSE [*]
         BLOCK_1 : {"x": 206, "y": 197, "width": 70, "height": 70, "ID": 1, "learned": true, "type": "BLOCK"}

Enter cmd letter: