0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

playbackCameraの環境構築について

Last updated at Posted at 2021-11-28

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

ということは、描画部分か

あらためて調査予定。
動画のバッファ部分で処理速度がガタ落ちしている?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?