言葉がつくる街
HOW IT WORKS — MICHIYOMI × PLATEAU × LOOVIC

言葉は、どうやって
街になったのか。

街路写真から AI が読んだ言葉を、書き換えずに分解し、PLATEAU の地物IDに結び、意味ごとに分けて素材と物にし、最後に歩いた人の声を重ねる。新橋西口で動いている、そのしくみのすべて。

🏆 グランプリ ・ オーディエンス賞 — PLATEAU Hack Challenge 2026 in TOKYO(主催: 国土交通省、2026年9月26〜27日)· チーム: みちよみ × LOOVIC

SCROLL ↓
00
OVERVIEW

写真 → 言葉 → 地物ID → 街

使っているのは、すでにある3つのデータだけです。みちよみ(街路写真を AI が読んだ言葉)、PLATEAU(国の 3D 都市モデル。地物ごとに ID を持つ)、LOOVIC(その場を知る人の声)。この3つを、PLATEAU の地物IDという共通の住所に結びます。

INPUT街路写真

Mapillary
CC BY-SA 4.0

みちよみ→VLM が読む
01 READ言語化 JSON

1枚 = 1件。看板・建物・歩道・危険…

02→分ける
02 SPLIT記述

振り分け先・左右・距離・出典の JSON Pointer

03→記号を選ぶ
03–04 LINKPLATEAU gml:id

建物・道路・都市設備・街路樹。CityGML に書き戻す

05–06 →
6つの意味に分け、素材・部品を選び、地物の面に字として書く
07 →
LOOVIC の声を、補正した位置で同じ地物に重ねる
文は書き換えない

元の言語化の文と値をそのまま使う。地物の上では意味のない「(右・約15m)」のような位置の注記だけを外す。

AI は選ぶだけ

紐づけでは、VLM に文を書かせない。写真に重ねた記号から「どの地物の話か」を選ばせ、その確率を残す。

無いものは描かない

街の姿は「言葉から描いた想像図」。言葉の無い壁に窓や店を描かない。素材の語が書かれた壁だけをその素材にする。

01
READ — MICHIYOMI

写真1枚を、AI が言葉と値で読む

みちよみは、街路写真1枚ごとに VLM が書いた構造化 JSON です。約191万場面(東京を中心)。看板の文字、建物の種類と見た目の階数、歩道の幅、舗装、危険の手がかりまで、文と数値で持ちます。例は、2026年9月27日朝のごみ回収の実録が始まった場所、新橋のファミリーマート前。

新橋のファミリーマート前の街路写真
分からないことは「不明」と書く。 この写真では点字ブロックが判定できず、tactile_paving.present = "不明" とし、needs_close_inspection(近くで確かめる項目)に残しています。推定の値には必ず確からしさ(高・中・低)が付きます。
みちよみ JSON(場面 )— DB の値そのまま
02
SPLIT — STATEMENTS

JSON を「どの地物の話か」で分ける

1件の JSON を、PLATEAU の地物に振り分けられる単位の記述に分けます。文面は元の値をつないだだけ。記述ごとに振り分け先の種類(建物・都市設備・街路樹・植樹帯・歩道部・車道部)、左右、距離、そして元の JSON のどこから来たかを示す JSON Pointer を持ちます。(mlink/statements.py)

記述にカーソルを合わせると、左の JSON の元の場所が光ります。

振り分けの規則(上から最初に当たったもの)

記述の言葉振り分け先
看板・店名、建物の種類・階数・外装建物
信号・街灯・標識・電柱・柵・消火栓・マンホール・横断歩道都市設備(LOD3)
街路樹・高木・ケヤキ・イチョウ…街路樹
植栽帯・植え込み・分離帯・交通島植樹帯・島
歩道の幅・段差・縁石・点字ブロック・車いす歩道部(左右)
車線・標示・舗装・ひび・駐車・見通し車道部

危険・不具合の手がかりも同じ規則で、その原因の地物へ振り分けます(「根上がり」→ 街路樹、「駐輪で歩道が狭い」→ 歩道部)。写真の中の位置の言葉(右・左・正面)と距離(約15m)は、次の紐づけの手がかりになります。

03
LINK — MLINK

写真に PLATEAU を重ね、AI は記号を選ぶだけ

「右の看板」がどの建物かを決めるのに、AI に文章を書かせません。写真の画角に PLATEAU を描いて候補の地物に記号を重ね、VLM には「この記述が指す記号」を選ばせるだけにします。答えは英字1文字に制限し、出力の確率から選択肢ごとの確からしさを出します。

  1. 撮影位置と向きを補正する

    Mapillary の SfM 補正後の位置・方位を、写真の建物の見え方と PLATEAU の建物が重なるように合わせる(方位 ±30°、横 ±6m、前後 ±4m。効いたときだけ使う)。

  2. 画角に PLATEAU を描き、候補を出す

    建物ごとに色の違う「建物IDの画像」を描き、写っている地物と、左右・距離から見た幾何の確率を作る。

  3. 候補に記号 A〜G を重ねる

    写っていない・該当しないときの逃げ道として Z も必ず入れる。

  4. VLM は記号を選ぶだけ

    出力を JSON Schema で英字に制限し、トークンの対数確率を選択肢の確率にする。文は生成しない。

下の記述を押すと、写真の記号と候補が連動します。

候補の建物に記号 A〜G を重ねた写真(VLM に見せたもの)
VLM に見せた写真そのもの(896×672)。A〜G = PLATEAU の建物。写真 © Mapillary contributors (musashino5), CC BY-SA 4.0

採る・採らないの規則

26 / 30
徒歩の場面の目視確認で、判定できた紐づけのうち正しかった数

車・自転車からの写真は目視で15件中4件と悪かったため、確率0.9以上だけを採る。少数の目視なので「確かめた範囲では」の数字です。

04
GATHER — PER FEATURE

地物IDごとに束ね、CityGML に書き戻す

結んだ記述を地物IDごとに集めます。同じ店の看板を別々の撮影列で読んでいれば多数決でそろえ、歩道の幅のような値は中央値・最小・最大・観測数に。こうして、PLATEAU の形に「その場所がどう見えるか」という言葉の層が付きます。

紐づけの方法()

結んだ地物

言語 LOD — 記述の細かさを、形の LOD と同じ梯子で

1
2
3
建物
全体(種類・階数・築年・外装)
―
看板・店名(店先の手がかり)
都市設備
街路樹
存在と種類
状態・属性(摩耗・点字ブロックの状態)
不具合・危険の具体的な手がかり
歩道・車道
存在・通りの文脈
幅・舗装・標示・段差
不具合・危険の具体的な手がかり
CityGML 2.0 — 汎用属性「みちよみ」を差し込んだ建物記号 G のビル

      

結んだ地物だけを元の CityGML から抜き出し、gen:genericAttributeSet name="みちよみ" を CityGML 2.0 の順序どおりに差し込む。値は gen:doubleAttribute などの数値属性になるので、PLATEAU VIEW や QGIS で条件にかけられる(GeoJSON も出力)。

05
MATERIALIZE — CATEGORY → MATERIAL

意味ごとに分け、言葉が素材と部品を選ぶ

地物の言葉を6つの意味に分けます。そして、文に書かれた素材と色の語から CC0 の素材を選んで色を合わせ、建物の種類と1階の業態から部品を選びます。画像は生成していません。

「左側の茶色系タイル張りの高層ビル」
/townscape/buildings/1 → 記号 A の建物
→
タイルの素材素材「タイル」
+
色「茶」
=
茶に色を合わせたタイル
ambientCG の CC0 素材を、言葉の色に合わせる

言葉で選ぶ部品 —

建物の種類(マンション・オフィス・住宅・ホテル・工事中)と1階の業態(コンビニ・飲食・居酒屋・医院・美容…)の語で選ぶ。部品は GPT-6 Pro が Blender MCP で Blender を操作して作った自作モデル。外部の3D素材は使っていない。

PLATEAU の形だけ 言葉から描いた想像図
形だけ(PLATEAU)
言葉から描いた想像図
言葉が無ければ描かない

06
INSCRIBE — THE OPENING

字が一粒ずつ、その地物の面へ飛ぶ

導入「言葉がつくる街」は、この一連の流れを約67秒で見せます。約14万字の一字一字が、自分の文が結ばれた地物の面を知っていて、そこへ飛び、PLATEAU の形を下から書いていきます。

ENGINE 1

1字 = 1インスタンス、場所を2つ持つ

A言葉の地平
(街を囲む円筒)
→
B地物の面
(壁・道・根元)

字は 15万 個のインスタンス。それぞれが「地平の位置」と「自分の文が結ばれた地物の面の位置」を持ち、1回の描画で出す(M4 Max で毎秒60コマ)。

ENGINE 2

画面は時刻だけで決まる

動きは頂点シェーダーが時刻の値だけから計算する。だから一時停止・章の飛ばし・巻き戻しが自由。

uType 打たれるuLand 飛ぶuColorR 意味の色uLift 層に分かれるuReveal 素材になるuNight 灯る
ENGINE 3

使う字だけの SDF アトラス

文に出てくる 1,239 字だけを、閲覧者のブラウザのフォントから距離場(SDF)にして 1 枚の画像に詰める。フォントファイルは配らない。ゴシック=みちよみ、明朝=人の声、等幅=ID。

PLACE 1 · BUILDING

壁の帯を、開けた面から

PLATEAU の壁の多角形(LOD2)を高さごとに切って帯にし、次の壁まで最も遠い「開けた面」から反時計回りに文を流す。文が多いほど帯の間隔が詰まり、あふれた文は屋上の縁へ。

PLACE 2 · STREET

道の輪郭の内側を巡る

交通領域(歩道部・車道部)の面を 0.55m から 1.05m おきに内側へ縮めた輪に、字の上を内側に向けて流す。PLATEAU で同じ路面を二重に覆う2系統(tran_・traf_)の 1,120 組は、面を1枚にまとめて文を合わせる。

PLACE 3 · MATERIAL

素材の語が光ってから、素材になる

広がる走査の輪が建物に届く少し前、その建物の文の中の素材の語(「タイル」「ガラス」)が光って大きくなり、そのあと壁がその素材で下から現れる。

07
OVERLAY — HUMAN VOICE

そこに、歩いた人の言葉を重ねる

「ここは朝早くは音を鳴らしちゃいけないので、気をつけて入ってください。」LOOVIC 現地記録 No.13 · 2026-09-27 朝 · 新橋(書き起こしのまま)

写真の言葉は「どう見えるか」しか分かりません。ここでは、こうするという判断は、その場を知る人の声にあります。2026年9月27日の朝8時、ごみ回収の道を歩きながら LOOVIC で残した声を、声は無加工のまま、位置だけを PLATEAU で締め直して、同じ地物IDに結びました。

補正した道が通る面(PLATEAU の交通領域)

位置は GPS のままではなく、声と同時に撮った写真・公式の店舗位置・曲がる順序から、話した人の立ち位置を補正しています。指している対象(「これ」「その店」)は、立ち位置とは別の候補として持ちます。AI はこの記録を先に全部読めるので、ロボットのデモでは、人が着いてから話した条件を、手前で先に使って動きを決めます。

導入の最後: 実録の道を金のペンがたどり、話した場所に声の言葉が書かれる
導入の 05。日が暮れて街の字が灯り、実録の道に沿って書き起こしが明朝で書かれる(記録1と24は実際の声が流れる)。
08
LIMITS

正直に書いておくこと

街の姿は想像図

壁の素材・部品は言葉から描いたもので、写真は貼っていない。素材の語が無い壁は無地のまま。建物の種類から素材を推測しない。

紐づけは撮影位置の誤差で決まる

車から撮った密集街区では、記号の輪郭が実物と5〜8°ずれて隣の建物を選ぶことがある。だから車・自転車の場面は確率0.9以上だけ採る。

写真の年と、形の年がずれる

言葉は 2015〜2026年の写真、形は 2025年ごろの PLATEAU。建て替わった建物には、前の建物の言葉が載ることがある。

「位置」で結んだ歩道・車道は目安

左右と撮影位置だけで決めたもの。確からしさは上限0.7の目安として扱う。

導入に置ききれない字がある

約14万字のうち、文の多い道などで面に置ききれない約3.6万字は、地平から消える見せ方にしている。

数字の出所

この頁の数値は、発表用に数え直した present/data/numbers.json(出所と数え方つき)と、導入のデータ prologue.json から。書き換えていない。