jpg exif information extraction
Extract images with location information from a large number of jpg images.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import shutil
import os
import exifread
import re
def latitude_and_longitude_convert_to_decimal_system(*arg):
try:
l_ending = float(arg[0]) + ((float(arg[1]) + (float(arg[2].split('/')[0]) / float(arg[2].split('/')[-1]) / 60)) / 60)
except ZeroDivisionError:
return -999999
return l_ending
def find_image_information(pic_path,txt_path='null'):
GPS = {}
date = ''
with open(pic_path, 'rb') as f:
try:
tags = exifread.process_file(f)
except KeyError:
return False
make = 'make: null'
model = 'modle: null'
camera = 'camera: null'
for tag, value in tags.items():
if re.match('Image Make', tag):
make = 'make: ' + str(value)
if re.match('Image Model', tag):
model = 'model: ' + str(value)
if re.match('EXIF LensModel', tag):
camera = 'camera: ' + str(value)
if re.match('GPS GPSLatitudeRef', tag):
GPS['GPSLatitudeRef'] = str(value)
elif re.match('GPS GPSLongitudeRef', tag):
GPS['GPSLongitudeRef'] = str(value)
elif re.match('GPS GPSAltitudeRef', tag):
GPS['GPSAltitudeRef'] = str(value)
elif re.match('GPS GPSLatitude', tag):
try:
match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
GPS['GPSLatitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
except:
deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
temp_1 = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
if temp_1 == -999999:
return False
GPS['GPSLatitude'] = temp_1
elif re.match('GPS GPSLongitude', tag):
try:
match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
GPS['GPSLongitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
except:
deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
GPS['GPSLongitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
elif re.match('GPS GPSAltitude', tag):
GPS['GPSAltitude'] = str(value)
elif re.match('.*Date.*', tag):
date = str(value)
if not GPS:
f_flag = 0
else:
if not GPS.__contains__('GPSLatitude'):
f_flag = 0
else:
print('time: ' + date)
print(make)
print(model)
print(camera)
f_flag = 1
lat, lng = GPS['GPSLatitude'], GPS['GPSLongitude']
print(pic_path)
print(str(lat) + ',' + str(lng))
print()
if txt_path != 'null':
write_information_to_txt('time: ' + date, txt_path)
write_information_to_txt(make, txt_path)
write_information_to_txt(model, txt_path)
write_information_to_txt(camera, txt_path)
write_information_to_txt(pic_path, txt_path)
write_information_to_txt(str(lat) + ',' + str(lng),txt_path)
write_information_to_txt('', txt_path)
if f_flag == 1:
return pic_path, str(lat) + ',' + str(lng)
else:
return False
def get_filelist(dir):
gf_ending = []
for home, dirs, files in os.walk(dir):
for filename in files:
fullname = os.path.join(home, filename)
if fullname.__contains__('.jpg'):
gf_ending.append(fullname)
return gf_ending
def information_pick_up(image_path,txt_path='null'):
ip_ending_paths = []
ip_ending_lcations = []
images_path = get_filelist(image_path)
for ipu_i in range(len(images_path)):
temp_ening = find_image_information(images_path[ipu_i],txt_path)
if temp_ening:
ip_ending_paths.append(temp_ening[0])
ip_ending_lcations.append(temp_ening[1])
return ip_ending_paths,ip_ending_lcations
def jpg_copy(jpg_list,directory):
if not os.path.exists(directory):
os.mkdir(directory)
for jc_i in range(len(jpg_list)):
shutil.copy(jpg_list[jc_i], directory)
def write_information_to_txt(str_information,txt_name):
file_write_obj = open(txt_name, 'a+')
file_write_obj.writelines(str_information)
file_write_obj.write('\n')
file_write_obj.close()
if __name__ == "__main__":
#Extract images with location information from a large number of jpg images.
#print information in txt
information = information_pick_up('E:\\jpg_data','E:\\jpg_data_2\\information.txt')
#don't print information in txt
#information = information_pick_up('E:\\jpg_data')
#copy extracted jpg images to directory
jpg_copy(information[0], 'E:\\jpg_data_2')
ending example:
time: 2019:11:22
make: vivo
model: vivo X20
camera: null
E:\jpg_data\$I(M@E1]]S}GDGR832QVAIP.jpg
31.946317,118.68899897222222
time: 2019:11:21 19:24:04
make: Xiaomi
model: MI 8
camera: null
E:\jpg_data\${MKV}XK_DE0R28IIF)2L4B.jpg
45.741551972222226,126.62452
time: 2019:09:05 09:43:43
make: vivo
model: vivo X9
camera: null
E:\jpg_data\%08A$9DM$AP`JI{WJF{CDSU.jpg
45.741138972222224,126.62552397222223
time: 2019:11:16
make: HUAWEI
model: HUAWEI NXT-AL10
camera: null
E:\jpg_data\%U@PRBW0HUC~UHLJ$2UX[HL.jpg
45.74169921861111,126.6295852661111
time: 2019:11:18
make: HUAWEI
model: MHA-AL00
camera: null
E:\jpg_data\%WT([6B_`Y_WL]06K2H15RL.jpg
45.74557113638889,126.62825012194445
time: 2019:11:23
make: motorola
model: XT1650-05
camera: null
E:\jpg_data\(4W0FG(6CV5U~~M]~PNIXQ8.jpg
45.75325738888889,126.67951669444444
time: 2019:09:23 21:23:49
make: Xiaomi
model: MI 8 Lite
camera: null
E:\jpg_data\(7I)Q]8@1OUGUMAGFW54EAE.jpg
45.742119,126.62582197222223
This post is licensed under CC BY 4.0 by the author.