我背着女朋友,用 Python 偷偷抓取了她的行踪

全世界只有3.14 % 的人关注了
青少年数学之旅


640?wx_fmt=jpeg


1

目 标 场 景


有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我。但是,你又很想知道女朋友的「位置」,这该如何是好?

640?wx_fmt=jpeg


其实你可以这样套路女朋友,假装自己在家很无聊,可以帮她修图,让她微信发原图给你,拿到「微信原图」后,你就可以利用 Python 快速获取到女友的具体位置了。

2

准 备 工 作


首先,在虚拟环境中安装识别图片元数据的库。

pip3 install exifread

然后,进入高德开放平台,申请一个 Web 服务的应用,获取到一个 「Key」用于逆地理编码 API。

640?wx_fmt=jpeg


3

编  写  脚  本


整个操作分为 3 步骤,分别是获取图片的经度和纬度、对经度和纬度进行数据矫正、调用高德逆地理编码 API 获取具体位置。


第 1 步,获取图片的「经度和纬度」。

使用 exifread 库可以直接读取图片文件,获取到图片的元数据,包含经度、纬度、南北纬方向、东西经方向和拍摄时间。


# 使用 exifread 获取图片的元数据
img_exif = exifread.process_file(open(self.img_path, 'rb'))

# 能够读取到属性
if img_exif:
     # 纬度数
     latitude_gps = img_exif['GPS GPSLatitude']

     # N,S 南北纬方向
     latitude_direction = img_exif['GPS GPSLatitudeRef']

     # 经度数
     longitude_gps = img_exif['GPS GPSLongitude']

     # E,W 东西经方向
     longitude_direction = img_exif['GPS GPSLongitudeRef']

     # 拍摄时间
     take_time = img_exif['EXIF DateTimeOriginal']


如果元数据存在,然后判断拍摄时间是否合理。如果拍摄时间不在今天,那只能很遗憾地通知你,你的女朋友在向你撒谎「撒谎」。

def judge_time_met(self, take_time):
    """
    判断拍摄时间是否是在今天
    :param take_time:
    :return:
    """

    # 拍摄时间
    format_time = str(take_time).split(" ")[0].replace(":""-")

    # 当天日期
    today = str(datetime.date.today())

    if format_time == today:
        return True
    else:
        return False

if is_lie:
        print('很遗憾的通知你,你的女朋友在撒谎!!!')
        return

如果女友没有撒谎,那么可以进行第 2 步的操作。

因为通过 GPS 获取的经度、纬度和高德地图的坐标存在一定的误差,这里需要把坐标转换为「火星坐标系」。

x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 扁率

def wgs84togcj02(lng, lat):
    """
    WGS84转GCJ02(火星坐标系)
    :param lng:WGS84坐标系的经度
    :param lat:WGS84坐标系的纬度
    :return:
    """

    if out_of_china(lng, lat):  # 判断是否在国内
        return lng, lat
    dlat = transformlat(lng - 105.0, lat - 35.0)
    dlng = transformlng(lng - 105.0, lat - 35.0)
    radlat = lat / 180.0 * pi
    magic = math.sin(radlat)
    magic = 1 - ee * magic * magic
    sqrtmagic = math.sqrt(magic)
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
    dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
    mglat = lat + dlat
    mglng = lng + dlng
    return [mglng, mglat]

另外需要注意的是,接口中经度、纬度参数只能识别小数点后 6 位,需要对经纬度中的度、分、秒做一定的数据处理,然后再进行四舍五入。

def __format_lati_long_data(self, data):
    """
    对经度和纬度数据做处理,保留6位小数
    :param data: 原始经度和纬度值
    :return:
    """

    # 删除左右括号和空格
    data_list_tmp = str(data).replace('[''').replace(']''').split(',')
    data_list = [data.strip() for data in data_list_tmp]

    # 替换秒的值
    data_tmp = data_list[-1].split('/')

    # 秒的值
    data_sec = int(data_tmp[0]) / int(data_tmp[1]) / 3600

    # 替换分的值
    data_tmp = data_list[-2]

    # 分的值
    data_minute = int(data_tmp) / 60

    # 度的值
    data_degree = int(data_list[0])

    # 由于高德API只能识别到小数点后的6位
    # 需要转换为浮点数,并保留为6位小数
    result = "%.6f" % (data_degree + data_minute + data_sec)
    return float(result)

第 3 步,调用高德的反地理编码 API,传入申请的应用 Key,就能拿到女朋友的详细地址。

def __get_address(self, location):
    """
    根据坐标得到详细地址
    :param location: 经纬度值
    :return:
    """

    resp = requests.get(self.url_get_position.format(self.api_key, location))

    location_data = json.loads(resp.text)

    address = location_data.get('regeocode').get('formatted_address')

    return address


4

结 果 结 论


确保图片是原图的基础上,可以快速帮你判断女朋友是否在撒谎;如果女朋友没有撒谎,就返回女朋友具体的位置。

转载来源:AirPython
部分素材源于网络,版权归原作者所有
如有侵权请留言联系删除,感谢合作

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg640?wx_fmt=png


写在最后


微信公众号“少年数学家”
提供丰富的数学课外知识
数学人物、数学趣谈、科技与数学


想让孩子懂得更多有趣的数学
记得关注“少年数学家”
640?wx_fmt=png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 中的规约模式(Specification Pattern )——增强泛型仓储模式

原文链接:https://codewithmukesh.com/blog/specification-pattern-in-aspnet-core/在本文中,我们将讨论在 ASP.NET Core 应用程序中实现规约模式以及它如何增强现有的泛型仓储模式。我们将从头开始构建具有泛型仓储模式、Entity Framework Core的 ASP.N…

动画演示男性结扎手术 | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅流鼻涕了怎么办?医学教育徐琦招聘程序员啦知识萌死大丧失;图熊本科技把下列句子补充完整图三好学生李宇幼年的大象喝水并不会使用鼻子而是趴在水里直接用嘴大喝一顿它们9个月之后才会懂得用鼻子喝水科普斯基请…

AspNetCoreMassTransit Courier实现分布式事务

在之前的一篇博文中,CAP框架可以方便我们实现非实时、异步场景下的最终一致性,而有些用例总是无法避免的需要在实时、同步场景下进行,可以借助Saga事务来解决这一困扰。在一些博文和仓库中也搜寻到了.Net下实现Saga模式的解决方案MassTransit…

设置列表字段为主键

转贴:Sample event handler to set a field as a pr imary key (enforce no duplicates) Got this as a request from a reader- how to prevent users from adding items with same titles as ones that already exist in the list. Codeusing System;using System.Collectio…

被学校辞退、拒绝FB后:语音识别大牛Povey确认兼职北京初创公司,称主业还选中国...

全世界只有3.14 % 的人关注了青少年数学之旅由于5月的学生抗议事件,语音识别领域著名学者、原约翰霍普金斯大学教授Daniel Povey被学校辞退。随后,Daniel Povey准备进入Facebook从事语音识别系统的开发,但是由于Facebook要对其进行长达6周的审…

dotnet中的counters说明(二)

上篇说了System.Runtime,它负责应用运行的环境资源的收集,这篇要继续说AspNetCore的Hosting,Http.Connections和Server.Kestrel三个计数器。同时,下面指标各项()里的项目是--counters 参数[]里的项,用逗号分隔多项指标。Microsoft…

有这些好习惯,可以让你悄悄变优秀

全世界只有3.14 %的人关注了青少年数学之旅这是一个普遍无趣的时代,很多人看似忙到起飞内在却空虚迷茫。今天我们为你诚意推荐几个公众号它们会成为你生活的一剂调味料,让你做一个学识丰富、灵魂有趣的人。快来关注,开启精彩的生活吧&#xf…

java设置access-allow_Java Web如何设置多个Access-Control-Allow-Origin

有没有办法让Access-Control-Allow-Origin header允许设置multiple cross-domains呢?如果设置response.addHeader("Access-Control-Allow-Origin","*");感觉这个接口太开放了,不太安全。 我想只设置自己指定的若干个域名或者端口可以…

微软 MS Learn 上线 Blazor 入门教程

