@@ -31,24 +31,36 @@ def distance_from_exif(exif1, exif2):
3131 return 0
3232
3333
34- def match_candidates_from_gps (images , exifs , data ):
35- '''Compute candidate matching pairs based on GPS position
34+ def timediff_from_exif (exif1 , exif2 ):
35+ return np .fabs (exif1 ['capture_time' ] - exif2 ['capture_time' ])
36+
37+
38+ def match_candidates_from_metadata (images , exifs , data ):
39+ '''Compute candidate matching pairs based on GPS and capture time
3640 '''
37- max_distance = data .config .get ('matching_gps_distance' , 9999999 )
38- max_neighbors = data .config .get ('matching_gps_neighbors' , 0 )
41+ max_distance = data .config ['matching_gps_distance' ]
42+ max_neighbors = data .config ['matching_gps_neighbors' ]
43+ max_time_neighbors = data .config ['matching_time_neighbors' ]
3944
4045 pairs = set ()
4146 for im1 in images :
4247 distances = []
48+ timediffs = []
4349 for im2 in images :
4450 if im1 != im2 :
45- d = distance_from_exif (exifs .get (im1 ), exifs .get (im2 ))
46- if d <= max_distance :
47- distances .append ((d , im2 ))
48- if max_neighbors :
49- distances .sort ()
51+ dx = distance_from_exif (exifs [im1 ], exifs [im2 ])
52+ dt = timediff_from_exif (exifs [im1 ], exifs [im2 ])
53+ if dx <= max_distance :
54+ distances .append ((dx , im2 ))
55+ timediffs .append ((dt , im2 ))
56+ distances .sort ()
57+ timediffs .sort ()
58+
59+ if max_neighbors or max_time_neighbors :
5060 distances = distances [:max_neighbors ]
51- for d , im2 in distances :
61+ timediffs = timediffs [:max_time_neighbors ]
62+
63+ for d , im2 in distances + timediffs :
5264 if im1 < im2 :
5365 pairs .add ((im1 , im2 ))
5466 else :
@@ -146,7 +158,7 @@ if __name__ == "__main__":
146158 f_pre [image ] = f_pre [image ][:preemptive_max ,:]
147159
148160 exifs = { im : data .load_exif (im ) for im in images }
149- pairs = match_candidates_from_gps (images , exifs , data )
161+ pairs = match_candidates_from_metadata (images , exifs , data )
150162
151163 num_pairs = 0
152164 for im , c in pairs .items ():
0 commit comments