Raspberry Pi AI Kit: 物体認識を軽く試す

Raspberry Pi AI Kit: 物体認識を軽く試す
Page content

何ができるのかわからずポチったやつ

AIというものに、Raspberry Pi 5との組み合わせで触れてみようと考えて、2024年9月に「Raspberry Pi AI Kit (Hailo-8L)」を購入。最近になってやっとこのおもちゃをまともに動かし始めたので、動作方法などをメモとして残す。

今回登場する物品の購入価格は次のとおり。なお、本記事執筆時点 (2025年3月) では、「Hailo-8L」よりも高性能なAIアクセラレータ「Hailo-8」を搭載したHAT+も登場しているので、入手を検討する際にはご注意ください。

種別商品名購入価格 (税込)購入店購入日
SBCRaspberry Pi 5 (8GB)15,290円スイッチサイエンス2024-04-18
拡張ボードRaspberry Pi AI Kit (Hailo 8L搭載)13,310円スイッチサイエンス2024-09-19
ケース (ファン付き)Raspberry Pi 5用公式ケース Red/White1,672円スイッチサイエンス2024-04-18
GPIOスタッキングヘッダーEntaniya 2 X 20 (40ピン) Raspberry Pi用GPIOスタッキングヘッダー 【A078】385円Amazon.co.jp2025-01-14
Raspberry Pi AI HAT+(13TOPS版)Raspberrypi5

Raspberry Pi AI HAT+(13TOPS版)Raspberrypi5

Raspberrypi

AI Kitの取り付け→認識確認まで

次の公式ページをもとに進める。OSを設定→AI Kitを取り付け→AI Kitが認識されているかどうかを確認 という流れになる。

Step-1. OSの設定

  1. Raspberry Pi 5で用いるストレージに、Raspberry Pi OS (64-bit) with desktopをインストールする
  2. Raspberry Pi 5を起動する
  3. Raspberry Pi OSを最新化して、次にEPPROMが最新であることを確認する (最新ではない場合は更新する)
    $ sudo apt update && sudo apt full-upgrade
    
    $ sudo rpi-eeprom-update
    BOOTLOADER: up to date
    CURRENT: Mon 10 Mar 17:10:37 UTC 2025 (1741626637)
     LATEST: Mon 10 Mar 17:10:37 UTC 2025 (1741626637)
    RELEASE: default (/usr/lib/firmware/raspberrypi/bootloader-2712/default)
             Use raspi-config to change the release.
    
  4. OS設定で「enable PCIe Gen 3.0」する (Ref: Raspberry Pi hardware - Raspberry Pi Documentation > PCIe Gen 3.0)
    • config.txtを編集して設定を追加するか、もしくは、raspi-configを起動してメニュー選択で設定する
  5. AI Kit取り付けに備えて、Raspberry Pi 5をshutdownする

Step-2. AI Kitの取り付け

AI Kit - Raspberry Pi Documentation > Installを参照しつつ、本来はAI Kitとは組み合わせられない、手元の純正ケース (ファンあり) を無理やり組み合わせた。GPIOスタッキングヘッダーは背が高いものに交換し、ケースには、AI Kitと本体を接続するフラットケーブルを通す穴あけ加工を施した。

Entaniya 2 X 20 (40ピン) Raspberry Pi用GPIOスタッキングヘッダー 【A078】

Entaniya 2 X 20 (40ピン) Raspberry Pi用GPIOスタッキングヘッダー 【A078】

Entaniya

あくまで参考: ファンレスケースとの組み合わせ

当初は、手元のファンレスケースとAI Kitを組み合わせていた。しかし、後述の物体認識プログラムを動かし続けていると、CPUからの熱伝導でケースが熱くなりすぎて指で触るのに躊躇するぐらいになる。機械としては動作範囲内の温度にとどまっているのかもしれないが、心理的にはちょっと嫌なので上記のファン付きケースに切り替えることにした。

種別商品名購入価格 (税込)購入店購入日
ケース (ファンレス)EDATEC Passive Cooling CNC Case2,706円スイッチサイエンス2024-04-23

Step-3. hailoの導入とAI Kitの認識状態の確認

