mcpField
W
where-was-this-taken

where-was-this-taken

github.com/useosint生产力571.7k 次安装12 周前更新
代码仓库

关于 where-was-this-taken

用于核验图像或视频拍摄地点、时间与真实性的调查工作流,面向需要可追溯证据链的研究者。它按顺序检查元数据、原始出处、视觉地理定位、时间线索与图像完整性,并为结论标注精度和可信度。

主要功能

  1. 01先保存原件并记录哈希与来源
  2. 02提取 GPS、时间及设备元数据
  3. 03追溯媒体原始出处和早期说明
  4. 04结合画面特征定位并估算拍摄时间
  5. 05检查合成或篡改并分级结论

适用场景

  1. 01核验网络图片声称的拍摄地点
  2. 02评估视频画面对应的时间范围
  3. 03为调查报告整理媒体证据链

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/useosint/skills --skill where-was-this-taken

安装后在 Claude Code 中输入/where-was-this-taken确认已加载。

详细介绍

拍摄地点在哪里

输入:图像或视频文件,或其 URL。输出:一个地点、一个置信半径、一个时间范围、一项真实性评估,以及每项结论的证据链。

此工作流负责编排。技术细节见 secrets-in-file-metadata、 find-the-original-image、geolocate-from-pixels 和 is-this-photo-real——运行这些工具, 不要在此处重新实现。

本文件中最重要的是顺序。先查元数据,再进行分析, 因为分析会破坏元数据。先查来源,再做地理定位,因为原图的说明文字往往就是地点。 先进行真实性检查,再下结论, 因为对合成图像进行地理定位,会让你对错误的问题得出自信的答案。

第 1 步 — 授权范围

阅读 ../../ETHICS.md。然后,在打开文件前,先以书面形式说明:

  • 对象 — 媒体内容是什么,以及其中出现了谁,或谁会受到影响。
  • 目的 — 核实、虚假信息研究、寻找失踪人员、威胁评估、尽职调查、诉讼支持,或向某人展示其自身暴露的信息。如果你无法说出正当目的,请停止。
  • 允许与禁止的事项 — 具体说明:你是否获准发布精确坐标,还是只能发布某个区域?是否允许进行人脸搜索?画面中的人是否有私人个体?
  • 司法管辖区 — 你本人、对象以及平台所在的司法管辖区。对可识别个人的精确历史位置数据,在大多数司法管辖区都属于受监管的个人数据。
  • 发布精度下限 — 现在就决定要发布到什么精度,不要等知道答案后再决定。无论你的意图如何,从私人个体自己的照片中定位其住所,都是跟踪行为;冲突影像也可能让画面中的人成为目标。是否取整坐标,应当冷静决定。

完成条件:已在案件档案中写明对象、目的、允许范围、司法管辖区和发布精度下限。

第 2 步 — 保存未经处理的副本

如果原件受到污染,后续所有工作都毫无价值。

  • 使用文件本身,而不是它的屏幕截图。对于平台上的视频,使用 yt-dlp 下载画质最高的版本,并保留旁车 JSON 文件。
  • 立即计算哈希并记录:sha256sum evidence.jpg。再用一种算法计算哈希不费事,还能提前消除争议。
  • 将原件设为只读,未经修改地保存,并在副本上开展所有工作。为衍生文件命名,清楚标明所做的变换:evidence_crop-sign.png、 evidence_flop.jpg。
  • 记录你获取材料的来源:URL、获取时间、提供者,以及文件来自哪个平台。趁源页面尚未变化,先将其存档。
  • 记录文件是原始拍摄文件、平台重新编码的文件,还是屏幕截图。这个事实决定了哪些后续测试有效;报告中也需要写明。

完成条件:原件已计算哈希、设为只读,且已记录其获取路径;之后的每一步都在已命名的副本上进行。

第 3 步 — 元数据

在进行任何变换前,先运行 secrets-in-file-metadata。裁剪、旋转、放大,甚至在某些编辑器中打开文件,都可能重写标签。

优先检查:GPS 坐标和 GPSHPositioningError;GPSImgDirection,它会给出相机朝向,让你能够重现完全相同的视角;以 UTC 记录的 GPSDateStamp/GPSTimeStamp,这是唯一与时区关联的时钟;时间戳三元组;设备品牌、型号和序列号;软件处理链;以及用于与主图比较的内嵌缩略图。

如果存在 GPS 信息,它只是一个线索,不是答案。这个字段可以被写入。 继续执行第 5 步,并通过视觉方式核实;相比单独依赖任何一种证据,经视觉核实的元数据坐标能得出有力得多的结论。

完成条件:元数据已提取并记录,或已确认不存在;并且你写的是“未发现 EXIF”,而不是“EXIF 已被移除”。

步骤 4 — 溯源

运行 find-the-original-image。对于视频,先提取关键帧,再搜索其中几帧。

你要寻找更早出现的版本、不同的说明文字、摄影师署名,以及可通过 read-deleted-pages 独立佐证的日期。打开匹配页面并阅读——最早版本上的说明文字经常会直接写明地点,这样步骤 5 和步骤 6 就会从搜索转为核实。

如果媒体出现的时间早于所声称的时间,或者来自与所声称国家不同的国家,你就已经有了答案,而且这个答案比坐标更有力。

完成标准:找到最早已知发布记录及其日期和说明文字,或者记录至少三个引擎(包括裁剪搜索和镜像搜索)均无结果的情况。

步骤 5 — 视觉定位

运行 geolocate-from-pixels。先梳理线索,再开始搜索;按地理辨识度为线索排序;根据语言、车牌、行驶方向和道路标线确定国家,然后缩小到具体地点,并通过卫星和街景图像确认。

即使步骤 3 给出了坐标,也要执行这一步,作为独立检验,而不是直接导航到该坐标并确认别人告诉你的结果。使用 GPSImgDirection 还原相机朝向,并检查从该位置朝该方向拍摄时是否能看到相同景象。若朝向指向一面空白墙,说明坐标有误。

完成标准:找到候选地点,说明定位半径,并列出你匹配到的具体特征;或者记录仅确定到区域的结果,并说明无法进一步缩小范围的原因。

步骤 6 — 时间定位

仍在 geolocate-from-pixels 中,使用其时间定位参考资料。根据阴影方位角判断太阳方位,根据阴影长度比判断太阳高度,再用太阳位置计算器,结合已确认的地点进行求解。预计会得到两个日期区间,而不是一个;再利用植被、积雪、作物生长阶段或画面中的有日期物体来确定具体区间。通过天气档案佐证,并注明使用的气象站及其距离。

将结果与步骤 3 中的元数据时间戳进行比对。未经锚定的 EXIF 日期时间与独立推算的太阳位置相吻合,是整个工作流中最有力的佐证之一,因为两者没有共同的失效模式。

完成标准:给出经过评估的时段范围和日期区间,并注明用于区分的依据;或者明确说明日期仍有两个可能区间。

步骤 7 — 真实性

运行 is-this-photo-real。至少执行物理一致性检查——多个物体的阴影是否汇聚、反射几何、透视和比例——并根据步骤 5 的发现进行内部一致性检查。

这一步要捕捉的具体问题是:你刚刚定位的场景可能是由两张照片拼接而成,也可能是生成的。合成图像可以被精准定位,但这毫无意义。如果阴影汇聚检验未通过,或某个元素没有光学特征,那么你的定位结果只适用于背景底片,必须明确说明。

完成标准:评估并标注篡改和合成的可能性,同时已执行信号级测试;如果手头的副本不适用于此类测试,则明确标注为无效。

步骤 8 — 判断主张是否得到佐证

并列比较各条独立证据,看看哪些相互吻合。

标准:三项相互独立且非暂态的特征与参考影像相符,即可确定地点。独立性是人们最容易含糊带过的要求。同一块标牌的三张照片只算一项特征。建筑轮廓、成排的电线杆和山脊线轮廓则是三项。元数据 GPS、视觉匹配和符合太阳位置的阴影也是三项;它们彼此独立,因为要同时伪造这三者且让它们相互吻合并不容易。

然后执行你应该在步骤 5 中写下的证伪测试:指出哪一项观察结果会推翻你的候选地点,去查找它,并记录你确实查过。没人试图推翻的发现,不算发现。

如实评定综合结论:

  • 已确认 — 三项独立特征吻合,已执行证伪测试且未能推翻结论,并且各条证据之间没有相互矛盾。
  • 很可能 — 有两项独立特征,或有三项,但其中一项依赖于未标注日期或低分辨率的参考影像。
  • 仅确定区域 — 已确定国家或省份,但未确定具体地点。这也是值得认可的结果。
  • 已排除 — 可以明确排除所声称的地点。只需一项确凿矛盾即可,且排除错误地点往往比找到真实地点更有用。
  • 未解决 — 如实说明。诚实地承认缺口,胜过给出一个会被反驳的自信猜测。

完成标准:地点、时间和真实性各自都有等级及其依据的证据,并且明确说明各条证据之间的任何矛盾,而不是设法将其消解。

步骤 9 — 表述发现

  • 始终提供坐标和以米为单位的半径。 仅给出精确到小数点后六位的坐标,会让人误以为你具备亚米级精度,实际上并非如此。根据真正限定你判断范围的因素推导半径:如果结论依据元数据,则使用 GPSHPositioningError;如果依据卫星影像匹配,则使用参考影像的分辨率;如果依据视觉分析,则使用与你匹配的特征相符的区域大小。
  • 分别说明相机位置和拍摄方位,以及主体位置。 这是不同的地点,报告中经常将它们混为一谈。
  • 以当地时间表示时间范围,并说明是否从太阳时转换以及使用了什么时差。
  • 日期以一到两个时间段表示,说明是哪项判别依据排除了第二个时间段;如果没有排除项,则同时报告两者。
  • 列出匹配到的具体特征,并附上参考影像的链接及其拍摄日期。
  • 说明你的假设:假设的物体高度、地面平坦度、采用的参考方位,以及使用的气象站。
  • 遵守步骤 1 中的发布门槛。 如果门槛要求仅报告区域,那么在坐标离开你的笔记之前就先进行取整,而不是等别人提出要求后再处理。

完成标准:以步骤 1 批准的精度写出发现,并包含半径、等级、匹配到的特征及假设。

步骤 10 — 交接

使用分级后的发现、证据链、步骤 2 中的哈希值和已存档的参考链接运行 write-the-intel-brief。

此工作流产生的新检索对象及其对应工具:企业名称和市政机构交给 x-ray-a-company;标牌上的电话号码交给 whose-number-is-this;标牌或车辆上的域名交给 who-owns-this-domain;具名或署名的个人交给 find-anyone;发布账号交给 hunt-a-handle 和 pattern-of-life-from-socials;画面中的飞机或船只交给 track-planes-and-ships;多个相关地点交给 graph-the-network。

完成标准:简报已交付,案件档案保留原始哈希值和衍生链,并已删除实现既定目标不再需要的数据。

评论

支持 Markdown