昨日付で、Picamera2ライブラリのv0.3.9(beta release 8)がリリースされました。
今回のリリースは色々追加や修正はありつつ、個人的に目が行ったのはハードウェアMJPEGエンコード対応でした。12月にPicamera2でMJPEG配信を試したときに、Picamera2のMJPEG配信はPicamera1と比べてCPU負荷が結構重めでしたが、やはりソフトウェアエンコードだったようです。
今回は上のブログとは環境が変わってPi4ですが、同一のPi4上でソフトウェアエンコード(前回のスクリプト)とハードウェアエンコードをそれぞれ動かしてみて、違いをパラッと見てみました。
アップデート
前回テストした環境を流用したため、アップデートを適宜実行しました。
$ sudo apt update ; sudo apt upgrade -y $ sudo pip3 install -U picamera2 v4l2-python3
バージョンの確認
$ sudo pip3 list (抜粋) picamera2 0.3.9 v4l2-python3 0.3.2
ソフトウェアエンコード
まずはソフトウェアエンコード。アイドル中のスクリーンショットですが、CPU負荷は各コア30%くらい、プロセスのCPU使用率もも100%を使うようなものが見られたりして、前回Pi3Bで取得したのと似たような負荷になっています。ストリーミングを開始しても負荷は変わらないため、接続の有無に関わらず出しっぱなしになっているような気がします。
CPU温度は71度くらいと結構アツアツでした(※ヒートシンクなし)。
ハードウェアエンコード
そしてハードウェアエンコード。こちらもアイドル中のスクリーンショットです。各コアの負荷が1ケタ%台になり、プロセスのCPU使用率は30%などとだいぶマシな雰囲気になりました。
ストリーミング1接続中も特に大きくは変わりませんでした。これはソフトウェアエンコードと同様に出しっぱなしになっているものと思われます。
CPU温度も57度くらいに落ち着いたので、効果はバツグンです。
使い物になるようにはなったけど…?
ハードウェアエンコードに変わって、CPU負荷と温度はだいぶマシになりました。これならPi3Bのメダカメラ環境で動かしても問題はなさそうです。実際に切り替えてみたところ、各コア10%前後、プロセスは40%など、63.4度と、Pi4Bよりちょっと負荷が高めという、想像通りの状態になりました。
ただ、初代Picameraがもっと低負荷で動く(冒頭の前回の記事参照)ので、もっとそれに近づいて欲しいし、あわよくば同等になって欲しいので、さらなる改良に期待したいところです。もうちょっと様子を見てもいいかなあ?