首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时差算法分组时差

时差算法分组时差
EN

Stack Overflow用户
提问于 2019-02-06 17:47:51
回答 1查看 37关注 0票数 0

我试着写一个程序,让蒂莫西丝的照片从他们的时间戳组合在一起。时间流逝照片和随机照片在一个文件夹中。

例如,如果上一张照片与当前照片之间的时间戳秒差为: 346、850、13、14、13、14、15、12、12、13、16、11、438。

你可以合理地猜测时间从13开始到11结束。

现在,我正在尝试一种比较与前一种方案的百分比差异的方法。

,但是必须有一个公式/algo来根据时间差将时间戳组合在一起。滚动意味着什么。

我在考虑一个简单的解决方案吗?谢谢!

def cat_algo(文件夹):

代码语言:javascript
复制
# Get a list with all the CR2 files in the folder we are processing
file_list = folder_to_file_list(folder)

# Extract the timestamp out of the CR2 file into a sorted dictionary
cr2_timestamp = collections.OrderedDict()
for file in file_list:
    cr2_timestamp[file] = return_date_from_raw(file)
    print str(file) + " - METADATA TIMESTAMP: " + \
        str(return_date_from_raw(file))

# Loop over the dictionary to compare the timestamps and create a new dictionary with a suspected group number per shot
# Make sure we know that there is no first file yet using this (can be refractored)
item_count = 1
group_count = 0
cr2_category = collections.OrderedDict()
# get item and the next item out of the sorted dictionary
for item, nextitem in zip(cr2_timestamp.items(), cr2_timestamp.items()[1::]):

    # if not the first CR2 file
    if item_count >= 2:
        current_date_stamp = item[1]
        next_date_stamp = nextitem[1]

        delta_previous = current_date_stamp - previous_date_stamp
        delta_next = next_date_stamp - current_date_stamp

        try:
            difference_score = int(delta_next.total_seconds() /
                                   delta_previous.total_seconds() * 100)
            print "diffscore: " + str(difference_score)
        except ZeroDivisionError:
            print "zde"

        if delta_previous > datetime.timedelta(minutes=5):
            # if difference_score < 20:
            print item[0] + " - hit - " + str(delta_previous)
            group_count += 1
            cr2_category[item[0]] = group_count
        else:
            cr2_category[item[0]] = group_count

            # create a algo to come up with percentage difference and use this to label timelapses.
        print int(delta_previous.total_seconds())
        print int(delta_next.total_seconds())

        # Calculations done, make the current date stamp the previous datestamp for the next iteration
        previous_date_stamp = current_date_stamp

        # If time difference with previous over X make a dict with name:number, in the end everything which has the
        # same number 5+ times in a row can be assumed as a timelapse.

    else:
        # If it is the first date stamp, assign it the current one to be used in the next loop
        previous_date_stamp = item[1]

    # To help make sure this is not the first image in the sequence.
    item_count += 1

print cr2_category
EN

回答 1

Stack Overflow用户

发布于 2019-02-06 19:47:03

如果使用itertools.groupby,使用返回True的函数,如果延迟符合时间流逝照片区域的条件,则可以根据延迟列表获得每个此类区域的索引。基本上,我们对该函数的真/假输出进行分组。

代码语言:javascript
复制
from itertools import groupby

# time differences given in original post
data = [346, 850, 13, 14, 13, 14, 15, 12, 12, 13, 16, 11, 438]

MAX_DELAY = 25 # timelapse regions will have a delay no larger than this
MIN_LENGTH = 3 # timelapse regions will have at least this many photos

index = 0
for timelapse, g in groupby(data, lambda x: x <= MAX_DELAY):
    length = len(list(g))
    if (timelapse and length > MIN_LENGTH):
        print ('timelapse index {}, length {}'.format(index, length))
    index += length

产出:

时间流逝指数2,长度10

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54559663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档