|
|
@@ -34,11 +34,12 @@ from service.ai.video.video_score.tennisthrow import cal_tennisthrow
|
|
|
from service.ai.video.video_score.turnaround import cal_turnaround
|
|
|
|
|
|
|
|
|
-def run_openpose_for_npy_and_video(video_uuid):
|
|
|
+def run_openpose_for_npy_and_video(video_uuid, callback: Callable):
|
|
|
video_path = UPLOAD_DIR + video_uuid + ".mp4"
|
|
|
|
|
|
cap = cv2.VideoCapture(video_path)
|
|
|
- FPS = cap.get(5) # 5 means fps
|
|
|
+ FPS = cap.get(cv2.CAP_PROP_FPS)
|
|
|
+ total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
|
|
|
out = None
|
|
|
logging.debug("Splitting video %s, FPS: %s" % (video_path, FPS))
|
|
|
|
|
|
@@ -67,6 +68,7 @@ def run_openpose_for_npy_and_video(video_uuid):
|
|
|
out.write(canvas)
|
|
|
|
|
|
c += 1
|
|
|
+ callback("RUNNING", progress=min(99,int(100*c/(total_frames/sampling_fps))))
|
|
|
else:
|
|
|
break
|
|
|
|
|
|
@@ -86,12 +88,12 @@ class BaseVideoAnalyzer:
|
|
|
|
|
|
def analyze(self, callback: Callable):
|
|
|
try:
|
|
|
- callback("RUNNING")
|
|
|
+ callback("RUNNING", progress=0)
|
|
|
|
|
|
PICKLE_DUMP_PATH = UPLOAD_DIR + self.video_uuid + ".dump"
|
|
|
|
|
|
if not os.path.exists(PICKLE_DUMP_PATH): # analyze
|
|
|
- self.results = run_openpose_for_npy_and_video(self.video_uuid)
|
|
|
+ self.results = run_openpose_for_npy_and_video(self.video_uuid, callback)
|
|
|
pickle.dump(self.results, open(PICKLE_DUMP_PATH, "wb"))
|
|
|
else: # read cache
|
|
|
self.results = pickle.load(open(PICKLE_DUMP_PATH, "rb"))
|