如何从视频中提取特征并将特征存储到单独的 H5 文件中

问题描述

我现在有多个视频 我想使用 python 从视频中提取特征 现在我想将提取的特征保存到 H5 文件

条件: 提取的特征保存在唯一的 h5 文件中,而不是所有视频的同一文件

我尝试过的: 我试图提取功能并将其存储在同一个 h5 文件中,但我希望所有视频都有单独的 H5 文件

class Generate_Dataset:
def __init__(self,video_path,save_path):
    self.resnet = resnet()
    self.dataset = {}
    self.video_list = []
    self.video_path = ''
    self.h5_file = h5py.File(save_path,'w')

    self._set_video_list(video_path)

def _set_video_list(self,video_path):
    # import pdb;pdb.set_trace()
    if os.path.isdir(video_path):
        self.video_path = video_path
        fileExt = r".mp4",".avi"
        self.video_list = [_ for _ in os.listdir(video_path) if _.endswith(fileExt)]
        self.video_list.sort()
    else:
        self.video_path = ''
        
        self.video_list.append(video_path)

    for idx,file_name in enumerate(self.video_list):
        self.dataset['video_{}'.format(idx+1)] = {}
        self.h5_file.create_group('video_{}'.format(idx+1))


def _extract_feature(self,frame):
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
    frame = cv2.resize(frame,(224,224))
    res_pool5 = self.resnet(frame)
    frame_feat = res_pool5.cpu().data.numpy().flatten()

    return frame_feat
# Todo : save dataset
def _save_dataset(self):
    pass

def generate_dataset(self):
    print('[INFO] CNN processing')
    for video_idx,video_filename in enumerate(self.video_list):
        video_path = video_filename
        if os.path.isdir(self.video_path):
            video_path = os.path.join(self.video_path,video_filename)
        video_basename = os.path.basename(video_path).split('.')[0]
        video_capture = cv2.VideoCapture(video_path)
        fps = video_capture.get(cv2.CAP_PROP_FPS)
        n_frames = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))
        frame_list = []
        picks = []
        video_feat = None
        video_feat_for_train = None
        for frame_idx in tqdm(range(n_frames-1)):
            success,frame = video_capture.read()
            if frame_idx % 15 == 0:

                if success:

                    frame_feat = self._extract_feature(frame)                    
                    picks.append(frame_idx)

                    if video_feat_for_train is None:
                        video_feat_for_train = frame_feat
                    else:
                        video_feat_for_train = np.vstack((video_feat_for_train,frame_feat))
                    if video_feat is None:
                        video_feat = frame_feat
                    else:
                        video_feat = np.vstack((video_feat,frame_feat))
                else:
                    break
        video_capture.release()
        self.h5_file['video_{}'.format(video_idx+1)]['features'] = list(video_feat_for_train)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)