次の公式ページをもとに進める。

  1. AI Kitを取り付けたRaspberry Pi 5を起動する
  2. hailo-allを導入する
    $ sudo apt install hailo-all
    (省略)
    0 upgraded, 200 newly installed, 0 to remove and 0 not upgraded.
    Need to get 312 MB of archives.
    After this operation, 937 MB of additional disk space will be used.
    Do you want to continue? [Y/n] 
    
  3. Raspberry Pi 5を再起動する
  4. AI Kitの認識状態を確認する
    $ hailortcli fw-control identify
    Executing on device: 0001:01:00.0
    Identifying board
    Control Protocol Version: 2
    Firmware Version: 4.20.0 (release,app,extended context switch buffer)
    Logger Version: 0
    Board Name: Hailo-8
    Device Architecture: HAILO8L
    Serial Number: HLDDLBB243302156
    Part Number: HM21LB1C2LAE
    Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP
    
  5. dmesgを確認しておく (妙なエラーが散見されるが、どうなんだろう……)
    $ dmesg | grep -i hailo
    [    2.665072] hailo: Init module. driver version 4.20.0
    [    2.665170] hailo 0001:01:00.0: Probing on: 1e60:2864...
    [    2.665176] hailo 0001:01:00.0: Probing: Allocate memory for device extension, 13184
    [    2.665194] hailo 0001:01:00.0: enabling device (0000 -> 0002)
    [    2.665199] hailo 0001:01:00.0: Probing: Device enabled
    [    2.665220] hailo 0001:01:00.0: Probing: mapped bar 0 - 0000000078db2bd0 16384
    [    2.665225] hailo 0001:01:00.0: Probing: mapped bar 2 - 00000000ef1a13d8 4096
    [    2.665227] hailo 0001:01:00.0: Probing: mapped bar 4 - 00000000d01bc604 16384
    [    2.665230] hailo 0001:01:00.0: Probing: Force setting max_desc_page_size to 4096 (recommended value is 16384)
    [    2.665238] hailo 0001:01:00.0: Probing: Enabled 64 bit dma
    [    2.665240] hailo 0001:01:00.0: Probing: Using userspace allocated vdma buffers
    [    2.665243] hailo 0001:01:00.0: Disabling ASPM L0s 
    [    2.665246] hailo 0001:01:00.0: Successfully disabled ASPM L0s 
    [    2.665338] hailo 0001:01:00.0: Writing file hailo/hailo8_fw.bin
    [    2.833625] hailo 0001:01:00.0: File hailo/hailo8_fw.bin written successfully
    [    2.833654] hailo 0001:01:00.0: Writing file hailo/hailo8_board_cfg.bin
    [    2.833702] Failed to write file hailo/hailo8_board_cfg.bin
    [    2.833705] hailo 0001:01:00.0: File hailo/hailo8_board_cfg.bin written successfully
    [    2.833707] hailo 0001:01:00.0: Writing file hailo/hailo8_fw_cfg.bin
    [    2.833717] Failed to write file hailo/hailo8_fw_cfg.bin
    [    2.833719] hailo 0001:01:00.0: File hailo/hailo8_fw_cfg.bin written successfully
    [    2.922961] hailo 0001:01:00.0: NNC Firmware loaded successfully
    [    2.922969] hailo 0001:01:00.0: FW loaded, took 257 ms
    [    2.951233] hailo 0001:01:00.0: Probing: Added board 1e60-2864, /dev/hailo0
    

物体認識を試す

AI Kitを駆動させるために、GitHubにてHailoが提供しているサンプルプログラムを用いる。ここからの操作は、Raspberry Pi DesktopのGUIにて実施すること。

  1. サンプルプログラムをgit cloneする
    $ git clone https://github.com/hailo-ai/hailo-rpi5-examples.git
    $ cd hailo-rpi5-examples
    $ ./install.sh
    $ source setup_env.sh
    
  2. 同梱のテスト動画ファイルを用いて物体認識を試す
    (venv_hailo_rpi5_examples) $ python basic_pipelines/detection_simple.py --show-fps
    (venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps
    
  3. USBカメラの映像やUSB接続のHDMIキャプチャーの入力を用いて、物体認識を試すこともできる
    (venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps --input /dev/video0
    
  4. おまけ: Rasbperry PiのCPU温度を確認するコマンドはこちら
    $ vcgencmd measure_temp
    temp=64.2'C
    

応用編: RTSPとM3U8への対応

a. RTSPのストリーミング動画を入力できるようにする

次の記事を参考に、detection.py等のサンプルスクリプトへのinputとして、RTSPのストリーミング動画が入力できるように改造する。

  1. hailo-rpi5-examplesディレクトリ内に、次のパッチファイルを用意する
    $ cat ./gstreamer_helper_pipelines.py.patch
    --- ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py.original	2025-03-31 22:58:01.323864758 +0900
    +++ ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py.modified	2025-03-31 23:10:39.426144645 +0900
    @@ -11,6 +11,8 @@
    		return 'libcamera'
    	elif input_source.startswith('0x'):
    		return 'ximage'
    +    elif input_source.startswith('rtsp'):
    +        return 'rtsp'
    	else:
    		return 'file'
    
    @@ -95,6 +97,14 @@
    			f'{QUEUE(name=f"{name}queue_scale_")} ! '
    			f'videoscale ! '
    		)
    +    elif source_type == 'rtsp':
    +        source_element = (
    +            f"rtspsrc location={video_source} name=src_0 message-forward=true ! "
    +            + "rtph264depay !"
    +            + "queue name=hailo_preprocess_q_0 leaky=no max-size-buffers=5 max-size-bytes=0 max-size-time=0 ! "
    +            + "decodebin ! queue leaky=downstream max-size-buffers=5 max-size-bytes=0 max-size-time=0 ! "
    +            " video/x-raw, format=I420 ! "
    +        )
    	else:
    		source_element = (
    			f'filesrc location="{video_source}" name={name} ! '
    
  2. 上記パッチをgstreamer_helper_pipelines.pyに適用する
    $ patch -u ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py < ./gstreamer_helper_pipelines.py.patch 
    patching file ./venv_hailo_rpi5_examples/lib/python3.11/site-packages/hailo_apps_infra/gstreamer_helper_pipelines.py
    
  3. 次のコマンドを実行すると、RTSPのストリーミング動画に対しても物体認識を働かせることができるとわかる
    (venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps --input rtsp://1234:5678@192.168.1.XXX/live
    

上記のURL「rtsp://1234:5678@192.168.1.XXX/live」は、ネットワークカメラのATOM v2アプリの中で確認できるURLを参考にした。実際に、我が家のATOM Cam 2のRTSPストリーミング動画を、Raspberry Pi AI Kitに直接入力することが可能だ。

アトムテック(ATOM tech) 屋内/屋外兼用の防犯カメラ ATOM Cam 2 (アトムカムツー) 1080PフルHD Alexa対応 見守りカメラ 監視カメラ ネットワークカメラ ペットカメラ/ベビーモニター AC2

アトムテック(ATOM tech) 屋内/屋外兼用の防犯カメラ ATOM Cam 2 (アトムカムツー) 1080PフルHD Alexa対応 見守りカメラ 監視カメラ ネットワークカメラ ペットカメラ/ベビーモニター AC2

アトムテック(ATOM tech)

b. M3U8形式のストリームを入力するためには?

ツールを組み合わせると比較的簡単に、M3U8形式のストリームをRTSPとして配信できるらしい。

  1. 何らかのローカルPC (例: 192.168.1.100) にて、MediaMTXをRTSPサーバとして起動しておく
    $ mediamtx
    2025/04/01 01:44:35 INF MediaMTX v1.11.3
    2025/04/01 01:44:35 INF configuration loaded from /home/hogehoge/bin/mediamtx.yml
    2025/04/01 01:44:35 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
    2025/04/01 01:44:35 INF [RTMP] listener opened on :1935
    2025/04/01 01:44:35 INF [HLS] listener opened on :8888
    2025/04/01 01:44:35 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
    2025/04/01 01:44:35 INF [SRT] listener opened on :8890 (UDP)
    
  2. 上記ローカルPCにてFFmpegを次のように起動して、指定されたM3U8形式のストリームを形式変換しながらMediaMTXに配信する
    $ ffmpeg -re -i <何らかのM3U8形式のストリームURL> -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://192.168.1.100:8554/live
    
  3. 1と2の連携の結果、Raspberry Pi 5にて次のコマンドを実行すると、M3U8形式のストリーム動画に対しても物体認識を働かせることができるとわかる
    (venv_hailo_rpi5_examples) $ python basic_pipelines/detection.py --show-fps --input rtsp://192.168.1.100:8554/live
    

参考リンク