ActcastOS 4 Migration ガイド

ActcastOS 4 Migration ガイド

ActcastOS 4 ではベース OS が Raspberry Pi OS Bookworm となっており、アプリの設定ファイルやコードの修正が必要になります。 ここでは ImageNet Classification を例に、ActcastOS 3 上で動作する既存のアプリを ActcastOS 4 に対応する方法について説明します。

コード全体は こちら を参照してください。

OS 3 から OS 4 への移行で重要なポイントは以下のとおりです

  • 各種設定ファイルに Bookworm 用の設定を追加する必要がある
  • CSI カメラを用いている場合、Raspberry Pi OS Bullseye で用いられていた UnicamIspCapture は Bookworm では利用できないため、LibcameraCapture を用いる必要がある
  • OS 4 以降は 64bit 環境となるため、ネイティブライブラリを利用している場合は 64bit 環境向けにビルドし直す必要がある

事前準備

既に Actcast 上で保守している OS 3 上で動作するアプリがあることを前提としています。

既存のアプリを Bookworm にも対応するための修正を行います。

Actdk コマンド

ActDK が 1.54.0 以上であることを確認してください。

$ actdk --version

actdk 1.54.0

開発デバイスについて

従来、act の動作確認を行うためには Actsim を用いていました。OS 4 以降では、通常の Actcast デバイスを開発モードにすることで、Actsim と同様に actdk コマンドから操作できるようになります。 詳細は開発モードを参照してください。

今回の例では example.local でアクセスできる Actcast デバイス に bookworm-actsim という名前を付けています。

$ actdk remote add bookworm-actsim@example.local

事前準備の確認

開発モードの Actcast デバイス に対して actdk build コマンドを実行し、以下のエラーが出ることを確認してください。

異なるエラーが出ている場合、Actdk コマンドのバージョンが 1.54.0 以上であることと、 Actcast デバイスの開発モードが有効になっていることを確認してください。

$ actdk build bookworm-actsim

Error:
   0: Target type for remote `Raspberry Pi (bookworm)` is not set.

Location:
   src/workspace.rs:633

Suggestion: Try to add "raspberrypi-bookworm" to "target_types" in your .actdk/setting.json

修正箇所の概要

まずはじめに修正の必要な項目について列挙します。

  1. .actdk/setting.jsontarget_types を明示し、 raspberrypi-bookworm を含める。
  2. .actdk/dependencies.json ファイルに 1 で追加した raspberrypi-bookworm のセクションを含める。
  3. manifesto/ に Bookworm 用のマニフェストファイルを追加する。
  4. カメラデバイスとして CSI カメラを使う場合は LibcameraCapture を使うように変更を行う。

以下ではそれぞれの修正方法を具体的に説明します。

.actdk/setting.json の修正

ファームウェアタイプとして raspberrypi-bookworm を新たにサポートするよう.actdk/setting.jsonを修正します。 以下のように target_types をリストで指定してください。

  {
    "app_id": "imagenet-classification-for-raspi",
    "app_server_id": 1,
    "short_description": "1000 class ImageNet classification demo for raspi",
    "short_descriptions": {
      "ja": "ImageNet1000クラス分類デモ(for raspi)"
    },
-   "target_types": ["raspberrypi-bullseye"]
+   "target_types": ["raspberrypi-bullseye", "raspberrypi-bookworm"]
  }

.actdk/dependencies.json の修正

.actdk/setting.json に追加したファームウェアタイプごとのセクションを追加していきます。

raspberrypi-bookworm セクションを追加します。 必要に応じて apt パッケージや pip の依存パッケージを追記してください。

また actfw-raspberrypi のバージョンを 3.3.1 以上にする必要があります。

  {
    "apt": [
      "libv4l-0",
      "libv4lconvert0",
      "python3-pil",
      "python3-numpy",
      "fonts-dejavu-core"
    ],
    "pip": [],
    "raspberrypi-bullseye": {
      "apt": [],
      "pip": [
-       "actfw-raspberrypi == 3.2.0"
+       "actfw-raspberrypi == 3.3.1"
      ]
    },
+   "raspberrypi-bookworm": {
+     "apt": [],
+     "pip": [
+       "actfw-raspberrypi == 3.3.1"
+     ]
+   }
  }

manifesto ファイルの修正および追加

新規に manifesto/bookworm.json ファイルを追加してください。

manifesto ディレクトリの下であればファイル名は不問です。 ただし、 target_type が重複しないように注意してください。

詳細は アプリケーションの各種スキーマ を参照してください。

+ {
+   "version": 2,
+   "target_type": "raspberrypi-bookworm",
+   "boards": [
+     "RSPi3B",
+     "RSPi3BPlus",
+     "RSPi3APlus",
+     "RSPi4B",
+     "RSPi5B"
+   ],
+   "devices": [
+     { "type": "camera" },
+     { "type": "videocore" },
+     {
+       "type": "framebuffer",
+       "device": [
+         "/dev/fb0"
+       ],
+       "required": false
+     }
+   ]
+ }

プログラムの修正

ここからはプログラムの修正を行います。

Raspberry Pi OS Bookworm で CSI カメラを使うには actfw_core.libcamera_capture モジュールの LibcameraCapture を利用します。USB カメラを使う場合には actfw_core.capture モジュールの V4LCameraCapture を利用します。

以下は Bullseye と Bookworm の両方に対応する場合の app/main に加えた差分です。

    if get_actcast_firmware_type() == "raspberrypi-bullseye" and not use_usb_camera:
        # Use UnicamIspCapture on Raspberry Pi OS Bullseye
        cap = UnicamIspCapture(unicam=device, size=(CAPTURE_WIDTH, CAPTURE_HEIGHT), framerate=framerate)

+   elif get_actcast_firmware_type() == "raspberrypi-bookworm" and not use_usb_camera:
+       import libcamera as libcam
+       from actfw_core.libcamera_capture import LibcameraCapture
+       cap = LibcameraCapture((CAPTURE_WIDTH, CAPTURE_HEIGHT), libcam.PixelFormat("BGR888"), framerate=framerate)
    else:
        # Use V4LCameraCapture on Raspberry Pi OS Buster or use USB camera
        cap = V4LCameraCapture(device, (CAPTURE_WIDTH, CAPTURE_HEIGHT), framerate, format_selector=V4LCameraCapture.FormatSelector.PROPER)

動作確認

従来のアプリ開発と同様に actdk buildactdk run でアプリのビルド、実行を行うことができます。

アプリのアップロード

従来のアプリ開発と同様に actdk upload でアプリのアップロードを行うことができます。

$ actdk upload
start uploading
Build Submission ID: XX
Build ID for Raspberry Pi: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

アップロードは1度行えば Bullseye と Bookworm それぞれのアプリイメージが Actcast へアップロードされます。

Actcast コンソールでアプリのビルド情報を確認すると1つのリビジョンで Bullseye と Bookworm それぞれのビルドがアップロードされていることが確認できます。

bullseye_app_builds.png

その他の注意点

ActcastOS 3 までは 32bit 環境でしたが、ActcastOS 4 以降は 64bit 環境となります。

そのため、以下のことに注意してください

  • 独自にネイティブライブラリをビルドしている場合、64bit 環境向けにビルドし直す必要があります
  • actdk compileでモデルをビルドすると、app/libmodel_64bit.soというファイルが生成されるようになります
    • git などのバージョン管理システムで自動生成されているファイルを無視している場合は、libmodel_64bit.soも無視するように設定を追加してください
最終更新日