Reading the data

どこまでが写真の記録で、
どこからがAIの読みか。

このページを読むと、応答のどの値を、どこまで頼りにしてよいかが分かります。みちよみは、写真の記録・決まった計算・AIの読み取りを混ぜずに返し、分からなかったことは分からないまま返します。

数字は 2026-10-03 に本番の応答で確かめたもの(release 2026-09-13-r1)。例の写真はどれも本番のデータです。

1件は写真1枚(シーン)

データの1件(シーン)は、写真1枚です。20m 四方のマス目・撮った向き(45°ごと)・撮影年ごとに代表の1枚を選んでいます。同じ場所でも、年や向きが違えば別のシーンになります。これが経年変化を比べる材料になります。

  • id は Mapillary の写真のIDです。数字に見えても文字列のまま扱ってください(数値にすると桁が落ちることがあります)。
  • 座標は写真を撮った位置で、写っている物の位置や建物の入口ではありません。Mapillary が写真の並びから補正した位置を基本にし(公開中の 1,914,451 件のうち 1,899,940 件)、無いときだけ GPS の生の値を使います。どちらかは position_source に書いてあります。
  • 処理した 1,914,490 件のうち、撮影時刻が明らかにおかしい 39 件は、近くを探す結果や数の集計から外しています(IDを指定すれば読めます)。

3つの層: 記録・計算・AIの読み取り

1枚の写真について、性質の違う3つを分けたまま返します。GET /v1/scenes/{id}?include=metadata,machine,analysis で3つとも取れます(既定は analysis だけ)。

観測metadata ・ 撮影の記録
  • 撮影日時・撮影年
  • 位置(補正後と生の両方)・カメラの向き
  • 連続撮影の並び・画質
計算machine ・ 決まった計算
  • 進む向き(前後の写真の位置から)
  • 写っている物の方角(北・南東…)
  • 色・緑の割合、季節・時間帯の区分
同じ入力なら必ず同じ値になります。
解釈analysis ・ AIの読み取り
  • 歩道・幅・舗装・標示のかすれ
  • 看板の文字・建物・植え込み
  • リスクの手がかり、見えなかったこと
推定で、項目ごとに確度が付きます。

層を混ぜないので、食い違いに気づけます。たとえば写真 964535250779795(2019年・中央区)は、撮影の記録では22時54分で、それをもとにした計算も「夜」ですが、AIは「日中」と読み、逆光で建物が白く飛んでいると書いています。撮影時刻は機器の時計しだいでずれるため、時間帯はAIの見立てを正としています(技術白書 3.2)。

引用するときは、どの層の値かを書いてください。一覧に出る summary は人が読むための要約です。プログラムで扱うときは、構造化された analysis を使ってください。

世代: どのAIが読んだか

どの言葉にも、それを書いたAIの系列と出力の決まりを表す世代(generation)が付いています。世代は品質の順位ではなく、来歴の札です。各件には、モデル名(model)・指示文の版(prompt_version)・作った日時(generated_at)も付いています。

世代読んだAI公開中の件数
gen2-qwen-local(既定)ローカルVLM(Qwen 系・自宅のGPU)1,836,775
gen1-codexクラウドVLM(GPT 系)77,676

既定では、1枚につき1つの世代の言語化を返します。特定の世代だけを見たいときは generation=gen1-codex のように指定します。世代の一覧は GET /v1/generations。

世代をまたいだ単純な比較に注意。gen2 には複数のモデル(Qwen3.6・Qwen3.8)と推論の設定が混ざっていて、歩道の「なし」「画角外不明」が出る割合に大きな差があります。原因はまだ分かっていません。同じ画像で比べて確かめるまでは、地域どうし・年どうしの単純な比較に使わないでください(技術白書 5章)。また gen1 には、高架の高速道路を「一般道路」とする系統的な誤りが見つかっています(gen2 では調整済み)。

確度と推定値

幅・車線数・距離などの数値は、写真1枚からの推定で、測った値ではありません。多くの項目に、根拠(evidence)と確度(confidence: 高・中・低)が付いています。一覧の要約では [high] [mid] [low] と書きます。全体の目安として confidence_overall(0〜1)もあります。

