[Raspberry Pi Zero 2W] libcamera-appsでtensorflow liteのpostprocess処理を動かした [メモ]

syurecat.hatenablog.com

の続き。libcamera-appsは撮った画像に対してtensorflow-liteやopencvで後処理を加えることができるようだ。 やりかたはRaspi公式にある。tensoflow-liteで素振りをやってみよう。

ハードはRaspberry Pi Zero 2W ( OSはBullseye ) + imx219

大まかな流れ、tensorflow-liteをインストールしてlibcamera/libcamera-appsをインストール

1. tensorflow liteをビルドインストールする

下記の該当OS(bullseye)のビルドインストール手順 Install TensorFlow 2 Lite on Raspberry Pi 4 - Q-engineering

2. libcamera/libcamera-appsをビルド・インストールする

ソースからビルド/インストールする前にaptコマンドで入れたlibcamera/libcamera-appとかは削除しておきましょう。相当ハマった。

DENABLE_TFLITE等使いたいものは有効にする libcameraは普通に入れても良かったけどlibcamera-appsとの関係がうまくいってないことがあったのでソースから入れた。うまく動かなかったらIssueを見る。

Raspberry Pi Documentation - Camera

3. いろいろ遊ぶ

Raspberry Pi Documentation - Camera

libcamera-hello --post-process-file object_detect_tf.json --lores-width 400 --lores-height 300

@raspberrypi:~/postprocess-tf $ libcamera-jpeg --post-process-file object_detect_tf.json --lores-width 400 --lores-height 300 -o test.jpg
Preview window unavailable
[26:12:07.198492412] [5299]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3777-69ae75b0
[26:12:07.238774844] [5300]  WARN RPI raspberrypi.cpp:1252 Mismatch between Unicam and CamHelper for embedded data usage!
[26:12:07.240241518] [5300]  INFO RPI raspberrypi.cpp:1368 Registered camera /base/soc/i2c0mux/i2c@1/imx219@10 to Unicam device /dev/media3 and ISP device /dev/media0
Reading post processing stage "object_detect_tf"
TfStage: Loaded model /home/heyanaohiro/postprocess-tf/detect.tflite
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
Read 90 labels
Reading post processing stage "object_detect_draw_cv"
[26:12:07.414347455] [5299]  INFO Camera camera.cpp:1029 configuring streams: (0) 1640x1232-YUV420 (1) 400x300-YUV420
[26:12:07.415355794] [5300]  INFO RPI raspberrypi.cpp:759 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 1640x1232-SBGGR10_1X10 - Selected unicam format: 1640x1232-pBAA
TfStage: Low resolution stream is 400x300
TfStage: Main stream is 1640x1232
cell phone[76] (0.5) @ 209,20 1230x1219
TfStage: Inference time: 411081 ms
TfStage: Inference time: 276767 ms
TfStage: Inference time: 276667 ms
cell phone[76

写したのはパソコン用モニター、 まあcellphoneに見えるといえば見えるからヨシッ

苦労ポイント: tensorflow-liteのインストール方法がよくわかんなくていろいろ探した。 ビルドに時間かかったのでクロスコンパイル?ができたらいいんだけどね、調べるより寝る合間にビルド走らせてればOKという解決になってしまった。