神探Python程序員,帶你千里捉小三!(附詳情代碼)


前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

作者: 王翔 清風Python

PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

在這里插入圖片描述

通過委托人的述說,專門查了一下深圳最近的天氣,保持在10-20度之間,帶羽絨服的動作確實有些匪夷所思。因為只是懷疑不能直白的查崗,該如何默默地私下調查呢?在和委托人深入探討時,看到她老公發了一張漢庭酒店的入住照片。然而漢庭酒店在全國都有分店,也不能說明什么啊!

在這里插入圖片描述

突然我靈機一動,也許這一張足以成為是否出軌的證據了!在委托人疑惑中,我讓她把這張照片發到了我的電腦上,經過我飛速的代碼編寫,真想就此浮出水面!

 

在這里插入圖片描述

通過解析照片,獲取到了照片的詳細與經緯度,在通過經緯度逆推,得到了最終的拍攝地理位置:陝西省西安市碑林區含光北路162號,拿起手機搜索了一下這個地址實錘了,漢庭酒店無疑!

在這里插入圖片描述

委托人的連夜機票,最終完成了千里捉小三的壯舉!全劇終…

在這里插入圖片描述

獲取地理位置

故事到這里結束了,但是小P偵探是如何通過代碼解析到照片中的具體位置呢?如果人人都可以通過照片解析他人的位置,豈不是亂了套了!別急,想通過代碼解析微信發送的照片地理位置,需要滿足以下幾點要求:

1、他人通過選擇原圖的方式,發送照片 2、相機拍照時,默認設置了GPS定位 3、非iphone手機(iphone的地理位置,不會保存在照片中)

現在的手機在拍照時,默認都是打開GPS地位的。那么你只需要確認對方手機不是iphone的,然后讓他給你發送原圖就OK了。

照片屬性中保存了經緯度,可我們如何能通過經緯度逆推地理位置呢?此時我們需要使用到百度地圖的逆地理編碼工具:

在這里插入圖片描述

接口很簡單,我們簡單注冊后,創建一個針對地理位置解析的應用即可:

在這里插入圖片描述

偵探的代碼

 1 import requests
 2 import exifread
 3  4  5 class GetPhotoInfo:
 6     def __init__(self, photo):
 7         self.photo = photo
 8         # 百度地圖ak
 9         self.ak = 'nYPs4LQ9a4VhVxj55AD69K6zgsRy9o4z'
10         self.location = self.get_photo_info()
11 12     def get_photo_info(self, ):
13         with open(self.photo, 'rb') as f:
14             tags = exifread.process_file(f)
15         try:
16             # 打印照片其中一些信息
17             print('拍攝時間:', tags['EXIF DateTimeOriginal'])
18             print('照相機制造商:', tags['Image Make'])
19             print('照相機型號:', tags['Image Model'])
20             print('照片尺寸:', tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength'])
21             # 緯度
22             lat_ref = tags["GPS GPSLatitudeRef"].printable
23             lat = tags["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
24             lat = float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / float(lat[3]) / 3600
25             if lat_ref != "N":
26                 lat = lat * (-1)
27             # 經度
28             lon_ref = tags["GPS GPSLongitudeRef"].printable
29             lon = tags["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
30             lon = float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / float(lon[3]) / 3600
31             if lon_ref != "E":
32                 lon = lon * (-1)
33         except KeyError:
34             return "ERROR:請確保照片包含經緯度等EXIF信息。"
35         else:
36             print("經緯度:", lat, lon)
37             return lat, lon
38 39     def get_location(self):
40         url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json' \
41               '&coordtype=wgs84ll&location={},{}'.format(self.ak, *self.location)
42         response = requests.get(url).json()
43         status = response['status']
44         if status == 0:
45             address = response['result']['formatted_address']
46             print('詳細地址:', address)
47         else:
48             print('baidu_map error')
49 50 51 if __name__ == '__main__':
52     Main = GetPhotoInfo('微信圖片_20191203180732.jpg')
53     Main.get_location()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM