前提・実現したいこと
Pythonでテニスの動画解析ツールをつくっています。
↓の画面のように、GUIでスライダーがあり、スライダーを移動することで動画のフレームが移動し、そのフレームの画像が表示されるというものになっています。
フレーム数が長い動画を扱う場合、メモリが足りなくなるので、動画を細かく分けて扱っています。
できれば1つの動画として扱えるようにしたく、うまいやり方がないか模索中で、ご意見をいただきたいです。
同じ動画を扱うにしても、
フリーソフトのAviutlなどはこういった操作もサクサク動くので、ああいう感じでやりたいなあと思っています。
困っていること
①前処理として動画の画像情報をフレーム毎に配列に格納する処理をしています。
②動画解析時にスライダーを移動させると、スライダーの数字に合わせて配列を読みにいってその画像を表示する
ということをやっています。
↓は①のソースコードで、リサイズしてからimageArrayという配列に格納してます。
フレーム数が大きいとメモリが足りなくなるので、start=88000、end=98000と範囲を絞っております。
①のソースコード
python
1# 動画ファイル(avi mp4)を読み込んで、各フレームをArrayファイルに格納する 2import cv2 3import sys 4import numpy as np 5 6w, h = 360, 640 7 8start = 88000 9end = 98000 10 11imageArray = [] 12fileName = 'test.avi' 13video = cv2.VideoCapture(fileName) 14if not video.isOpened(): 15 print("Could not open video") 16 sys.exit() 17ok, frame = video.read() 18if not ok: 19 print('Cannot read video file') 20 sys.exit() 21 22for i in range(0, end): 23 ok, frame = video.read() 24 if(start <= i): 25 if(ok): 26 img_resize = cv2.resize(frame, (h, w)) 27 imageArray.append(img_resize) 28 29video.release() 30cv2.destroyAllWindows()
試したこと
動画を連番で画像ファイル(jpeg)などで全て保存してから、フレーム毎に画像ファイルを読み込みにいく、というやり方を試してみました。
しかし、画像ファイルを新たにつくることになるので容量が余計に増える、すべて保存するまでに時間を要する、などの課題がありまして、もっとよいやり方がないかなと思っております。
どうか宜しくお願いします。
補足情報(FW/ツールのバージョンなど)
参考ですが、Qiitaにこの動画解析ツールの記事を投稿してます。
Pythonでテニスの動画解析ツールを自作してみた

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/10 15:37 編集