where-was-this-taken について
画像や動画の撮影場所、時刻、真正性を調べるためのワークフローです。証拠の追跡が必要な調査向けに、メタデータ、出典、視覚的な位置特定、時刻推定、改変確認を順に行い、精度と所見を評価します。
主な機能
- 01原本を保全しハッシュと取得元を記録
- 02GPS、時刻、機器のメタデータを抽出
- 03過去の掲載先やキャプションを追跡
- 04視覚情報から場所と撮影時刻を推定
- 05改変を確認して所見を評価
活用シーン
- 01オンライン画像の撮影場所の検証
- 02動画に映る時刻の範囲の推定
- 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、タイムスタンプの 3 要素、デバイスのメーカー、モデル、シリアル番号、ソフトウェアの処理経路、そしてメイン画像と比較するための埋め込みサムネイル。
GPS 情報があれば、それは手がかりであって、答えではありません。書き換え可能なフィールドだからです。ステップ 5 に進み、目視で検証してください。メタデータの座標が目視確認でも裏付けられれば、どちらか一方だけの場合よりもはるかに確かな所見になります。
完了条件 — メタデータを抽出して記録するか、存在しないことを確認し、「EXIF が削除された」ではなく「EXIF が存在しない」と記録していること。
ステップ 4 — 出所
find-the-original-image を実行します。動画の場合は、まずキーフレームを抽出し、そのうち複数を検索します。
より早い時期に掲載されたもの、異なるキャプション、撮影者のクレジット、そして read-deleted-pages を使って独立に裏付けられる日付を探します。一致したページを開いて読みます。最も古いコピーのキャプションには、場所が明記されていることがよくあります。その場合、ステップ 5 と 6 は検索ではなく検証作業になります。
メディアの撮影時期が主張より古い場合、または主張とは異なる国のものである場合、それが答えです。座標よりも確かな答えです。
完了条件:日付とキャプションが分かる既知最古の掲載を特定するか、クロップとミラー検索を含む少なくとも 3 つのエンジンで検索し、一致するものがなかったことを記録しています。
ステップ 5 — 視覚情報による位置特定
geolocate-from-pixels を実行します。検索の前に手がかりを洗い出し、地理的な特定力に応じて順位を付け、言語、ナンバープレート、通行方向、道路標示から国を絞り込み、次に場所を絞り込んで、衛星画像と地上レベルの画像で確認します。
ステップ 3 で座標が得られた場合も、そこへ直接移動して与えられた情報を確認するのではなく、独立した検証として同じ作業を行います。GPSImgDirection を使ってカメラの方位を再現し、その位置からその方角を向いたカメラに写る景色と一致するか確認します。何もない壁を指す方位なら、座標は間違っています。
完了条件:特定した半径と、一致を確認した具体的な特徴の一覧を記録した候補地点を得るか、それ以上絞り込めなかった理由を記録した地域レベルの結果を得ています。
ステップ 6 — 時期の特定
引き続き geolocate-from-pixels を使い、その時期特定リファレンスを参照します。太陽の方位には影の方位角を、太陽の高度には影の長さの比率を使い、確認済みの場所を基準に太陽位置計算ツールで時期を割り出します。日付の候補は 1 つではなく 2 つの期間になると考え、葉の茂り具合、積雪、作物の生育段階、またはフレーム内の撮影日が分かる物体を手がかりに絞り込みます。気象アーカイブと照合し、使用した観測所と、その観測所までの距離を記録します。
結果をステップ 3 のメタデータのタイムスタンプと照合します。基準のない EXIF 日時と、独立に導き出した太陽位置が一致することは、このワークフロー全体で得られる最も強力な裏付けの 1 つです。両者には共通する失敗要因がないためです。
完了条件:それぞれ確度を評価し、判断に使った識別要素を明記した時刻の範囲と日付の期間を得ています。または、日付候補が 2 つの期間のままであることを明示しています。
ステップ 7 — 真正性
is-this-photo-real を実行します。最低限、物理的整合性を確認します。複数の物体における影の収束、反射の幾何学的整合性、遠近法と縮尺を確認し、ステップ 5 の調査結果との内部整合性を一通り検証します。
このステップで特に検出するのは、2 枚の写真を合成して作られた、あるいは生成されたシーンを位置特定してしまうケースです。合成画像でも位置特定は簡単にできてしまいますが、その結果は意味をなしません。影の収束が成立しない場合、またはある要素に光学的な特徴がない場合、位置特定の結果は背景画像にしか当てはまりません。そのことを明記する必要があります。
完了条件:加工と合成についてそれぞれ確度を評価し、信号レベルの検査を実施するか、手元のコピーでは無効であることを明記しています。
ステップ 8 — 主張が裏付けられているか判断する
独立した証拠を並べて、何が一致しているか確認します。
基準は、相互に独立した一時的ではない特徴が3つ、参照画像と一致すれば場所を特定できるということです。独立性は、ごまかされやすい要件です。同じ標識を写した写真が3枚あっても、特徴は1つです。建物の形状、電柱の並び、稜線の輪郭なら3つです。メタデータのGPS、視覚的な一致、太陽の位置と整合する影も3つです。これらすべてを一貫して偽装するのは困難なため、互いに独立しています。
次に、ステップ 5 で書き出したはずの反証テストを実行します。候補を否定する単一の観察事項を挙げ、それを探し、実施したことを記録します。反証を試みていない発見は、発見とは言えません。
総合評価を正直に付けます。
- 確認済み — 独立した特徴が3つ一致し、反証テストを実施しても候補を否定できず、どの証拠も他の証拠と矛盾していません。
- 有力 — 独立した特徴が2つ一致する場合、または3つ一致するものの、そのうち1つが撮影日不明あるいは低解像度の参照画像に依拠している場合です。
- 地域のみ — 国または州・県は特定できたものの、現場は特定できていません。これも立派な結果です。
- 除外 — 主張された場所を積極的に除外できます。明確な矛盾が1つあれば十分であり、真の現場を見つけるより役立つこともよくあります。
- 未解決 — その旨を明記します。正直な未解明点は、反論される確信に満ちた推測よりも優れています。
完了条件 — 場所、時刻、真正性それぞれに評価と根拠となる証拠が示され、証拠間の矛盾があれば、それを無理に整合させずに明記していること。
ステップ 9 — 調査結果を表現する
- 必ず、座標にメートル単位の半径を添えます。 小数点以下6桁の座標だけでは、実際には得られていない1メートル未満の精度を主張することになります。根拠となる情報の実際の限界から半径を導きます。メタデータに依拠する場合は
GPSHPositioningError、衛星画像との照合に依拠する場合は参照画像の解像度、視覚的な調査に依拠する場合は照合した特徴と整合する範囲の大きさを使います。 - カメラの位置と方位は、被写体の位置とは別に記載します。 それぞれ異なる場所ですが、報告書ではしばしば混同されています。
- 時刻は現地の時計時刻で範囲として記載し、太陽時から換算したかどうか、および適用した時差を明記します。
- 日付は1つまたは2つの期間として示し、2つ目の期間を除外した判別要素を明記します。除外できなかった場合は両方を報告します。
- 照合した具体的な特徴を列挙し、参照画像とその撮影日のリンクを添えます。
- 前提条件:想定した対象物の高さ、地面が平坦であるという仮定、使用した参照方位、使用した気象観測所を明記します。
- ステップ 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 に引き継ぎます。
完了条件 — 報告書が提出され、事件ファイルに元のハッシュと派生物の連鎖が保持され、明示された目的に不要になったデータが削除されていること。