// 写真 1499911054492109(2025年・新宿区)の車道の幅。analysis.geometry から
"roadway_width_m": {
  "value": 4,
  "evidence": "駐輪している原付バイク(幅約0.7m)をスケール基準に、車道部(走行車線計)を推定",
  "confidence": "中"
}

確度はAI自身の見立てで、別に測った正解率ではありません。リスクの手がかり(risk_cues)も、写真から読んだ手がかりで、事故の統計や公的な安全の評価ではありません。

「なし」「不明」「画角外不明」

写っていないことを推測で埋めないように、AIには次の3つを分けて書かせています。

なし見えている範囲に無かった。
不明写ってはいるが、ブレや遮りで決められなかった。
画角外不明写真の外にあって、見えていない。

同じ新宿区の写真では、右側の歩道は「画角外不明」、路面のひび割れと点字ブロックは「不明」です。見えなかった範囲は off_frame、判断できなかったことは not_assessable に、理由と一緒に書いてあります。

"sidewalk": {
  "left":  { "presence": "あり", "type": "路側帯", "width_m": 1.5, "confidence": "中" },
  "right": { "presence": "画角外不明", "type": "該当なし", "width_m": null, "confidence": "低" }
},
"off_frame": ["道路の反対側(対向側の歩道・沿道)は画角外のため評価不可", …]

「不明」を「なし」と読み替えないでください。集計するときも、「不明」「画角外不明」を「なし」に数えないでください。通りと町丁目のカルテの率は、判定できた件数だけを分母にしています。

いつの様子か

  • 記述は撮影した年の様子です。すべての結果に撮影年(capture_year)が付いています。2019年の写真の記述を、いまの状態として語らないでください。
  • generated_at は文章を作った日時で、撮影日時ではありません。data_as_of はデータの版を固めた日です。
  • 撮影年は1986〜2026年ですが、99.8%は2014年以降です(それより前は 3,660 件)。古い年のもの、とくに2010年より前のものには、撮影機器の時計がずれた記録が混ざりやすくなります。
  • 23区は複数の年の写真を収録し、多摩・島しょは最新の年が中心です。

被覆: 写真がある場所だけ

みちよみは、市民が撮って Mapillary に公開した写真から作っています。だから、写真がどこにどれだけあるかは、撮った人がどこを歩き・走ったかで決まり、場所によって大きく違います。

答える前に GET /v1/coverage で収録を確かめてください。たとえば銀座四丁目の交差点から半径300mには 2,312 枚あり、撮影年は2010〜2026年に分かれています。0件は「撮影がない」という意味で、「何もない」「変わっていない」ではありません。近くを探す結果で candidate_truncated が true のときは、候補を途中で打ち切っています(打ち切られるのは中心から遠い側です)。

通りと町丁目のカルテ

写真1枚ずつの読み取りを、通り(線)と町丁目(面)の単位に集めて、文章にしたものです。

通り
OpenStreetMap の道路を交差点で切った区間(写真15枚以上)を、同じ名前・同じ区市町村でまとめたもの。street_id で引きます。名前の無い道は、区間(edge_id)ごとの数値だけです。
町丁目
国勢調査2020の小地域。town_key で引きます。
書き方
集計(素材束 profile)だけを材料に文章を書き、数値・年・固有名が素材束にあることを機械で確かめています。素材にないことは書きません。
率
歩道がある割合などは、判定できた件数が分母です(judged。判定できた割合は judged_rate)。複数の年をまとめた数で、いまの様子ではありません。year_span を添えてください。
両側
通りの両側は「北東側」のような方角で書きます。前や後ろを向いた写真だけから作るので、件数が少ないことがあります。
版
本文を書いたモデルと指示文の版は karte_provenance。ほかのモデルで書いた版は karte_versions にあり、include=versions で本文ごと取れます。どの版も同じ素材束と同じ機械の確かめを通っています。

被覆等級

写真の量と広がりの目安です。等級Dには文章のカルテがなく、数値だけを include=profile で読めます(規則は応答の profile.coverage.rule)。

等級通り(すべて満たす)町丁目(すべて満たす)カルテ
A写真100枚以上・撮影の走行5本以上・延長の6割以上に写真写真300枚以上・走行10本以上・車道の延長の4割以上に写真あり
B写真40枚以上・走行3本以上・延長の4割以上写真100枚以上・走行5本以上・車道の延長の25%以上あり
C写真15枚以上・走行2本以上写真30枚以上・走行2本以上あり
Dそれより少ないそれより少ないなし(数値だけ)

いまの版(la_release 2026-10-03-la2)には、通り 6,248(うちカルテあり 3,563)、町丁目 5,256(うちカルテあり 4,734)、道路の区間 30,362 があります。

区全体より幅の広い複数車線の車道が北西へ延び、両側に高層のオフィスビルやマンションが並ぶ通り。晴海通り(中央区)のカルテの書き出し。被覆A、写真1,739枚・2013〜2026年の記録から。GET /v1/streets/799

経年変化: 崩れなかったものだけ

同じ場所を別の年に撮った写真を比べて見つけた「変わった」という主張のうち、反証を試みても崩れなかったものだけを収録しています。

  1. 比べる組を選ぶ同じ道路のまとまりで、向きが合う別の年の写真の組を、機械的に選びます。
  2. 違いを書くAIに、2つの時点で何が変わったかを書かせます。
  3. 崩しにいく文脈を切り離した別のAIセッション(同じモデル系列)に、その主張を「反証する」つもりで確かめさせます。
  4. 残ったものだけ収録崩れなかった主張(supported)だけを API に入れます。
2,522supported(収録)
112refuted(反証された・収録しない)
26unverifiable(確かめられない・収録しない)

公開中の第1パスの 2,660 件の主張の内訳。残った割合は 94.8% です。

限界も一緒に。見つける側と確かめる側は同じモデルの系列(どちらも gpt-5.6-sol)で、独立した第三者の確認ではありません。系列に共通する誤りは残りえます。残った割合は「正解率」ではなく、「反証に耐えた割合」です。
  • 座標は道路のまとまりの中心で、変わった物の位置ではありません。
  • segment_priority_score は道路区間の点検の優先度の目安で、変化そのものの危険度ではありません(多くは null)。
  • 根拠にした写真のID(scene_ids_a・scene_ids_b)は元のデータに無いため、いまの版ではすべて null です。根拠の文章(evidence)の全文は GET /v1/changes/{change_id} で読めます。

2017年は赤枠の角形板にタクシー図柄と「22-1」および左右矢印が見えるが、2026年は円形のタクシー関連規制標識、その下の「22:00-1:00」補助標識、さらに左右矢印の補助板へ変更されている。GINZA SIX 前のタクシー関連標識(設備・2017→2026)の根拠から抜粋。GET /v1/changes/chg_4424424a5b4f

安定度: 同じ写真を2回読ませると

同じ写真 36,479 枚を同じ条件でAIに2回読ませ、答えが一致した割合です。正解率ではなく、読み取りのぶれの少なさを表します。

  • 撮影条件(天候・時間帯)95%超
  • 道路の種別85〜90%
  • 歩道の有無75%
  • 幅員の完全一致57%

幅の値がそっくり同じになるのは6割弱です。1枚の写真の数値を決め手にせず、近くの何枚かや、通り・町丁目のカルテの傾向と合わせて読んでください。

設備(自販機・トイレ・ベンチ)

AIの記述に自販機・トイレ・ベンチが写っていた撮影地点を、近い順に返す機能もあります(GET /v1/amenities/nearby)。座標と距離は写真を撮った位置のもので、設置された位置・いまあるか・使えるかは確かめていません。私有地の中や、施設の利用者向けのものが含まれることもあります。

使うときの5つ

  1. 撮影年を添える(capture_year)。いまの様子として語らない。
  2. 数値は推定として扱う。断定しない。
  3. 0件は「撮影がない」。先に coverage で確かめる。
  4. 「不明」を埋めない。「なし」「不明」「画角外不明」を分けたまま使う。
  5. 出典は義務ではない。回答や表示には要りません。データとして配り直すときの書き方は出典・ライセンスへ。