How it works

写真が、
確かめられる言葉に
なるまで。

市民が撮った東京の街路写真 1,914,490枚を、AIが1枚ずつ読み、通りや町丁目にまとめ、年ごとに比べて公開しています。どこまでが撮影の記録で、どこからがAIの推定か。読み違いをどう扱っているか。9つの図で、順に説明します。

図の数字と実例は、本番のAPI(release 2026-09-13-r1)と、公開している資料から取っています。

01Source

素材は、市民が撮って
公開した街路写真。

写真は、市民や事業者が撮影して Mapillary に公開したものです(CC BY-SA 4.0)。東京都全域から、同じ場所・同じ向き・同じ年の写真を代表の1枚に絞り、1,914,490枚を読みました。

1枚の選び方模式図

2019年 2024年 読まない写真 ます目 20m 分け方 20m四方のます目 × 向き(45°ごとの8方向) × 撮影年 それぞれ代表の1枚 2019年・右向き 2024年・右向き 2019年・左向き 7枚から3枚を読む

撮影年ごとの枚数撮影時刻が異常な39枚を除く 1,914,451枚

表で見る
撮影年枚数
2013年以前(1986〜2013年)3,660
2014年2,198
2015年7,619
2016年67,330
2017年69,432
2018年176,355
2019年220,163
2020年187,194
2021年254,972
2022年253,694
2023年272,682
2024年159,434
2025年150,318
2026年(集めた時点まで)89,400
左: 20m四方のます目に入った写真を、撮った向き(45°ごとの8方向)と撮影年で分け、それぞれ代表の1枚だけを読みます。右: 読んだ写真の撮影年。2013年以前の3,660枚は左端の1本にまとめました。2026年は集めた時点までの数です。

同じ場所でも、年が違えば別の1枚

代表の1枚は、ます目・向き・撮影年の組ごとに選びます。同じ交差点を別の年に撮った写真は別々に残るので、あとで年どうしを比べられます(07 時間)。

東京都全域。ただし、濃い所と薄い所がある

23区が約74%(1,408,888枚)、多摩が約24%(463,445枚)、島しょが約2%(37,935枚)。23区は過去の年の写真も含み、多摩・島しょは最新の年が中心です。撮影されていない道はデータになく、0件は「撮影がない」という意味で、「何もない」ではありません。

記述は、撮影した時点の様子

撮影年は1986〜2026年で、99.8%は2014年以降です。2013年以前の写真には、カメラの時計がずれたものが混ざっている可能性があります。どの記述も撮った時点の様子で、いまの状態ではありません。

出典: 公開データ release 2026-09-13-r1。区市町村ごとの枚数と撮影年の注記は Hugging Face のデータセット説明、撮影年ごとの枚数は同じ版のデータベースの集計(2026-09-17)から。

02Three layers

観測・計算・解釈を、
混ぜずに持つ。

1枚の写真について、性質の違う3つの層を別々に持ち、別々に返します。どこまでが事実で、どこからがAIの推定かを、読む人の注意に頼らず、データの形で分けるためです。

撮影の記録日時・位置・向き そのまま記録する 観測metadata 撮影日時 位置(Mapillary が補正) カメラの向き・写真の大きさ 写真の外の事実
撮影の記録と画素日時・向き・写真の色 決まった手順で計算 計算machine 季節・時間帯(日時から) 方角(カメラの向きから) 緑の割合・色(画素から) 同じ入力なら、いつも同じ値
写真だけ画像1枚 地図・住所・地名 過去の結果 AIには渡さない AIが写真を読む 解釈analysis 道の構造・歩道・舗装・看板 建物・危険の手がかり など 推定には確度と根拠を付ける 推定を含む(読み違えうる)

1枚の写真ごとに、3つの層を別々に返します。APIでは include=metadata,machine,analysis で選べます(何も指定しなければ解釈の層だけ)。

AIに渡すのは写真だけです。地図・住所・地名・過去の結果は渡しません。だからAIの記述は、あとで地図や公的なデータと突き合わせるときに、独立した材料になります。

本番のAPIから: この1枚の3つの層

渋谷区の細い一方通行の通り。両側に緑色の路側帯があり、右手前の電柱に「通学路」の表示、左手前に歩行者(ぼかし済み)が写っている
2018年撮影渋谷区読んだAI: クラウドVLM
© Mapillary contributors
観測metadata
  • 撮影日時2018-03-10 14:05
  • 位置Mapillary の補正位置GPSの値との差 3.7m
  • カメラの向き151°
  • 写真1920×1080

写真の外の事実(撮影の記録)

計算machine
  • 季節・曜日春・土曜撮影日時から
  • 時間帯昼(14時台)
  • 方角カメラは南東向き写真の左手は北東、右手は南西
  • 緑の割合3.0%画素から

同じ入力なら、いつも同じ値

解釈analysis
  • 車道の幅約3.2m確度 低中央走行部は普通車幅1.7〜1.8mの約1.8倍に見え、両側の緑色帯を除いた概算。
  • 歩道左右とも路側帯 約0.45m確度 低
  • 撮影条件晴・日中・季節は「不明」
  • 看板など右手前・約3mの「宇田川町11」「通学路」表示

読んだAI: クラウドVLM(gpt-5.6-terra)

層を分けておくと、食い違いに気づけます。 この写真の季節は、計算の層では「春」(3月の撮影なので)、解釈の層では「不明」。AIは写真から季節を決めきれず、埋めませんでした。

撮影の記録の側が間違うこともあります。カメラの時計がずれて、真昼の写真が23時台と記録されていた例があったため、時間帯は記録よりAIの見立てを優先しています。

方角は、AIに推測させない

写真の中に北は写っていません。AIには「右手前」のように画面の中の位置だけを書かせ、方角は撮影の向きから計算します(例: 右の電柱 → 南西)。

計算の層は、突き合わせの物差し

決まった手順なので、何度計算しても同じ値です。AIの「並木が続く」という記述と緑の割合がそろえば、記述の確からしさをデータの中で確かめられます。

書かせないことも決める

人や車の数のように、すぐ変わるものは数えさせません。設備・構造・路面など、時間がたっても変わりにくいものを中心に書かせています。

03Provenance

全件に、
名札が付いている。

どの写真を、いつの撮影で、どのAIが読み、どの版として公開したか。1,914,490件すべてに同じ形の名札を付けています。引用するときも、あとから確かめるときも、名札から元の写真まで遡れます。

名札の中身02 の写真の実物(本番のAPI)

名札 1件ごとに付く 元の写真id 1580655655467339 → Mapillary 撮影capture_year 2018年(2018-03-10) 読んだAI(世代)generation・model クラウドVLM・gpt-5.6-terra データの版snapshot 2026-09-13-r1 位置の出どころposition_source Mapillary の補正位置 利用の条件license 観測データは CC BY 4.0

読んだAIの内訳検索の対象 1,914,451件

ローカルVLM1,836,775gen2-qwen-local ・ 95.9% クラウドVLM77,676gen1-codex ・ 4.1%

ローカルVLM: 自前のGPUで動かす Qwen系(Qwen3.8-27B・Qwen3.6-27B)。クラウドVLM: GPT系(gpt-5.6-terra・gpt-5.6-sol)。VLM は、画像を読むAIのことです。

  • 世代は、品質の順位ではなく「どこから来たか」の札です。配信に使う前に、前の世代との比べ合わせなどの関門を通しています。
  • 過去の読み取りは捨てず、上書きもしません。モデルを替えても、どの記述がどの世代のものかを区別できます。
  • 同じ世代でも、条件はすべてそろってはいません。ローカルVLMの世代には複数のモデル・設定が含まれ、とくに歩道の「なし」と「画角外不明」の出方に差があります。地域や年を単純に比べる前に確かめが必要です。
