Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

OpenCVのCPU Tick数を使ってFPSを計算するクラス

前回までの流れは以下のページにまとめています:


今まではフレームが1秒間に何枚来るかをチマチマと数えてFPSを計算していました。

しかしOpenCVには処理時間を計るための関数があります。CPUのTick数を使う関数です。

そこで、その関数を使ってFPSを計算するクラスを書いてみました。

# my_lib.py
import cv2

class fpsWithTick(object):
    def __init__(self):
        self._count     = 0
        self._oldCount  = 0
        self._freq      = 1000 / cv2.getTickFrequency()
        self._startTime = cv2.getTickCount()
    def get(self):
        nowTime         = cv2.getTickCount()
        diffTime        = (nowTime - self._startTime) * self._freq
        self._startTime = nowTime
        fps             = (self._count - self._oldCount) / (diffTime / 1000.0)
        self._oldCount  = self._count
        self._count     += 1
        fpsRounded      = round(fps, 1)
        return fpsRounded

こんな感じで使います:

import cv2
import my_lib

cap = cv2.VideoCapture(0)
fpsWithTick = my_lib.fpsWithTick()  # 初期化

while True:

    ret, src = cap.read()
    cv2.imshow('frame',src)
    fps = fpsWithTick.get()  # FPSを計算する
    print(fps)
    k = cv2.waitKey(30) & 0xff

    if k == 27:  # ESC key
        break
cap.release()
cv2.destroyAllWindows()

なお、

Taro Yamada - Google+

さんの以下の記事を参考にさせて頂きました。

OpenCV 備忘録: OpenCVで、fpsのレートを画面に表示させた

ご参考になれば幸いです。