###前提・実現したいこと
Python, OpenCVを用いてキャプチャした画像に対して画像処理を行い、
動画のFPSをなるべく落とさずに、動画をストリーミングさせながら、
処理の結果を受け取って、動画の中に表示させたい。
私自身、ベストプラクティスが不明なので、こういうやり方がありますということを教えてもらえると非常に助かります。
###発生している問題
動画の1フレームに対して、画像の処理をかけます。
この処理が数秒かかる処理で、何もしないとこの処理の部分で動画がかなりの時間フリーズします。
###イメージ
全体的なコードのイメージ(あんまり参考になりませんが)
python:
1#coding utf-8 2 3cap = cv2.VideoCapture(0) 4ret, frame = cap.read() 5 6while ret: 7 8 if condition: 9 フレームに対して重い処理 10 11cap.release() 12 13
現状、フレームに対して行なっている重い処理は、クラスインスタンスのメソッドになっています。
理想的には、whileがifの処理が走っている間も周りながら、フレームに対して行う処理も別スレッドもしくは別プロセスで行うような感じにしたいと思っています。処理が走っている間は、例えば、concurrent.futureとかなら、runningとかで制御できれば良いですね。
###試したこと
並行処理、並列処理などが該当するかと思ってmultiprocessing, concurrent, asyncioなど試して見たのですが、
多少処理が早くなる程度で、結局動画がフリーズしてしまう問題になります。
オーバーヘッドに時間がかかってしまっているのではないかという予測もしています。
###補足情報(言語/FW/ツール等のバージョンなど)
Python 3.5
Opencv 3.3.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/22 13:36
2018/01/22 13:50
2018/01/22 14:54
2018/01/22 15:11
2018/01/23 02:21
2018/01/23 03:36