繁体   English   中英

循环存储和保存坐标数据的最快方法

[英]Fastest way to store and save coordinate data in a loop

我得到视频中每一帧的面部标志。 477个路标,每个路标都是一个(3,)向量。

我有一个 30 fps 的 10 分钟视频。 这意味着我有18000个形状为(477,3)的 arrays 。 我想将所有这些信息存储在 pandas dataframe 中,其中每一行是一个框架并且有 477 列,每个 (3,) 数组一个。

目前,我正在这样做:

frame_lms = []
for frame in video:
    landmark_dict = {}
    lm_count = 0
    for landmark in frame:
        x = landmark.x
        y = landmark.y
        xy = np.array([x,y])
        landmark_dict[f"lm_{count}"] = xy
        lm_count+=1
    frame_lms.append(landmark_dict)
df = pd.DataFrame.from_dict(frame_lms)
df.to_csv('save.csv')

我想到将所有内容存储在字典列表中,append 到列表中,然后从研究中保存,表明from_dict是创建 pandas df 的最快方法。 但是,这个过程仍然很慢,因为我必须将frame_lms保存在 state 中,因为我将 append (477,3) arrays 放入其中。

解决此类问题的计算效率最高的方法是什么?

最好避免在循环中创建这么多对象。 您可以使用以下方法获得相同的结果(省略标题):

import numpy as np

# load video here

storage = np.empty((len(video), 477, 2))

for frame, s_line in zip(video, storage):
    for landmark, l_buf in zip(frame, s_line):
        l_buf[0] = landmark.x
        l_buf[1] = landmark.y

现在存储拥有您需要的所有数据。 请注意,代码可以改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM