图寻案例分析

2025-09-04 Tom

2011年,一张根据王珞丹自己在微博发布的照片分析出其住址的文章火爆网络,这可能是中文互联网早期最著名的图寻案例。开源调查网站 Bellingcat.com 则是使用图片进行事实核查的先锋,多次发稿追踪俄罗斯 GRU 特工的秘密行动,文章引人入胜。我曾经也玩过这种解密游戏,通常有显著地标或者路牌的照片可以分分钟找到位置,例如一张文字描述为怀恋杭州的照片,照片背景远处若隐若现的桔子水晶酒店招牌,通过查找全杭州市的桔子酒店,再结合百度街景地图,不难找到这张图片的拍摄地位于杭州东站。困难得多的是很多照片实际并没有特别显著的特征,通常需要结合生活经验 (比如炒饭社区中一张照片,我一眼就认出是我部队驻地城市,虽然我义务兵两年基本没外出过),以及挖掘图片中隐藏的细节。出于隐私和伦理上的考量我不会使用私人照片,下文中使用三个互联网公开案例来分析讨论如何通过图片找到实际位置。

案例一 图片拼接

本例抖音视频显示在这个小区里追赶并发生了打架,视频评论区中提到了杭州市几个小区名称,那么哪个小区才是视频拍摄地呢?由于这个视频是水平移动拍摄,所以很容易将视频的完整内容拼接成一张长图。我这里使用开源工具 Hugin(如果你还没接触上手过它,这里有一份入门指南)。将拼接图与最新的卫星地图对比,如果多数特征都能够对上,那么就一定是这个地点了,因为不会存在太多巧合同时集中存在于一处。(因该视频可能暴露拍摄者真实住址,故本例的相关地址已作模糊处理。)

案例二 霸王茶姬门口的美团外卖员

2024年11月下旬,抖音用户“琉璃の璀璨、”发布了《冲动是魔鬼》的视频(视频已被删除,存档),画面位于杭州一家霸王茶姬门店前,一位美团外卖员被警察制服,这位美团外卖员显然是有什么武器,随后被抽出一长条白色金属疑似刀片物品,被询问“这个东西是什么东西?”,随后影片结束。

首先根据杭州西溪世纪中心外卖员事件的先验知识判断在西湖区附近,马路上的路政设施很像,这个思路的结果是一条死胡同;接着根据该发布者的其他视频中有若隐若现看到“五常中学”,推测在余杭区,但显然也是一条死路。

那么只能再次观察视频中的细节了:衣着为短袖,树木茂盛(应该拍摄于夏天,而不是视频发布时的冬天),左侧有一条大马路,棕色楼房(似乎是居民区),马路市政设施看起来就是在杭州,玻璃反光显示左后侧是绿色的“香溢悦便利店”,玻璃反光的后侧能依稀看到“阿X鸭头”。高德地图搜索“鸭头”基本都和衢州有关 (我才知道鸭头是衢州特产,我不吃这个),改进关键词搜索“阿 鸭头”,能够搜索到“阿柜鸭头”、“阿桂鸭头”、“阿炬鸭头”…第二个字看不太清,但是能判断这个字比较充实,没有字体右边部分缺一块的情况。于是判断是“阿桂鸭头”进一步搜索。

非常幸运的是全杭州市“阿桂鸭头”仅此一家,且店招配色和玻璃反光完全一致,正好对面就有一家霸王茶姬,真是踏破铁鞋无觅处,得来全不费工夫。最后一步验证:在美团上搜索这家门店,查看图片评论完全相符,最终锁定位置。这提示我们,当一个地点的主体部分(霸王茶姬)多到没法找时,不妨试试周围的物体(阿桂鸭头),结果会容易很多。

该门店地址:[Base64 Decode]

额外问题:为什么本例不进行拼接图片?

由于本例的视频并非水平拍摄移动,而呈现的是一个有深度的有空间的三维场景,因此不适合使用 Hugin 拼接场景。不过处理三维视频也有办法,2019 年 Bellingcat 追踪荷兰逃犯 Shahin Gheiybe 视频中,使用了德语软件 Agisoft Metashape 重建了包含视频所有帧的一张照片。这种软件过于复杂,本例中再使用这种技术就有点炫技了。

延伸思考:使用高德 API 快速查找

是否存在一个地图搜索引擎,输入两个地点名称,快速帮助我找出这两个地点相邻位置较近的结果吗?应该是没有的。在阅读了高德开放平台搜索 POI 文档后,我认为是可以造一个轮子出来的,相关的 API 提供了搜索指定经纬度位置的指定半径距离的 POI 能力。但是高德对个人认证的开发者不太友好,相关的 API 限速 3 次/秒,且每天的配额上限为 100 次,一达到上限马上就发短信、邮件报警,直接给我断了念头。

