按时间间隔将图像分组

时间:2018-07-12 11:28:04

标签: python image time

我有一个脚本,用于从图像中提取exif数据,并将其放入列表中,然后对列表进行排序,这就是我的列表列表,首先是它的图像时间(以秒为单位),第二个是放置其图像路径,其我的列表

  

[[32372,'F:\ rubish \ VOL1 \ cam \ G0013025.JPG'],[32373,'F:\ rubish \ VOL1 \ cam \ G0013026.JPG'],[32373,'F:\ rubish \ VOL1 \ cam \ G0013027.JPG'] .. etc等等等

使用@blhsing分组图像的脚本可以很好地工作,但是我想开始分组,而不是从第一个图像开始,按给定位置分组 那个脚本:

Function dirty() As Object()
    Dim s As String = "{""ABCFields"":{},""XYZFields"":{},""OPRFields"":{""MenuEntity"":[{""id"":""89899"",""title"":""MainMenu"",""link"":null,""test"":""test""},{""id"":""2323"",""title"":""MainMenu"",""link"":null,""test"":""test""}]}}"
    Dim js As New System.Web.Script.Serialization.JavaScriptSerializer()
    js.MaxJsonLength = Integer.MaxValue
    Dim o = js.DeserializeObject(s)
    Dim theThingYouWant() As Object = o("OPRFields")("MenuEntity")
    Return theThingYouWant
    For Each d As Dictionary(Of String, Object) In theThingYouWant 'for fun
        MsgBox(d("title"))
    Next
End Function

我所拥有的东西,不能很好地工作,仅拍摄一张图像,没有创建群组,有人可以帮助我进行修复吗?

groups = []
for r in img:
    if groups and r[0] - groups[-1][-1][0] <= 5:
        groups[-1].append(r)
    else:
        groups.append([r])
for g in groups:
    print(g[0][1], g[0][0], g[-1][0], g[-1][1])

在这里,我的min_list具有2个位置,这意味着我只想创建2个组,并且仅对从这2个位置开始的图像进行分类,间隔为5秒之前。

2 个答案:

答案 0 :(得分:0)

当然!前几天,我实际上只是编写了相同的算法,只是针对JavaScript。易于移植到Python ...

import pprint

def group_seq(data, predicate):
    groups = []
    current_group = None
    for datum in data:
        if current_group:
            if not predicate(current_group[-1], datum):  # Abandon the group
                current_group = None
        if not current_group:  # Need to start a new group
            current_group = []
            groups.append(current_group)
        current_group.append(datum)
    return groups


data = [
    [32372, r'F:\rubish\VOL1\cam\G0013025.JPG'],
    [32373, r'F:\rubish\VOL1\cam\G0013026.JPG'],
    [32373, r'F:\rubish\VOL1\cam\G0013027.JPG'],
    [32380, r'F:\rubish\VOL1\cam\G0064646.JPG'],
    [32381, r'F:\rubish\VOL1\cam\G0064646.JPG'],
]

groups = group_seq(
    data=data,
    predicate=lambda a, b: abs(a[0] - b[0]) > 5,
)

pprint.pprint(groups)

输出

[[[32372, 'F:\\rubish\\VOL1\\cam\\G0013025.JPG'],
  [32373, 'F:\\rubish\\VOL1\\cam\\G0013026.JPG'],
  [32373, 'F:\\rubish\\VOL1\\cam\\G0013027.JPG']],
 [[32380, 'F:\\rubish\\VOL1\\cam\\G0064646.JPG'],
  [32381, 'F:\\rubish\\VOL1\\cam\\G0064646.JPG']]]

基本上,predicate是一个函数,如果Trueb属于同一组,则应返回a;对于您的用例,我们查看元组/列表中第一项的(绝对)差异,即时间戳。

答案 1 :(得分:0)

由于您的<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function() { $('input').on('input', function() { var data = $('#inp1').val() + "\n" + $('#inp2').val(); $('a#downloadlink').show().attr('href', 'data:application/octet-stream;charset=utf-8,' + encodeURI(data)); }); }); </script> </head> <body> Username: <input type "text" id="inp1" /> <p id="res1"></p> Password: <input type "text" id="inp2" /> <p id="res2"></p> <a href="" id="downloadlink" style="display: none">Download</a> </body> </html>列表已经按时间进行了排序,因此,您可以遍历记录并将它们附加到输出列表的最后一个子列表(在我的示例代码中命名为img)。与最后一个条目的时差不超过5秒;否则,将记录放入输出列表的新子列表中。请记住,在Python中,下标groups表示列表中的最后一项。

-1