playbackCameraとは
スマートフォンなどで撮影したスポーツのフォームチェック動画を
撮影から数秒後に描画するアプリケーション。
RTSP、WEBカメラなどに対応しており、最大4台接続可能。
環境構築
raspberry piでの環境構築方法
以下の通り行う。
sudo apt update
sudo apt upgrade
sudo pip install --upgrade pip
sudo apt install libavutil56 libcairo-gobject2 libgtk-3-0 libqtgui4 libpango-1.0-0 libqtcore4 libavcodec58 libcairo2 libswscale5 libtiff5 libqt4-test libatk1.0-0 libavformat58 libgdk-pixbuf2.0-0 libilmbase23 libjasper1 libopenexr23 libpangocairo-1.0-0 libwebp6
sudo apt-get install libatlas-base-dev
pip3 uninstall numpy # remove previously installed version
sudo apt install python3-numpy
sudo pip3 install opencv-python screeninfo fpstimer
git clone https://github.com/darts-cloud/playbackCamera.git
速度が遅い
ここで困った事象に直面した。
raspberry pi4の実施速度がとても遅い。
いわゆるシリコンmacでは40fpsほど出ていたが、
raspberry piでは5fps…。
ここまで遅いとは!
遅い原因を調査することにした。
とりあえず、OpenCvからの動画取り込み部分を調査。
import cv2
import time
from CountFps import *
"""
映像リソースより最新のフレームを読み込むためのクラス
FPSが異なる複数リソースにアクセスする場合、
常に最新のフレームを取得することができる。
"""
class VideoCapture:
def __init__(self, src):
self.src = src
print("Connect:" + src)
self.video = cv2.VideoCapture(src)
if not self.video.isOpened():
print("Connect Error.")
return
print("Connected.")
self.stopped = False
self.fpsCount = CountFps()
def update(self):
while True:
try:
if self.stopped:
time.sleep(1000)
continue
ret, img = self.video.read()
self.fpsCount.CountFrame()
if not ret:
self.stop()
print(self.src + ":stop")
continue
times = time.time()
fps = self.fpsCount.CountFps()
print(fps)
except Exception:
pass
def release(self):
self.stopped = True
self.video.release()
def isOpened(self):
return self.video.isOpened()
def main():
cam = VideoCapture("rtsp://192.168.1.144:8554/unicast")
cam.update()
if __name__ == "__main__":
main()
結果、20fpsほどは出ている。
確かにこの部分も想定の速度が出ていないが、ここが原因ではない。
raspberry pi4にカメラを直接接続し、動画を取得した場合は30fps出る。
raspberry pi4にカメラを直接接続し、動画を取得。
方法 | 解像度 | コーデック | fps |
---|---|---|---|
raspi camera v2.1 module | 30fps | ||
rtsp(atom camera) | 1920x1080 | H.264 | 20fps |
rtsp(LiveReporter) | 1920x1080 | H.264 | 30fps |
rtsp(LiveReporter) | 640x480 | H.264 | 30fps |
※atomcamの20fpsは仕様
playbackCameraでfpsを測定
方法 | 解像度 | コーデック | fps |
---|---|---|---|
rtsp(atom camera) | 1920x1080 | 5fps | |
rtsp(LiveReporter) | 1920x1080 | H.264 | 5fps |
rtsp(LiveReporter) | 640x480 | H.264 | 8fps |
ということは、描画部分か
あらためて調査予定。
動画のバッファ部分で処理速度がガタ落ちしている?