项目简介:本次项目主要学习了如何查找相片中的 Exif 信息,并通过 Exif 信息中的 GPS 数据在百度地图中进行定位标点,以确定相片的拍摄地点。本次实验的目的旨在通过包含 GPS 信息的相片进行取证调查,当然个人娱乐也可以!
一、实验说明
1. Python 版本Python 3.x
2. 知识点
实验中将会学习并实践以下知识点:PyQt5 框架基本GUI组件的使用
PyQt5 中信号和槽的用法
PyQt5 中 QWebView 的基本用法
百度地图 URL API 标点功能的用法
利用 piexif 库实现相片 GPS 信息的提取
3. 效果图
二、理论基础
以下内容整理自百度百科、维基百科,参考链接:
1. Exif
Exif 是一种图像文件格式,它的数据存储与 JPEG 格式是完全相同的。实际上 Exif 格式就是在 JPEG 格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及 GPS 全球定位系统数据、缩略图等。这节课我们只用到了 Exif 中的 GPS信息,将 GPS信息 提取出之后,我们就可以用 经纬度 来定位相片拍摄的位置了。
2. PyQt5
PyQt 是由 Phil Thompson 开发的一个创建 GUI 应用程序的工具包。它是 Python 编程语言和 Qt 库的成功融合。目前有两个分支,分别是 PyQt5 和 PyQt4。PyQt4 基于 Qt4 开发,PyQt5 则是 Python 基于 Qt5 开发的。由于 Qt5 相对于 Qt4 来说增加了很多新特性,所以这次实验我们将采用 PyQt5 来实现本次实验的 GUI。
3. 信号与槽
信号 与 槽是 Qt 中的 核心机制。在创建事件循环之后,通过建立信号与槽的连接可以实现对象之间的通信。当信号发射时,连接的槽函数将会自动执行。在 PyQt5 中信号和槽通过 object.signal.connect() 的方式连接。
4. 百度地图-URI API
百度地图URI API是为开发者提供直接调起百度地图产品(百度Web地图、百度地图手机客户端)以满足特定业务场景下应用需求的程序接口,我们只需按照接口规范构造一条标准的URI,就可以在PC和移动端浏览器或移动开发应用中调起百度地图产品,进行地图展示和检索、线路查询、导航等功能,无需进行复杂的地图功能开发。在本次试验中,我们只需要用到百度地图-URI API中的 反地址解析 接口,调用该接口可调起PC或Web百度地图,经过逆地理编码后,以标注形式显示出位置和地址信息,详细文档请参考web端URI API。
三、环境配置
工欲善其事,必先利其器,现在我们就来把我们的开发环境搭建起来。PyQt5 依赖 Qt5,我们先把 Qt 安装上。
新建个下载目录:
mkdr download & cd download
下载 Qt 5.7.0:
wget http://mirror.bit.edu.cn/qtproject/archive/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run
下载下来可能没有执行权限,我们更改一下权限:
sudo chmod 777 qt-opensource-linux-x64-5.7.0.run
开始安装,一路 next 就可以了:
./qt-opensource-linux-x64-5.7.0.run
接下来安装 PyQt5:
sudo apt-get install python3-pyqt5
这样安装完 PyQt5 默认不带 QWebKit 模块,现在我们需要手动安装一下:
sudo apt-get install python3-pyqt5.qtwebkit
至此我们的开发环境就搭建好了。
四、实现步骤
在代码实现之前我们先看一下我们要实现的效果:
界面用到了 QLineEdit、QPushButton 以及 QWebView。
QLineEdit 允许用户输入或者编辑单行的纯文本,我们用它来显示我们的图片路径。
QPushButon 是一个按钮,当用户点击的时候会发射clicked()信号。我们用它来实现一个选择图片的按钮和定位的按钮。
QWebView 是一个可以显示和编辑Web文档的组件,相当于一个最简单的浏览器,我们用它来加载地图,实现定位功能。
整个过程就是使用 piexif 库获取图片 Exif 信息中的 GPS 数据,并通过 PyQt5 中的 QWebView显示百度地图,并根据百度地图提供的 URI API 在百度地图中定位我们获得的经纬度。
现在来看一下相片定位的效果,同学们最好用自己手机拍摄出的图片来测试。因为上传到网络上的图片一般都会进行处理,Exif 信息可能会丢失,也就无法完成相片拍摄位置的定位。
可以看到地图中标注了一个 红点,这个就是我测试相片的拍摄位置。
五、总结
通过本次实验我们应该对 PyQt5 这个 GUI 库有所了解,并能了解 GUI 应用程序的开发思路。同时应该了解如何从相片中获取 Exif 信息,以及如何用 QWebView 加载百度地图。当然这次实验仅仅利用了 GPS 信息,同学们还可以通过其他信息来扩展一下思路,写一个有用处的脚本。
本项目实现的完整教程和代码详解可以在实验楼查看,立即【开始实验】。
更多Python经典项目:Python全部 - 课程
如果您也想通过实验楼课程的形式分享自己的实践经验,欢迎投稿给我们:项目投稿通道