名札の値は、02 の写真(渋谷区・2018年撮影)の応答から取っています。APIの応答には毎回 snapshot(データの版)と license(利用の条件)が付くので、どの版に問い合わせた結果かを後から特定できます。

撮影時刻がおかしい写真は外し、外したことも公開する

撮影日時が1970年になっているなど、明らかに異常な39枚は、検索と集計から外しています。IDを指定すれば取り出せ、外した件数は /v1/meta で公開しています。

位置の出どころも書く

位置は、Mapillary が写真の重なりから計算し直した値を使い、それがないときだけGPSの値を使います。どちらを使ったかを1件ごとに記録しています(99%以上が計算し直した位置)。

04Honesty

推定は推定と書き、
見えないものは埋めない。

AIは読み違えます。だから、AIへの指示の段階で「埋めない」ことを決めています。分からないことは分からないまま、写っていないことは写っていないまま返します。

写っている範囲と、答えの4つの状態02 の写真を上から見た模式図

写っている範囲 撮影位置 あり 路側帯(左右)約0.45m・確度 低 なし 点字ブロック 不明 人に隠れた左手前の路面 画角外不明 道路奥の交差道路 画角外不明 建物の背後

この写真での答え本番のAPIの値

  • あり路側帯(左右とも)写っていて、ある。幅は約0.45m(確度 低)
  • なし点字ブロック、自転車の通行帯の記号写っている範囲に、無いことを確かめた
  • 不明夜間照明の点灯状態、左側手前の路面・歩道状態、微細な舗装損傷写っているはずだが、暗い・隠れている・細かすぎるなどで確かめられない
  • 画角外不明道路奥の交差道路、左右建物の背後そもそも写っていない

数値には、根拠と確度を付けます。 車道の幅は「約3.2m・確度 低」。根拠は「中央走行部は普通車幅1.7〜1.8mの約1.8倍に見え、両側の緑色帯を除いた概算。」 物差しにした物を書かせ、測った値ではないことを確度で示します。

AIへの指示では、「なし」(写っている範囲で無いと確かめた)、「不明」(暗い・隠れている・画角の外で確かめられない)、「該当なし」(その場所には当てはまらない)を分けさせ、道の反対側など写っていない所は「画角外不明」とします。斜線は写っていない所です。

埋めるための創作をしない

判断できない項目は「不明」のまま返します。ありそうだからと、写っていないものを埋めることはさせません。夜や逆光で評価できない項目は、評価できないと書かせます。

数値には物差しを書く

幅などの推定には、物差しにした物(普通車の幅、横断歩道の白線、ブロック塀の目地など)と確度(高・中・低)を必ず付けます。どれも画像からの推定で、測量の値ではありません。

一時的な物は分ける

駐車車両・コーン・工事などは、恒久的な物と分けて書きます。人や車の数は数えません。どの記述も撮影した時点の様子です。

使うときの約束(データの読み方より)。このデータは、いまの状態や安全性を判定するものではありません。

  • 撮影年を添える。2019年の写真の記述を、いまの状態として語らない
  • 数値は推定として扱い、断定しない
  • 0件は「撮影がない」。まずその場所の被覆を確かめる
  • 「不明」を推測で埋めない
05Stability

同じ写真を2回読ませて、
ぶれを測った。

全件の正解を確かめることはできません。そこで、同じ写真を同じAI・同じ指示で2回読ませ、答えがどれだけ一致するかを項目ごとに数えました。これは正解率ではなく、読み取りの安定度です。

測り方

同じ写真 36,479枚 1回目の答え 2回目の答え 同じAI・同じ指示 temperature 0 項目ごと に比べる 例: 歩道(左) 1回目「あり」、2回目「画角外不明」→ 不一致

項目ごとの一致率同じ答えになった割合(正解率ではない)

表で見る
項目一致率補足
天気98.1%晴・曇・雨など
撮影手段96.8%車・徒歩・自転車など
舗装の種類94.1%アスファルト・ブロックなど
道の種別88.4%一般道路か、自動車専用道路か
道の構造85.6%平面か、高架・橋の上か
通学路の標識80.3%あり・なし・不明
歩道の有無75.3%左側。右側は76.8%
ひび割れの程度72.1%「不明」と「該当なし」の行き来が多い
車道の幅57.3%数値が完全に一致した割合。差の平均は0.9m
2026年9月、23区の過去の年の写真36,479枚(江東区・新宿区)を、同じモデル(Qwen3.8-27B)・同じ指示・ゆらぎを抑えた設定(temperature 0)で、サーバーの設定だけが違う2台が1回ずつ読んだ結果です。多摩の過去の年の写真217,699枚でも、同じ程度でした。

写真から直接読める項目は、よくそろう

天気 98%・撮影手段 97%・舗装の種類 94%。道の種別や構造も 86〜88% がそろいます。

割れるのは「見える・見えない」の境目

歩道の有無は 75%。食い違いの多くは「画角外不明」「不明」との行き来で、「ある」と「無い」が正反対に入れ替わったのは、左の歩道で 166枚(0.5%)でした。

数値と文章は、もっと揺れる

車道の幅が完全に一致したのは 57%(差の平均 0.9m)。自由に書いた文章は、毎回ちがう言い回しになります。2回とも同じように間違えることもあるので、一致しても正しいとは限りません。

06Lines & areas

写真の点を、
通りと町丁目にまとめる。

1枚ずつの読み取りを、通り(線)と町丁目(面)の単位に集め、その集計にあることだけを文章(カルテ)にしました。写真が少ない所には、文章を付けません。

外す

1道に当てはめる写真を、交差点で区切った道(辺)に当てはめます。向きが合い、25m以内のものだけ。

通り 辺をつなぐ 町丁目 国勢調査2020

2通りと町丁目にまとめる写真が15枚以上ある辺を、同じ名前・同じ区市町村でつないで「通り」に。町丁目は国勢調査2020の区域です。

晴海通りの歩道(3,478側) 判定できた 1,906 画角外など 1,572 歩道あり 98% 分母は判定できた1,906側

3分母つきで数える率は「判定できた数」を分母にします。写っていない側は数に入れません(図は晴海通りの歩道)。

1,906 2013〜2026年 LAWSON 集計にない数 → 書き直し

4書いて、照らし合わせる集計だけを渡して文章を書かせ、数値・年・固有名が集計にあるかを機械で確かめます。合わなければ書き直し。

被覆等級と、文章の有無本番の集計(2026-10-03)

表で見る・等級の決め方
ABCD(文章なし)合計
通り1,3949361,2332,6856,248
町丁目1,4741,5521,7085225,256
等級通り町丁目
A写真100枚以上・撮影の走行5本以上・延長の60%以上に写真写真300枚以上・走行10本以上・車道の延長の40%以上
B40枚以上・3本以上・40%以上100枚以上・5本以上・25%以上
C15枚以上・2本以上30枚以上・2本以上
DC に届かない。文章は付けず、数値だけを返す

数

  • 通り 6,248本のうち、文章があるのは 3,563本
  • 町丁目 5,256のうち、文章があるのは 4,734
  • どの通り・町丁目も、根拠にした写真のIDまで遡れます
  • 率は判定できた件数が分母で、複数の年をまとめた値です。いまの状態ではありません
等級は、写真の枚数・撮影の走行の本数・道の延長のうち写真がある割合で決めます。A〜C には文章(カルテ)を付け、D は数値だけを返します。

本番のAPIから: 通りのカルテ

晴海通り(中央区)写真 1,739枚・2013〜2026年
等級 A

区全体より幅の広い複数車線の車道が北西へ延び、両側に高層のオフィスビルやマンションが並ぶ通り。

判定できた1,906側のうち約98%に車道と分離された歩道があり、ひび割れはまれで、歩道通行可の標示や自転車の専用通行帯が写っている。無電柱化の率は約23%で、区全体より低い。

来歴: opus55-v12-xhigh・2026-09-24 / 被覆はA(2013〜2026年、写真1,739枚・走行121本、延長の100%)。

文章は、集計の中だけから書く

カルテは、言語モデルに集計(素材)だけを渡して書かせています。写真そのものも、地図も見せません。文中の数値・年・固有名は、集計にあるかを機械で確かめ、通ったものだけを載せています。

どのモデルが、どの指示文で、いつ書いたかも記録しています。町丁目のカルテは、たとえば銀座四丁目(/v1/areas)。

07Time

変化は、崩しにいって
残ったものだけ。

同じ場所の年の違う写真を比べ、「変わった」と言えるものを探します。視点が数メートルずれたり季節が違ったりするだけで変わって見えるため、いちばん読み違えやすい作業です。そこで、見つけた変化を別のAIセッションに崩しにいかせ、崩れなかったものだけを載せています。

2022 2026 同じ区間・違う年 (2年以上離れた年)

1組にする同じ区間を、2年以上離れた年に撮った写真を組にします。向きが比べられるものだけ。

AI ① 変わった点を書く 例: 青い矢印状の表示が加わった

2違いを書き出すAIが2つの年を見比べ、変わった点を根拠つきで書き出します。

AI ② 別のセッション 本当に同じ場所? 視点や季節の違い ではない? → 反証を試みる

3崩しにいく文脈を分けた別のセッションのAIが、「本当に同じ場所か」「視点や季節の違いではないか」と反証を試みます。

崩れなかった→ 収録する 崩れた→ 載せない ? 判定できない→ 載せない 2,522 112 26

4残す反証に耐えた変化だけを収録します。崩れたものと、判定できないものは載せません。

確かめ役にかけた 2,660件の行き先

2,522崩れなかった(supported)・94.8% → 収録
112崩れた(refuted)・4.2%
26判定できない(unverifiable)・1.0%
確かめ役にかけたのは、比べた組のうち「同じ区間であること」と「変化の確かさ」がともに高いと判断した2,660件(第1パス)です。そのうち崩れなかった 2,522件を公開しています。

本番のAPIから: 中央区の交差点

2022年の交差点。横断歩道と車線の標示は白だけ
2022年
© Mapillary contributors
2026年の同じ交差点。交差点の中から先の車線へ、青い矢印状の表示が並ぶ
2026年
© Mapillary contributors

この交差点で残った変化

  1. 区画線・標示交差点内および交差点先の進行方向案内標示2022 → 2026
  2. 沿道用途OSADA縦看板がある建物の1階中央寄り店舗2022 → 2026
  3. 区画線・標示交差点付近の横断歩道・停止線などの白色路面標示2022 → 2026
2022年の第3画像では、左手前の丸みを帯びた建物脇の交差点から交差点先にかけて、横断歩道・車線境界・進行方向矢印はいずれも白色で、青色の矢印状誘導表示は見当たらない。対応する2026年の第6画像では、同じ丸みを帯びた建物前の交差点内から進行先の車線に青色の矢印状表示が複数連続している。

AIが書いた根拠の原文(1件目)。位置は変化した物そのものではなく、道のまとまりの中心です。

この確かめ方の限界。見つける役と確かめる役は、同じ系列のモデル(gpt-5.6-sol)の別セッションで、独立した第三者の検証ではありません。系列に共通するくせは残りえます。94.8%は正解率ではなく、反証に耐えた割合です。どれも撮影年どうしの比較で、いまの状態を保証するものではありません。

08Open

同じ版のデータを、
3つの入口から。

どの入口も登録・APIキーは不要で、読み取り専用です。観測データは CC BY 4.0 で、AIの回答・アプリの表示・転記に出典は要りません。データとして配り直すときだけ出典を表示します。写真そのものは撮影者の CC BY-SA 4.0 です(出典・ライセンス)。

データの流れ

写真 Mapillary ・ CC BY-SA 4.0 読む・まとめる・比べる IDで元の写真へ 公開データ 版 2026-09-13-r1 ・ どの入口も同じ版 API1地点ずつ引く登録不要 MCPAIの会話から11のツール データセットまとめて分析Hugging Face 観測データは CC BY 4.0。回答や表示に出典は不要

試してみる02 の写真の3つの層を取る・AIエージェントにつなぐ

curl "https://michiyomi.dev/v1/scenes/1580655655467339?include=metadata,machine,analysis"
claude mcp add --transport http michiyomi https://michiyomi.dev/mcp

1つのIPから、APIは1分あたり300回、MCPは120回まで。稼働の保証(SLA)はありません。MCPのツールの説明には、答える前に「その場所にデータがあるか」を確かめる手順が入っています。

データに画像そのものは含めません。写真のIDから Mapillary の元の写真へ戻れます。データセットは研究・分析のための一括配布で、APIとは更新の時点が違うことがあります。
登録不要・読み取り専用

API

座標・通り・町丁目・経年変化を引ける REST API。OpenAPI の定義もあります。このサイトの画面も、同じデータで動いています。

APIリファレンス →
AIエージェントから

MCP

Claude などのAIエージェントから、会話の中で街の様子を引けます。ツールは11個(被覆の確認・地点の描写・写真1枚・通り・町丁目・経年変化など)。

AIから使う →
CC BY 4.0

データセット

Hugging Face で Parquet 形式の一括配布。区市町村ごとのファイルで、3つの層と名札がそろっています。

Hugging Face ↗
09Next

次の手順:
言語化モデル OddEye 0.1

街路写真1枚を、見えたもの(観測)と推し量ったこと(解釈)に分けて書く、みちよみ専用のモデルを実験版として公開しました(2026-10-03、Apache-2.0)。いまの公開データは、これまでの本番の手順で作ったもので、OddEye では作っていません。

いまの公開データと、OddEye の関係

いま公開しているデータ 写真 本番の手順 ローカルVLM クラウドVLM 公開データ 1,914,490件 公開データには まだ使っていない 次の手順(実験) 写真 OddEye 0.1 GPU 1枚・約20GB 観測見えたもの 解釈(確度つき)推し量ったこと 13項目の観測(日本語のJSON)
OddEye Apache-2.0・実験版
書くもの
写真1枚 → 13項目の観測(日本語のJSON)。見えたもの と 推し量ったこと を分け、推し量ったことには確度を付けます。
土台
Qwen3.8-27B(Apache-2.0)。重みも Apache-2.0 で、出力の使い方に条件はありません。
大きさ・速さ
4bit に縮めて約20GB(元は約52GB)。市販のGPU 1枚(RTX 5090)で、1枚あたり中央値27.5秒。
作り方
元のモデル自身の出力400件を手本に、4bit に縮めたときの誤差を模擬しながら学習。外部のAIサービスの出力は使っていません。
評価
100枚を、どのモデルの出力か伏せて比較しました。一般に配られている4bit版より、断定のしすぎと明らかな誤りが少ない一方、元のモデルより参照との食い違いが2.0ポイント多く、車線数・歩道などの基本的な配置と小さな文字は元のモデルより弱い結果です。採点と参照はAIによるもので、モデル同士の比較として読むものです。
これから
本格版は、次の世代のモデルで作る予定です。ねらいは、自治体や団体が自分の地域を自分の機材で読めるようにすることです(構想)。
ここでの「観測」「解釈」は、AIの読み取り(02 の3つの層では「解釈」の層)の中を、見えたものと推し量ったことに、さらに分けたものです。