不过最近高德似乎改变了政策,目前个人配额为 5000 次/月,无单日上限规定,限速照旧 3 次/秒。但要提升配额的话,就直接强制要求我交商业使用的 5 万元年费,这之后才能购买流量包(高德怎么就认为我是商业用途了,有罪推定是吧😢),非商业使用恐怕只能在工单里提供证明文件了。好在这个配额比之前有所提升,还能接受,这里在 DeepSeek 的帮助下写了一个搜索脚本,效果还不错,输出效果可以去在左边的链接里看一下。

另外,闲鱼平台上有“倒卖”企业认证的高德 API KEY 的商品,价格相对平台便宜,适合临时应急使用,解决了个人开发者额度小、价格贵的难题。需要注意的是闲鱼卖家主体为个人,大金额交易时需要自行规避信誉较低的卖家,以避免不必要的经济损失。

案例三 车祸现场

这是别人发给我的车祸照片,图片的源头应该是微信某个车友群,因为文件名格式形如mmexport**********。第一眼看到的是“潮出租”和“浙F”车牌 (左侧非常不起眼的车牌细节,很容易遗漏),锁定位置在浙江嘉兴。同时有一个小常识:因为嘉兴海宁的钱塘江大潮非常有名,所以在那边很喜欢以“潮”命名。马路对面可见“实验小学”和“小学警务站”这可能是一个本例的重要突破口。

(⚠️点击前警告:下图中包含令人不适内容,建议斟酌查看)

不过只关注于警务站只让我走进一个死胡同(虽然我找到了与图片警务站门牌非常非常相近的小学,甚至拥有一模一样的文字结构,搜索限制在该街道,结果就是一场空)。使用高德 API 搜索小学,城市限制在嘉兴,在经过好几页的漫长且繁琐地排查一番后,[Base64 Decode]的高德地点照片吸引了我的注意,学校右上方墙上隐约可见“好好学习 天天向上”,这似乎与网传图片的未遮蔽部分一致。最后使用百度地图查看该学校街景(PS.为什么用百度?因为腾讯地图的街景使用已经被浏览器厂商淘汰的 Flash,后来腾讯街景功能直接就被下线了),可惜地点街景过时还在施工状态。 最后我从其他来源找了一张该校校门图片,对比学校门口的题字字体一致,可证明确实是该学校,这是因为没人可以写两边完全一样的字:

(我忘了当时是怎么找到这张图的,就挺神奇的吧,因为现在全网可能搜不到比上面这张图更清晰的、而且还没有水印的学校图片。甚至以图搜图都找不到来源,这不重要因为这并不影响解题,有时候真的全靠灵感。

延伸思考:如何确定拍摄时间

天气是一个很好的时间参考。但是历史天气记录哪里找呢?有一次,我甚至翻遍了某气象台微信公众号的每日发的预报天气文章来进行推定,这真不是一个查找历史天气好办法。其实有很多网站提供历史天气数据,付费的有 OpenWeatherMap,免费的有 Open-Meteo(感谢这个项目提供的免费数据,基于气象模型的再分析数据集),卫星图像和雷达数据有 Windy.com…此处不再一一举例。

总结

这种开源调查的魅力就在于它利用公开来源和工具寻找蛛丝马迹,并且人人都可以重复验证结论,这就像是一个公开的解谜游戏,过程是繁琐辛苦的,当最后一块拼图拼上时总能给人带来一种愉快感,追寻真理和真相正是它的魅力所在。另一方面也提醒我们,照片背景中可能泄露很多信息,光凭借一张甚至没有路牌的图片,真的可以找到准确位置。

番外篇

2025年8月11日,影视飓风的百日登岛直播显然引起了极大的网络热度。那么直播的地点在哪里呢,老实说我没有费尽功夫去查找,当时也没有找到。不过显然已有狂热的粉丝已经找到了位置,不然也不会有直播中尝试登岛的网友。比如这位抖音网友把该岛的位置和经纬度给标出来了:30.46203°,120.11287°

查找思路大致如下:已知直播地在余杭(官方侧面透露,且该直播中出现了往返于公司和直播地之间的员工,范围必定在杭州,此外直播中出现了第三方人员的杭州普通话),像视频里这样大面积水体其实并不多见。困难之处在于使用最新的卫星影像地图,来查看相应的水体和小岛,翻了一圈公开的卫星地图,结论是天地图卫星影像最新最清晰,高德虽然近两年更新过影像但是仍旧不是最新的且比较模糊,谷歌地图虽然清晰但是已经严重过时了。上文也我说了,我也没费工夫去查找。

9月8日最新发布的《荒岛幕后》视频里,这个谜底几乎相当于就直接公布,画面中提到直播地与公司的距离为14.1公里。那么以影视飓风公司为圆心,以该距离为半径画圆,对圆弧扫到部分的大型水体进行一个排查,就没几个,很快就能找到目标水体和小岛了(实际直线距离大约只有12公里):

还可以看看:USTCLUG 的 hackergame 题目,涉及到图寻题,解题思路非常有意思:Hackergame2021 旅行照片Hackergame2022 旅行照片2.0Hackergame2023 旅行照片3.0(这题出的并不好,同样2024年的题目我也不喜欢)

--
本页面最后更新于2025年12月29日