こんにちは。のっくんです。
今日は画像処理でよく使われる、FPS(Frame Per Second)について勉強したいと思います。
以下のサイトにちょうど良い内容が書かれていますので、ベースにしたいと思います。
How to find frame rate or frames per second (fps) in OpenCV ( Python / C++ ) ?
FPSはその名の通り、1秒間で取得できるフレーム数のことです。
この値が大きければ大きいほど、動画がサクサク動くってことです。
動画ファイルの場合はFPSを取得することができますが、webカメラやラズパイのカメラで撮影する場合は実際に測ってみないと分かりません。
この記事では、Pythonのコードを書いてFPSの計測をしてみようと思います。
計測してみた環境は以下の通り。
- Python 3.5
- OpenCV 3.4
FPSを求める方法ですが、FPSの定義通りに、
FPS=フレーム数/フレームを取得するのにかかった時間(秒)
で求めます。
フレームを取得するのにかかった時間は、
フレームを取得するのにかかった時間 = フレームを取得し終わった時間ーフレームを取得する前の時間
で求めます。
import cv2 import time # カメラを起動する video = cv2.VideoCapture(0) fps = video.get(cv2.CAP_PROP_FPS) print("FPSの設定値、video.get(cv2.CAP_PROP_FPS) : {0}".format(fps)) # 取得するフレームの数 num_frames = 120 print("取得中 {0} frames".format(num_frames)) # 開始時間 start = time.time() # フレームを取得する for i in range(0, num_frames): ret, frame = video.read() # 終了時間 end = time.time() # Time elapsed seconds = end - start print("経過時間: {0} seconds".format(seconds)) # Calculate frames per second fps = num_frames / seconds print("計算したFPS : {0}".format(fps)) # Release video video.release()
実行結果は以下の通り。
(cv) pi@raspberrypi:~/tmp $ python count_fps.py FPSの設定値、video.get(cv2.CAP_PROP_FPS) : 30.0 取得中 120 frames 経過時間: 4.413674831390381 seconds 計算したFPS : 27.188228536128477
設定値が30FPSなのに対して、計測値は27FPSと少し下回っています。
通信速度と同じで、実測値は下がるみたいです。
おわり。