リモートデスクトップでラズパイに接続してカメラの映像を見た時の「カクカク」をなんとかしたい!
ということで、今回はRaspberry Piのカメラモジュールを使用した際の、フレームレートと解像度の確認方法について書きたいと思います。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi 5は、Raspberry Pi財団が開発した最新のシングルボードコンピュータで、従来モデルよりも大幅な性能向上を実現しています。

搭載される64ビットクアッドコアプロセッサは、クロック速度が最大2.4GHzに達し、前世代よりも処理速度が格段に向上しました。また、4GBまたは8GBのRAMを選択できるため、教育用途からリソースを必要とするプロジェクトまで幅広く対応可能です。
グラフィックス性能も強化され、4K解像度でのデュアルディスプレイ出力をサポートしています。さらに、新たにPCIeインターフェイスが追加され、外部ストレージや高速デバイスとの接続が容易になりました。Wi-Fi 6やBluetooth 5.2の導入により、無線通信も高速かつ安定。
教育、IoT、AI開発、メディア再生など、多様な用途に対応するRaspberry Pi 5は、初心者から上級者まで幅広いユーザーにとって魅力的な選択肢となっています。
Raspberry Piでできることについては以下の記事で解説していますので、あわせてご覧ください。



Raspberry Pi カメラモジュールの映像がカクカクする
先日、Raspberry Piからカメラモジュールを通して動画を表示する方法を記事にしました。

無事にRaspberry Piのデスクトップ上に撮った映像を表示することができました。
しかし、映像がカクカクしていて、フレームレートが1桁しか出ていないように見えます。

考えられる問題点
Twitterのフォロワー様よりアドバイスを頂き、以下の問題点を挙げてみました。
・解像度が高すぎる
・リモートデスクトップの遅延
・GPUメモリの不足
3点を改善して高速化できないかと考えています。
とりあえず、今回は画像として取り込んだ際の解像度と、そもそもカメラモジュールの性能としてどれくらいのフレームレートが出ているのかを確認したいと思います。

解像度とフレームレートを確認するソースコード
OpenCVのライブラリを使用すると、解像度とフレームレートは簡単に確認ができるようです。
以下のようなソースコードを作成してみました。
import cv2
#VideoCaptureオブジェクト取得
cap = cv2.VideoCapture(-1)
#カメラの情報を取得
fps = int(cap.get(cv2.CAP_PROP_FPS)) # フレームレートを取得
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # X軸解像度を取得
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # Y軸解像度を取得
#情報を出力
print("FPS=", fps)
print("X Width = ", frame_width)
print("Y Width = ", frame_height)
#カメラデバイスクローズ
cap.release()
#ウィンドウクローズ
cv2.destroyAllWindows()
7行目:
カメラモジュールのフレームレートを取得します。
8行目:
画像のX軸方向のサイズを取得します。
9行目:
画像のY軸方向のサイズを取得します。

実行結果
先ほどのプログラムを実行した結果は以下の通りです。
FPS= 30
X Width = 640
Y Width = 480
フレームレートと解像度取得できました。
取得結果をみるとカメラ自体は30fps出ているので問題ありませんし、解像度も高すぎるというわけでもないようです。(さらに高速化したいのであれば、解像度を必要ギリギリまで下げるのも良いかと思います)
\ Pythonを自宅で好きな時に学べる! /
まとめ
この結果から、Raspberry Piのリモートデスクトップの通信遅延か、もしくはデスクトップ自体が重い可能性が高いのではと思われます。
次回はGPUに割り当てられるメモリ容量を大きくしてテストしてみたいと思います。
また、ラズベリーパイの画像認識について学びたい方にはUdemyの以下の講座がおすすめです。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。


参考

コメント