3 地理位置定位_照片定位

社交距离是一个在疫情中经常出现的词汇,如果说:“ 你与陌生人之间,可能只是一张照片的距离!”,你相信吗?去年可能有这样一则新闻也许在大家的视野中出现过,难道我们每次在圈中嗮各种图片岂不是把自己的行踪暴露在光天化日之下吗?发图撒谎有用吗?这么惊悚吗?今天咱就来验证一下这个事吧。 ee7fbbcd1bc5ec776ec5969af59f60c6.png任何一台智能拍照设备(主要指的是智能手机)拍下的照片都带有定位信息,只要你现在打开你的手机相册查看你拍摄过的照片,查看一下照片的属性(有的甚至不用就直接标注出该照片地理位置,甚至可以按地理位置给你进行自动归类)。

6a99ac31d72b98bcb66321a96f919d84.png

导入电脑上的图片也是同理,我随意打开一张电脑中保存的以前旅游的照片,选择查看图片的“属性”选项中的“详细信息”就可以看到如下细节。

d0148332e392d8b72296f73f670d661f.png

注意下方的EXIF,图片的定位信息就隐含在其中。EXIF可交换文件图像的简称,全称是Exchangeable Image File。它是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。当然很关键的拍摄位置信息也在其中,如上图所示的拍摄地点的经度、纬度和高度这些敏感信息。看完上面的描述,是不是有这样一种可能,某有心人查看了你的朋友圈,并把你发的照片通过软件做成一张你日常生活轨迹的图片,通过这样的方式你的行踪是不是会一览无余呢?我只能说:是也不是,这完全取决于你的安全意思。简单一句就是:不要发原图!不要发原图!!不要发原图!!!通过读取原图信息,能轻易获取图片拍摄的准确位置;反之也能轻易隐藏原图的地理位置。而这一切,我们通过python可以很容易做到。

eaa16e094ce8aa9ff8f2093753ab890d.png

今天只是做一个简单的图片定位,这需要用到一些线上工具。今天我们用百度地图开放平台中的逆地理编码功能,首先在这个平台上创建一个应用,然后获取相应的API的key来实现我们的图片地理位置的提取,当然其他的AI平台也是可以的。

dd631d6b29206f487fe91b86901538b3.png

079efd24451864aba874710c19ba6fd7.png

高德地图也提供这样的API,获取的地理位置要更详细一些,只是两个平台API调用的格式有很大差异,今天我们就用百度的开放地图试一试照片定位功能的实现吧。

c0bd5fe4c060934828d4b67e408b72e6.png 21400adf4d2eeb15d6cd44818ecc82c1.png

当然首先要安装一些python支持库,如exifread、requests、json等,其中exifread就是用来读取照片信息的库。

3d60805db73aec01e84a5578b3f406ba.png

源程序如下所示。

import requestsimport exifreadclass GetPhotoInfo:def __init__(self, photo):self.photo = photo# 百度地图ak  请替换为自己申请的ak        self.ak = 'key'#此处填入百度地图开放平台上所获得的key        self.location = self.get_photo_info()def get_photo_info(self, ):with open(self.photo, 'rb') as f:
tags = exifread.process_file(f)try:# 打印照片其中一些信息 print('拍摄时间:', tags['EXIF DateTimeOriginal'])print('照相机制造商:', tags['Image Make'])print('照相机型号:', tags['Image Model'])print('照片尺寸:', tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength'])# 纬度 lat_ref = tags["GPS GPSLatitudeRef"].printable
lat = tags["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
lat = float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / float(lat[3]) / 3600 if lat_ref != "N":
lat = lat * (-1)# 经度 lon_ref = tags["GPS GPSLongitudeRef"].printable
lon = tags["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
lon = float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / float(lon[3]) / 3600 if lon_ref != "E":
lon = lon * (-1)except KeyError:return "ERROR:请确保照片包含经纬度等EXIF信息。" else:print("经纬度:", lat, lon)return lat, londef get_location(self):
url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json' \'&coordtype=wgs84ll&location={},{}'.format(self.ak, *self.location)
response = requests.get(url).json()
status = response['status']if status == 0:
address = response['result']['formatted_address']print('详细地址:', address)else:print('baidu_map error')if __name__ == '__main__':
Main = GetPhotoInfo(r'C:\Users\Administrator\Desktop\test1.jpg')
Main.get_location()

目标图片是如下这样的,是在拉萨拍得,具体时间和地点有些忘记了。

1f03e310f6d6060a4e460300436fa193.png

25707a94d4fa4e41504866d62aad9fe7.gif

b90a5f08c8f73ccba6c925681e303ea2.png

该照片的EXIF信息就完全呈现出来了,拍摄用的手机型号、拍照的经纬度、详细地址一目了然哦,是不是有些细思极恐啊?后续我尝试了一下用ps压缩一下这张图片(当然没有做其他处理,将原图从6M压缩到1M左右),照片的详细信息依然如上图所示一样样。

b562befb705c218b7a6ddce586fb7acd.png

这是我在朋友圈随意找的一张图片,看看能不能将其定位吧,结果是这样的。

0a35051132cf1d468da6910980da7770.png

看来朋友圈的图片是无法定位的,大家可以稍稍放心啦!因为微信专门为这件事辟过谣。

220a5d4585850ec4a522c6812d8831c2.png

是不是这样就可以避免照片位置信息的泄露呢,有些技术手段是超出大家认知的,能不能恢复大家自己掂量,鄙人也说不准呢!当然既然可以识别照片的位置信息,那么更改其位置信息也是小菜一碟的。

现实生活中,关于信息泄露的问题无处不在的,在这只能提高意思加强个人防范,我们在享受信息化生活便利的同时也要避免受到不必要的骚扰。

简单给大家几个有用的防范常识吧:

1. 不用可疑的软件,不随意提供个人信息;

2. 安装App时只赋予最小权限,关闭不必要的功能; 3. 各种缴费单据、快递包装等在丢弃前涂抹上面的个人信息; 4. 不在社交软件上晒定位、照片等其他信息; 5. 朋友圈等关闭允许陌生人查看十张照片等功能; 6. 不在或少在公开场合连接不安全的WIFI热点等。

当然如果你想“查房”,最简单的办法是,叫他(她)给你发实时原图就可以啦,不会python也没问题(网上有很多查EXIF的工具的),当然前提是他(她)还不会使用软件来更改照片的EXIF信息。看到最后,希望大家不要后背发凉就好,呵呵!!!

c1630c337c23da4a05f4f623077b1a27.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值