前提・実現したいこと
動画再生が始まった段階で次の処理に移行したいです。
発生している問題・エラーメッセージ
for文を回し始めた段階で動画も再生したいのですが並列で処理する方法がわかりません。
threadingなどを使用した場合、並列で2つの命令を処理できるのでしょうか?
該当のソースコード
Python
1import cv2 2import numpy as np 3 4path = "1.mp4" 5b = 1 6doga_path = path 7cap = cv2.VideoCapture(doga_path) 8assert cap.isOpened(), 'Failed to open video file.' 9cv2.namedWindow('Frame', cv2.WINDOW_NORMAL) 10cv2.setWindowProperty('Frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) 11 12ret, frame = cap.read() 13for b in range(20): 14 print("123123123") 15while ret: 16 17 cv2.imshow('Frame', frame) 18 if cv2.waitKey(1) & 0xFF == ord('q'): 19 break 20 21 ret, frame = cap.read() 22else: 23 print("---動画終了---") 24cap.release() 25cv2.destroyAllWindows()
試したこと
asyncioを使用して処理できるかもということで試しましたが並列にできなかったです。
1つ目の処理の終了してから2つ目の処理の実行になりました。
補足情報(FW/ツールのバージョンなど)
Python3.6
openCV3.4
回答をもらって変更したコード
Python
1import sys 2import time 3import csv 4import cv2 5import numpy as np 6from threading import Thread 7 8 9doga = "1.mp4" 10b = 1 11 12def func2(b): 13 for b in range(100000): 14 print("123123123") 15 print("END") 16 17def func1(doga): 18 doga_path = doga 19 cap = cv2.VideoCapture(doga_path) 20 assert cap.isOpened(), 'Failed to open video file.' 21 cv2.namedWindow('Frame', cv2.WINDOW_NORMAL) 22 cv2.setWindowProperty('Frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) 23 24 ret, frame = cap.read() 25 while ret: 26 27 cv2.imshow('Frame', frame) 28 if cv2.waitKey(1) & 0xFF == ord('q'): 29 break 30 31 ret, frame = cap.read() 32 else: 33 print("---動画終了---") 34 cap.release() 35 cv2.destroyAllWindows() 36 37if __name__ == '__main__': 38 39 p2 = Thread(target = func2(b)) 40 p1 = Thread(target = func1(doga)) 41 p2.start() 42 #event.set() 43 p1.start()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/01 09:55
2020/12/01 10:21 編集
2020/12/02 05:27 編集
2020/12/03 07:02