微软官方学习网站 MS Learn 上线了 Blazor 入门教程模块,希望通过这个课程,让开发人员了解如何设置开发环境,以及如何使用 Blazor、Visual Studio Code 和 C# 生成你的首个 Web 应用。Build a web app with Blazor - Learndocs.microsoft.com…

Type Casting

Type Casting C : Documents : C Language Tutorial : Type Casting Search: userpass[register] javascript and cookies required C Language TutorialIntroduction?Instructions for useBasics of C?Structure of a program?Variables. Data Types.?Constants?Oper…

世界最牛实验室,堪称诺贝尔奖孵化器!到底是个怎样神奇的存在?!

▲ 点击查看随着诺贝尔各个奖项陆陆续续的公布,卡文迪许实验室,又开始重回大众视野。在这个世界最牛实验室之一的实验室里,仅仅过去了一百多年,就不断涌现出一批又一批世界一流的科学家:把电与磁进行有机统一的麦克斯…

开源的负载测试/压力测试工具 NBomber

负载测试和压力测试对于确保 web 应用的性能和可缩放性非常重要。尽管它们的某些测试是相同的,但目标不同。负载测试:测试应用是否可以在特定情况下处理指定的用户负载,同时仍满足响应目标。应用在正常状态下运行。压力测试:在极端…

男人都应该懂的一张图。。 | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅美国人为了教民众如何辨别韩国人制作的韩国女性标准照左右军事成为一个有钱人的概率有多高?最新版男人都该懂的汽车品牌从属关系图twi:NOCO_1002肥胖和骨架没有必然联系800斤胖子的X射线照 科普君XueShu 雪树来猜一猜这是…

学做菜咯

以前在QQ空间发的贴,现在转到这边来,嘿嘿。青蛙达 - 07月28日- 14时28分今天中午做我个人最喜欢的菜之一《咖喱鸡饭》 早上到超市买了: 大蒜头、洋葱、南瓜、鸡翅膀、咖喱粉、胡椒粉、白糖、桂皮 回来发现原来把辣椒粉当成胡椒粉买回来了....…

Facebook 中国程序员之死

全世界只有3.14 % 的人关注了青少年数学之旅9 月 19 日,一位 Facebook 软件工程师从加州门洛帕克(Menlo Park)总部四楼纵身跳下,结束年轻的生命。Facebook 新闻发言人证实确有其事,并说公司将会联系员工家人。门洛帕克…

[导入]数据库物理模型设计的其他模式之继承模式

连载之7原创:胖子刘(转载请注明作者和出处,谢谢)数据库物理模型设计的其他模式除了上面提到的四种主要设计模式,还有一些其他模式,在某些项目中可能会用到,在这里先简单做个说明,暂不…

“我数学太烂,但高考136分!”刷完上万道题后,我找到2个月多考58分的捷径…...

全世界只有3.14 %的人关注了青少年数学之旅01难上天的高考试卷,我逆袭考到136分!我叫刘辉,来自湖北省的某个县城,今年我数学考到了136分的好成绩,成功被一所985高校录取。↓我的高考成绩↓但回想一年之前,我…

[Forward] 因为火炬,所以迟到,工资照扣

今天跟往常一样,到香蜜湖等230 看到深南大道主道那边站了一名JC叔叔 在前面的主辅岔道口看到有交J叔叔...对面又大堵车...心想大事不妙..又要交通管制了......两hui期间因为交通管制让我第一个月上班就来了一次迟到 这时候是8点钟多一点开始管制.....很后悔没有上到最后一…

三分钟总览微软任务并行库TPL

点击上方蓝字进行关注有小伙伴问我每天忽悠的TPL是什么?☹️ 这次站位高一点,严肃讲一讲。引言俗话说,不想开飞机的程序员不是一名好爸爸;作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀的程序员将…

第五章 MyEclipse配置hadoop开发环境

1.首先要下载相应的hadoop版本的插件,我这里就给2个例子: hadoop-1.2.1插件:http://download.csdn.net/download/hanyongan300/6238153 hadoop2.2.0插件:http://blog.csdn.net/twlkyao/article/details/17334693 上一章我也讲了怎…