事情是这样的
正准备下班的python开发小哥哥
接到女朋友今晚要加班的电话
并给他发来一张背景模糊的自拍照
如下 ↓ ↓ ↓
敏感的小哥哥心生疑窦,难道会有原谅帽
然后python撸了一段代码 分析照片
分析下来 emmm
拍摄地址居然在 xxx酒店
小哥哥崩溃之余 大呼上当
python分析照片
小哥哥将发给自己的照片原图下载下来
并使用python写了一个脚本
读取到了照片拍摄的详细的地址
详细到了具体的街道和酒店名称
引入exifread模块
首先安装python的exifread模块,用于照片分析
pip install exifread 安装exfriead模块
1
2
3
4
5
6
|
ps c:\windows\system32> pip install exifread
collecting exifread
downloading exifread - 2.3 . 2 - py3 - none - any .whl ( 38 kb)
installing collected packages: exifread
successfully installed exifread - 2.3 . 2
ps c:\windows\system32> pip install json
|
gps经纬度信息
其实我们平时拍摄的照片里,隐藏了大量的私密信息
包括 拍摄时间、极其精确 具体的gps信息。
下面是通过exifread模块,来读取照片内的经纬度信息。
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
|
#读取照片的gps经纬度信息
def find_gps_image(pic_path):
gps = {}
date = ''
with open (pic_path, 'rb' ) as f:
tags = exifread.process_file(f)
for tag, value in tags.items():
#纬度
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(' ,')]
gps[ 'gpslatitude' ] = latitude_and_longitude_convert_to_decimal_system(deg, min , sec)
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)
return { 'gps_information' : gps, 'date_information' : date}
|
百度api将gps转地址
这里需要使用调用百度api,将gps经纬度信息转换为具体的地址信息。
这里,你需要一个调用百度api的ak值,这个可以注册一个百度开发者获得,
当然,你也可以使用博主的这个ak
调用之后,就可以将拍摄时间、拍摄详细地址都解析出来。
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
|
def find_address_from_gps(gps):
secret_key = 'zblsuddl4cs2u0m4kezozzbguy9iwtvf'
if not gps[ 'gps_information' ]:
return '该照片无gps信息'
#经纬度信息
lat, lng = gps[ 'gps_information' ][ 'gpslatitude' ], gps[ 'gps_information' ][ 'gpslongitude' ]
baidu_map_api = "http://api.map.baidu.com/geocoder/v2/?ak={0}&callback=renderreverse&location={1},{2}s&output=json&pois=0" . format (
secret_key, lat, lng)
response = requests.get(baidu_map_api)
#百度api转换成具体的地址
content = response.text.replace( "renderreverse&&renderreverse(" , "")[: - 1 ]
print (content)
baidu_map_address = json.loads(content)
#将返回的json信息解析整理出来
formatted_address = baidu_map_address[ "result" ][ "formatted_address" ]
province = baidu_map_address[ "result" ][ "addresscomponent" ][ "province" ]
city = baidu_map_address[ "result" ][ "addresscomponent" ][ "city" ]
district = baidu_map_address[ "result" ][ "addresscomponent" ][ "district" ]
location = baidu_map_address[ "result" ][ "sematic_description" ]
return formatted_address,province,city,district,location
if __name__ = = '__main__' :
gps_info = find_gps_image(pic_path = 'c:/女友自拍.jpg' )
address = find_address_from_gps(gps = gps_info)
print ( "拍摄时间:" + gps_info.get( "date_information" ))
print ( '照片拍摄:' + str (address))
|
python小哥得到的结果是这样的
照片拍摄地址:('云南省xxxxxxx县', '云南省', 'xxxx市', 'xxx县', 'xxxx酒店')
云南弥勒xxxx酒店,这明显不是老王女友工作的地方
小哥哥搜索了一下,这是一家温泉度假酒店。
顿时就明白了
完整代码:点此下载
到此这篇关于女友半夜加班发自拍 python男友用30行代码发现惊天秘密的文章就介绍到这了,更多相关python读取gps内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_42350212/article/details/116568510