|
|
@@ -1,4 +1,3 @@
|
|
|
-import copy
|
|
|
import glob
|
|
|
import logging
|
|
|
import os
|
|
|
@@ -16,138 +15,138 @@ from config import UPLOAD_DIR
|
|
|
from service.video.BaseVideoAnalyzer import BaseVideoAnalyzer
|
|
|
|
|
|
|
|
|
-def get_resolution(filename):
|
|
|
- command = ['ffprobe', '-v', 'error', '-select_streams', 'v:0',
|
|
|
- '-show_entries', 'stream=width,height', '-of', 'csv=p=0', filename]
|
|
|
- pipe = sp.Popen(command, stdout=sp.PIPE, bufsize=-1)
|
|
|
- for line in pipe.stdout:
|
|
|
- w, h = line.decode().strip().split(',')
|
|
|
- return int(w), int(h)
|
|
|
-
|
|
|
-
|
|
|
-def read_video(filename):
|
|
|
- w, h = get_resolution(filename)
|
|
|
-
|
|
|
- command = ['ffmpeg',
|
|
|
- '-i', filename,
|
|
|
- '-f', 'image2pipe',
|
|
|
- '-pix_fmt', 'bgr24',
|
|
|
- '-vsync', '0',
|
|
|
- '-vcodec', 'rawvideo', '-']
|
|
|
-
|
|
|
- pipe = sp.Popen(command, stdout=sp.PIPE, bufsize=-1)
|
|
|
- while True:
|
|
|
- data = pipe.stdout.read(w * h * 3)
|
|
|
- if not data:
|
|
|
- break
|
|
|
- yield np.frombuffer(data, dtype='uint8').reshape((h, w, 3))
|
|
|
-
|
|
|
-
|
|
|
-def run_3d(file_name):
|
|
|
- cfg = get_cfg()
|
|
|
- cfg_path = 'COCO-Keypoints/keypoint_rcnn_R_101_FPN_3x.yaml'
|
|
|
- cfg.merge_from_file(model_zoo.get_config_file(cfg_path))
|
|
|
- cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.7
|
|
|
- cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(cfg_path)
|
|
|
- predictor = DefaultPredictor(cfg)
|
|
|
- input_folder = file_name
|
|
|
- output_folder = file_name.replace(os.path.basename(file_name), "")
|
|
|
-
|
|
|
- if os.path.isdir(input_folder):
|
|
|
- im_list = glob.iglob(input_folder + '/*.mp4')
|
|
|
- else:
|
|
|
- im_list = [input_folder]
|
|
|
-
|
|
|
- for video_name in im_list:
|
|
|
- out_name = os.path.join(
|
|
|
- output_folder, os.path.basename(video_name)
|
|
|
- )
|
|
|
- print('Processing {}'.format(video_name))
|
|
|
-
|
|
|
- boxes = []
|
|
|
- segments = []
|
|
|
- keypoints = []
|
|
|
-
|
|
|
- for frame_i, im in enumerate(read_video(video_name)):
|
|
|
- t = time.time()
|
|
|
- outputs = predictor(im)['instances'].to('cpu')
|
|
|
-
|
|
|
- print('Frame {} processed in {:.3f}s'.format(frame_i, time.time() - t))
|
|
|
-
|
|
|
- has_bbox = False
|
|
|
- if outputs.has('pred_boxes'):
|
|
|
- bbox_tensor = outputs.pred_boxes.tensor.numpy()
|
|
|
- if len(bbox_tensor) > 0:
|
|
|
- has_bbox = True
|
|
|
- scores = outputs.scores.numpy()[:, None]
|
|
|
- bbox_tensor = np.concatenate((bbox_tensor, scores), axis=1)
|
|
|
- if has_bbox:
|
|
|
- kps = outputs.pred_keypoints.numpy()
|
|
|
- kps_xy = kps[:, :, :2]
|
|
|
- kps_prob = kps[:, :, 2:3]
|
|
|
- kps_logit = np.zeros_like(kps_prob) # Dummy
|
|
|
- kps = np.concatenate((kps_xy, kps_logit, kps_prob), axis=2)
|
|
|
- kps = kps.transpose(0, 2, 1)
|
|
|
- else:
|
|
|
- kps = []
|
|
|
- bbox_tensor = []
|
|
|
-
|
|
|
- # Mimic Detectron1 format
|
|
|
- cls_boxes = [[], bbox_tensor]
|
|
|
- cls_keyps = [[], kps]
|
|
|
-
|
|
|
- boxes.append(cls_boxes)
|
|
|
- segments.append(None)
|
|
|
- keypoints.append(cls_keyps)
|
|
|
-
|
|
|
- # Video resolution
|
|
|
- metadata = {
|
|
|
- 'w': im.shape[1],
|
|
|
- 'h': im.shape[0],
|
|
|
- }
|
|
|
-
|
|
|
- np.savez_compressed(out_name, boxes=boxes, segments=segments, keypoints=keypoints, metadata=metadata)
|
|
|
-
|
|
|
-
|
|
|
-def do_analysis(a_path, video_uuid, mode):
|
|
|
- # tur = os.path.split(path)
|
|
|
- try:
|
|
|
- os.mkdir(UPLOAD_DIR + "./frames/" + video_uuid)
|
|
|
- except:
|
|
|
- pass
|
|
|
-
|
|
|
- # source_npy_side = a_path
|
|
|
-
|
|
|
- # output = open("./cap_file/" + name + "/file2" + ".txt", "w")
|
|
|
- # output.close()
|
|
|
-
|
|
|
- result = {}
|
|
|
- p = './capture_image/' + name + "/"
|
|
|
- lenF = int(len(glob.glob(p + '*.png')) / 2)
|
|
|
- # 对每一张图片的body_25点数据进行分析
|
|
|
- for i in range(1, lenF): # run_openpose_for_normal(i)
|
|
|
- if (mode == "jump"):
|
|
|
- result_side = analyse_npy_side_jump(name, i, source_npy_side.format(i))
|
|
|
- elif (mode == "pingban"):
|
|
|
- result_side = analyse_npy_side_pingban(name, i, source_npy_side.format(i))
|
|
|
- elif (mode == "juanfu"):
|
|
|
- result_side = analyse_npy_side_juanfu(name, i, source_npy_side.format(i))
|
|
|
- elif (mode == "gaotaitui"):
|
|
|
- result_side = analyse_npy_side_gaotaitui(name, i, source_npy_side.format(i))
|
|
|
- elif (mode == "shendun"):
|
|
|
- result_side = analyse_npy_side_shendun(name, i, source_npy_side.format(i))
|
|
|
-
|
|
|
- if (result_side != False):
|
|
|
- result[i] = result_side
|
|
|
- # print(result[i])
|
|
|
-
|
|
|
- output = open("./cap_file/" + name + "/file1.txt", "w")
|
|
|
- for re in result:
|
|
|
- print(re, file=output)
|
|
|
- for (name, value) in result[re].items():
|
|
|
- print(name, value, sep=',', file=output)
|
|
|
- print("kv-over", file=output)
|
|
|
- output.close()
|
|
|
+# def get_resolution(filename):
|
|
|
+# command = ['ffprobe', '-v', 'error', '-select_streams', 'v:0',
|
|
|
+# '-show_entries', 'stream=width,height', '-of', 'csv=p=0', filename]
|
|
|
+# pipe = sp.Popen(command, stdout=sp.PIPE, bufsize=-1)
|
|
|
+# for line in pipe.stdout:
|
|
|
+# w, h = line.decode().strip().split(',')
|
|
|
+# return int(w), int(h)
|
|
|
+
|
|
|
+
|
|
|
+# def read_video(filename):
|
|
|
+# w, h = get_resolution(filename)
|
|
|
+#
|
|
|
+# command = ['ffmpeg',
|
|
|
+# '-i', filename,
|
|
|
+# '-f', 'image2pipe',
|
|
|
+# '-pix_fmt', 'bgr24',
|
|
|
+# '-vsync', '0',
|
|
|
+# '-vcodec', 'rawvideo', '-']
|
|
|
+#
|
|
|
+# pipe = sp.Popen(command, stdout=sp.PIPE, bufsize=-1)
|
|
|
+# while True:
|
|
|
+# data = pipe.stdout.read(w * h * 3)
|
|
|
+# if not data:
|
|
|
+# break
|
|
|
+# yield np.frombuffer(data, dtype='uint8').reshape((h, w, 3))
|
|
|
+#
|
|
|
+#
|
|
|
+# def run_3d(file_name):
|
|
|
+# cfg = get_cfg()
|
|
|
+# cfg_path = 'COCO-Keypoints/keypoint_rcnn_R_101_FPN_3x.yaml'
|
|
|
+# cfg.merge_from_file(model_zoo.get_config_file(cfg_path))
|
|
|
+# cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.7
|
|
|
+# cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(cfg_path)
|
|
|
+# predictor = DefaultPredictor(cfg)
|
|
|
+# input_folder = file_name
|
|
|
+# output_folder = file_name.replace(os.path.basename(file_name), "")
|
|
|
+#
|
|
|
+# if os.path.isdir(input_folder):
|
|
|
+# im_list = glob.iglob(input_folder + '/*.mp4')
|
|
|
+# else:
|
|
|
+# im_list = [input_folder]
|
|
|
+#
|
|
|
+# for video_name in im_list:
|
|
|
+# out_name = os.path.join(
|
|
|
+# output_folder, os.path.basename(video_name)
|
|
|
+# )
|
|
|
+# print('Processing {}'.format(video_name))
|
|
|
+#
|
|
|
+# boxes = []
|
|
|
+# segments = []
|
|
|
+# keypoints = []
|
|
|
+#
|
|
|
+# for frame_i, im in enumerate(read_video(video_name)):
|
|
|
+# t = time.time()
|
|
|
+# outputs = predictor(im)['instances'].to('cpu')
|
|
|
+#
|
|
|
+# print('Frame {} processed in {:.3f}s'.format(frame_i, time.time() - t))
|
|
|
+#
|
|
|
+# has_bbox = False
|
|
|
+# if outputs.has('pred_boxes'):
|
|
|
+# bbox_tensor = outputs.pred_boxes.tensor.numpy()
|
|
|
+# if len(bbox_tensor) > 0:
|
|
|
+# has_bbox = True
|
|
|
+# scores = outputs.scores.numpy()[:, None]
|
|
|
+# bbox_tensor = np.concatenate((bbox_tensor, scores), axis=1)
|
|
|
+# if has_bbox:
|
|
|
+# kps = outputs.pred_keypoints.numpy()
|
|
|
+# kps_xy = kps[:, :, :2]
|
|
|
+# kps_prob = kps[:, :, 2:3]
|
|
|
+# kps_logit = np.zeros_like(kps_prob) # Dummy
|
|
|
+# kps = np.concatenate((kps_xy, kps_logit, kps_prob), axis=2)
|
|
|
+# kps = kps.transpose(0, 2, 1)
|
|
|
+# else:
|
|
|
+# kps = []
|
|
|
+# bbox_tensor = []
|
|
|
+#
|
|
|
+# # Mimic Detectron1 format
|
|
|
+# cls_boxes = [[], bbox_tensor]
|
|
|
+# cls_keyps = [[], kps]
|
|
|
+#
|
|
|
+# boxes.append(cls_boxes)
|
|
|
+# segments.append(None)
|
|
|
+# keypoints.append(cls_keyps)
|
|
|
+#
|
|
|
+# # Video resolution
|
|
|
+# metadata = {
|
|
|
+# 'w': im.shape[1],
|
|
|
+# 'h': im.shape[0],
|
|
|
+# }
|
|
|
+#
|
|
|
+# np.savez_compressed(out_name, boxes=boxes, segments=segments, keypoints=keypoints, metadata=metadata)
|
|
|
+#
|
|
|
+#
|
|
|
+# def do_analysis(a_path, video_uuid, mode):
|
|
|
+# # tur = os.path.split(path)
|
|
|
+# try:
|
|
|
+# os.mkdir(UPLOAD_DIR + "./frames/" + video_uuid)
|
|
|
+# except:
|
|
|
+# pass
|
|
|
+#
|
|
|
+# # source_npy_side = a_path
|
|
|
+#
|
|
|
+# # output = open("./cap_file/" + name + "/file2" + ".txt", "w")
|
|
|
+# # output.close()
|
|
|
+#
|
|
|
+# result = {}
|
|
|
+# p = './capture_image/' + name + "/"
|
|
|
+# lenF = int(len(glob.glob(p + '*.png')) / 2)
|
|
|
+# # 对每一张图片的body_25点数据进行分析
|
|
|
+# for i in range(1, lenF): # run_openpose_for_normal(i)
|
|
|
+# if (mode == "jump"):
|
|
|
+# result_side = analyse_npy_side_jump(name, i, source_npy_side.format(i))
|
|
|
+# elif (mode == "pingban"):
|
|
|
+# result_side = analyse_npy_side_pingban(name, i, source_npy_side.format(i))
|
|
|
+# elif (mode == "juanfu"):
|
|
|
+# result_side = analyse_npy_side_juanfu(name, i, source_npy_side.format(i))
|
|
|
+# elif (mode == "gaotaitui"):
|
|
|
+# result_side = analyse_npy_side_gaotaitui(name, i, source_npy_side.format(i))
|
|
|
+# elif (mode == "shendun"):
|
|
|
+# result_side = analyse_npy_side_shendun(name, i, source_npy_side.format(i))
|
|
|
+#
|
|
|
+# if (result_side != False):
|
|
|
+# result[i] = result_side
|
|
|
+# # print(result[i])
|
|
|
+#
|
|
|
+# output = open("./cap_file/" + name + "/file1.txt", "w")
|
|
|
+# for re in result:
|
|
|
+# print(re, file=output)
|
|
|
+# for (name, value) in result[re].items():
|
|
|
+# print(name, value, sep=',', file=output)
|
|
|
+# print("kv-over", file=output)
|
|
|
+# output.close()
|
|
|
|
|
|
|
|
|
def split_video(video_uuid):
|
|
|
@@ -180,8 +179,8 @@ def split_video(video_uuid):
|
|
|
cap.release()
|
|
|
|
|
|
|
|
|
-from src1.torch_openpose import torch_openpose
|
|
|
-from src1.util import draw_bodypose
|
|
|
+from service.aiutil import torch_openpose
|
|
|
+from service.aiutil.util import draw_bodypose
|
|
|
|
|
|
|
|
|
def run_openpose_for_frames(video_uuid):
|
|
|
@@ -205,8 +204,9 @@ class Video3DAnalyzer(BaseVideoAnalyzer):
|
|
|
super().__init__()
|
|
|
|
|
|
def analyze(self, filename):
|
|
|
+ pass
|
|
|
# setup_logger()
|
|
|
- return run_3d(filename)
|
|
|
+ # return run_3d(filename)
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|