写真の言葉を、
3D都市モデルの
建物と道に。
みちよみが街路写真から読んだ言葉を、国土交通省の3D都市モデル PLATEAU の建物・道路のIDに結びました。形は PLATEAU、中身は写真の言葉です。東京都の62区市町村で、72.7万の地物に1,862万の記述が付いています。結び方と使い方、そして言葉で街を描く方法を、順に説明します。
PLATEAU Hack Challenge 2026 in TOKYO で発表した作品「言葉がつくる街」(みちよみ × LOOVIC)のしくみを、東京都全域に広げたものです。数字は公開データ v0.2(2026-10-04)から取っています。
写真 → 言葉 → 地物ID。
使っているのは、すでにある2つのデータです。みちよみ(街路写真を AI が読んだ言葉)と、PLATEAU(地物ごとにIDを持つ国の3D都市モデル)。この2つを、PLATEAU の地物IDという共通の住所で結びます。
- INPUT街路写真
市民や事業者が Mapillary に公開した写真(CC BY-SA 4.0)。
- 01 READ読む
写真1枚ごとに、AI が看板・建物・歩道・危険の手がかりを文と値で書く。
- 02 SPLIT分ける
1件の記録を「どの地物の話か」の単位(記述)に分ける。文は書き換えない。
- 03 LINK結ぶ
写真に PLATEAU を重ね、AI は「どの地物の話か」を記号で選ぶだけ。
- 04 GATHER束ねる
地物IDごとに記述と値をまとめ、CityGML の属性にできる形にする。
文は書き換えない
元の記述の文と値をそのまま使います。地物の上では意味のない「(右・約15m)」のような写真の中の位置の注記は、使う場面に合わせて外します。
AI は選ぶだけ
紐づけでは、AI に文を書かせません。写真に重ねた記号から「どの地物の話か」を選ばせ、その確率を残します。
無いものは描かない
言葉で描く街は「言葉から描いた想像図」です。言葉の無い壁に窓や店を描かず、素材の語が書かれた壁だけをその素材にします。
写真1枚を、
AI が言葉と値で読む。
みちよみは、街路写真1枚ごとに AI が書いた構造化された記録です(約191万枚)。看板の文字、建物の種類と見た目の階数、歩道の幅、舗装、危険の手がかりまで、文と数値で持ちます。分からないことは「不明」と書きます。
- 看板
/townscape/poi_signs/0ファミリーマートの店舗看板(右・手前)店の名前と、写真の中の位置を読んでいる。 - 建物
/townscape/buildings/0商業施設、2〜3階、築2000年代以降(確度: 高)見た目の階数は、写真の画角に写った範囲からの見立て。PLATEAU ではこの店の入る建物は11階。 - 歩道の幅
/geometry/sidewalk/right右側に分離歩道、幅 約4.5m(確度: 中)文ではなく値で持つので、あとで数値の属性にできる。 - 歩ける幅
/accessibility/clear_walkable_width_m基準 約4.0m、駐輪などで一時的に 約3.0m(確度: 中) - 点字ブロック
/accessibility/tactile_paving不明この写真からは判定できず「不明」と書き、近くで確かめる項目に残している。
値は公開データ(release 2026-09-13-r1、場面 1575040799633836)のまま。読み方の詳しい説明は しくみ と データの読み方 へ。
記録を「どの地物の話か」
で分ける。
1件の記録を、PLATEAU の地物に振り分けられる単位の「記述」に分けます。文面は元の値をつないだだけです。記述ごとに、振り分け先の種類・左右・距離と、元の記録のどこから来たか(JSON Pointer)を持ちます。
| 記述の言葉(上から最初に当たったもの) | 振り分け先 |
|---|---|
| 看板・店名、建物の種類・階数・外装 | 建物 |
| 信号・街灯・標識・電柱・柵・消火栓・マンホール・横断歩道 | 都市設備 |
| 街路樹・高木・ケヤキ・イチョウ… | 街路樹 |
| 植栽帯・植え込み・分離帯・交通島 | 植樹帯・島 |
| 歩道の幅・段差・縁石・点字ブロック・車いす | 歩道部(左右) |
| 車線・標示・舗装・ひび・駐車・見通し | 車道部 |
危険・不具合の手がかりも、同じ規則でその原因の地物へ振り分けます(「根上がり」→ 街路樹、「駐輪で歩道が狭い」→ 歩道部)。写真の中の位置の言葉(右・左・正面)と距離(約15m)は、次の紐づけの手がかりになります。
写真に PLATEAU を重ね、
AI は記号を選ぶだけ。
「右の看板」がどの建物かを決めるのに、AI に文章を書かせません。写真の画角に PLATEAU を描いて候補の地物に記号を重ね、AI には「この記述が指す記号」を選ばせるだけにします。答えは英字1文字に制限し、出力の確率から選択肢ごとの確からしさを出します。
- 撮影位置と向きを補正する
Mapillary が写真の重なりから計算した位置と向きを、写真の建物の見え方と PLATEAU の建物が重なるように合わせます(向き ±30°、横 ±6m、前後 ±4m。重なりが良くなるときだけ使う)。
- 画角に PLATEAU を描き、候補を出す
建物ごとに色の違う「建物IDの画像」を描き、写っている地物と、左右・距離から見た位置の確率を作ります。
- 候補に記号を重ねる
A〜G に加え、「写っていない・どれでもない」の逃げ道として Z も必ず入れます。
- AI は記号を選ぶだけ
出力を英字1文字に制限し、確率を選択肢の確からしさにします。文は生成しません。
記述「ファミリーマートの店舗看板(右・手前)」の選択
G = 右側 約35m、11階の業務施設。この記述は G のビルに結ばれました。
採る・採らないの規則
徒歩の写真は確率0.5以上、車・自転車から撮った写真は0.9以上だけを採ります。新橋で目で確かめたところ、徒歩の写真での建物の紐づけは、判定できた30件中26件が正しいものでした(少数の確認で、正解率の推定ではありません)。
道路と歩道は、位置で結ぶ
歩道・車道・路面の記述は、撮影位置と記述の左右から、その場所の道路の面に結びます。PLATEAU に歩道部と車道部の区別が無い道(全体の約8割のメッシュ)は、道路1本分の面に「道路(区別なし)」として結びます。
分類の無い物は「位置だけ」
駐輪・コーン・ごみ袋のように PLATEAU に分類の無い物は、撮影位置の道路に「位置だけ」の印をつけて置きます。
地物IDごとに束ね、
CityGML の属性にする。
結んだ記述を地物IDごとに集めます。同じ店の看板を別の撮影で読んでいれば多数決でそろえ、歩道の幅のような値は中央値・最小・最大・観測数にまとめます。こうして PLATEAU の形に、「その場所がどう見えるか」という言葉の層が付きます。
言語LOD記述の細かさを、形の LOD と同じはしごで
| 地物 | 1 | 2 | 3 |
|---|---|---|---|
| 建物 | 全体(種類・階数・築年代・外装) | — | 看板・店名 |
| 都市設備・街路樹 | 存在と種類 | 状態・属性 | 不具合・危険の手がかり |
| 歩道・車道 | 存在・通りの文脈 | 幅・舗装・標示・段差 | 不具合・危険の手がかり |
CityGML に書き込んだ建物記号 G のビル(書き込みツールの出力から抜粋)
<bldg:Building gml:id="bldg_0ec48603-…">
<gen:genericAttributeSet name="みちよみ">
<gen:intAttribute name="言語LOD">3</…>
<gen:intAttribute name="観測場面数">16</…>
<gen:stringAttribute name="観測期間">2016-2022</…>
<gen:stringAttribute name="看板">ファミリーマート / サンチェア 新館 / …</…>
<gen:stringAttribute name="建物の種類">オフィスビル</…>
<gen:doubleAttribute name="見た目の階数_階">9.5</…>
<gen:intAttribute name="見た目の階数_観測数">14</…>
<gen:stringAttribute name="築年代の見立て">00s以降</…>
<gen:stringAttribute name="記述">ファミリーマートの看板(右・手前)(2022) / …</…>
<gen:stringAttribute name="出典">みちよみ(michiyomi.dev、Mapillary の街路写真より)、CC BY 4.0 / scene: …</…>
<gen:stringAttribute name="注意">撮影年時点の写真1枚からの AI の推定。実測・点検の結果ではない</…>
</gen:genericAttributeSet>
<bldg:usage …>401</bldg:usage> <!-- 業務施設 -->
<bldg:storeysAboveGround>11</bldg:storeysAboveGround>
…(PLATEAU の元の形)
</bldg:Building>
値は数値の属性(gen:doubleAttribute など)になるので、GIS で条件にかけられます。「見た目の階数」(9.5)と PLATEAU の階数(11)がずれるのは、写真に写った範囲から見立てているためです。
新橋の作品から、
東京都全域へ。
ハッカソンでは新橋の一角で動かしました。そのあと、同じ規則・同じ AI・同じプロンプトのまま、約1km四方のメッシュごとに東京都全域へ広げました。地物は隣の8メッシュまで読み、境目の建物も両側の写真から結びます。
写真から紐づけまで公開データ v0.2
写真に PLATEAU を重ねて判定するので、全周写真や、位置と向きの分からない写真は使えません。
結果62区市町村・1,693メッシュ
手元の GPU 2台で、約2日
記号を選ぶ AI(Qwen 系の27Bモデル)を手元の GPU 2台(RTX PRO 6000 と RTX 5090)で動かし、2026年9月27日夜から29日夕方までで全メッシュを回しました。紐づけの処理では、写真を外部のサービスに送っていません。
島しょの道路まで
最初は PLATEAU に建物があるメッシュ(1,644)だけを回しました。10月4日に、建物は無いが道路がある49メッシュ(小笠原村や、ほかの島しょ・山地)を足し、62区市町村になりました。建物が無い所では撮影位置の補正ができないので、Mapillary の位置と向きをそのまま使います。
同じ選択になるのは約9割
同じ条件で選ばせ直すと、記述の約9割(89.7%)で同じ記号を選びます。残りは確率が拮抗している記述です。一致する割合は、正しさの割合ではありません。
表札の氏名と車のナンバーは、本体のデータ(v0.3.1)と同じ位置で伏せています。
地物IDの表として配り、
CityGML に書き込める。
PLATEAU の形は配らず、地物IDと代表点、記述と値の表にしました。使う人は、自分で入手した PLATEAU と gml_id で結合するか、同梱のツールで CityGML に書き込みます。
公開データHugging Face finalvent/michiyomi-tokyo-plateau
features | 地物ごとに1行(区市町村ごとの GeoParquet、点は代表点)。地物ID、元ファイル、言語LOD、観測場面数、観測期間、看板、値(歩道の幅・建物の種類など) |
links | 記述ごとに1行。scene_id、記述の位置(JSON Pointer)、analysis_sha256、役割、確率、結び方。元の写真の記録までたどれる |
sources | 使った PLATEAU のデータセット(区市町村ごと、2024・2025年度) |
| 条件 | 記述と紐づけは CC BY 4.0(AI の回答やアプリに出典は不要)。地物ID・代表点などの PLATEAU 由来の部分は PLATEAU サイトポリシー(出典・ライセンス) |
手元の CityGML に書き込むtools/write_citygml.py
必要な分だけを Hugging Face から取り、地物ごとに gen:genericAttributeSet name="みちよみ" を1つ差し込みます。元のファイルは書き換えません。東京都全域の PLATEAU(4,339ファイル)で試し、公開データ(v0.1)の地物すべてが gml_id で一致しました。
言葉が、プリセットの
素材と部品を選ぶ。
地物に付いた言葉だけで、街の見た目を組み立てられます。画像は生成しません。あらかじめ用意した素材(CC0)と部品(自作の3Dモデル)のどれを使うかを、文に書かれた語が決めます。素材は東京都全域の 3Dの街の「素材の街」で、部品は作品「言葉がつくる街」(新橋)で動いています。
1. 意味で6つに分ける
地物の言葉を、記述の役割で6つの意味に分けます。注意(危険・不具合)を最優先にし、どれでもないものは「街の物」にします。
2. 素材と色の語で、素材を選ぶ
「左側の茶色系タイル張りの高層ビル」なら、素材「タイル」と色「茶」から、ambientCG の CC0 素材を選び、言葉の色に合わせます。素材の語が無い壁は無地のまま。建物の種類から素材を推測しません。












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















形だけ・写真の質感・言葉から描いた街



素材と部品は差し替えられる
語と素材・部品の対応は表になっているので、別の素材集や部品に置き換えても、同じ言葉から同じ規則で街を組み立てられます。手がかりは公開データにある値(建物の種類・素材の語・看板)なので、ほかの地域にも当てはめられます。
字が、その地物の面へ飛ぶ
作品の導入では、約14万字の一字一字が、自分の文が結ばれた地物の面を知っていて、そこへ飛んで PLATEAU の形を下から書いていきます。素材の語が光ってから、壁がその素材で現れます。新橋の演出を見る
素材: ambientCG(CC0)。部品: 自作の3Dモデル(多くは GPT-6 Pro が Blender MCP で作成)。上の比較画像は作品(新橋)のもの。素材と部品の見た目は公開データには含まれません。
正直に
書いておくこと。
紐づけは1枚の写真の解釈で、撮影の位置と向きの誤差で決まります。使うときは、次のことを前提にしてください。
- 隣の建物に結ばれることがある
車から撮った密集した街区では、記号の輪郭が実物と5〜8°ずれて隣の建物を選ぶことがあります。だから車・自転車の写真は確率0.9以上だけを採っています。
- 写真の年と、形の年がずれる
言葉は主に2014〜2026年に撮られた写真、形は2024・2025年度の PLATEAU です。建て替わった建物には、前の建物の言葉が載ることがあります。
capture_yearと合わせて読んでください。 - 位置で結んだ歩道・車道は目安
左右と撮影位置だけで決めたものです。確からしさは上限0.7の目安として扱ってください。
- 値は写真からの推定
幅・階数などは単眼の写真からの推定で、実測ではありません。建物の状態の記述(外壁の風化・ひび・空き家の可能性など)も、写真1枚からの推定で、点検の結果ではありません。
- 建物の無いメッシュは補正なし
小笠原村などの建物の無いメッシュでは、建物の輪郭による撮影位置の補正ができず、Mapillary の位置と向きをそのまま使っています。
- 描いた街は想像図
言葉で描いた壁の素材・部品は、言葉から選んだもので、写真を貼ったものではありません。言葉の無い所は描きません。
誤りに気づいたら contact@michiyomi.dev へ。
作品「言葉がつくる街」
から。
このしくみは、PLATEAU Hack Challenge 2026 in TOKYO(主催: 国土交通省、2026年9月26〜27日)で、みちよみと LOOVIC の共同チームが発表し、グランプリとオーディエンス賞をいただいた作品「言葉がつくる街」から生まれました。作品では、新橋で歩いた人の声(LOOVIC の現地記録)も同じ地物に重ねています。
出典: 3D都市モデル(Project PLATEAU)東京都内各区市町村データ(2024・2025年度、G空間情報センター)を加工して作成 / 言葉: みちよみ(街路写真 © Mapillary contributors、CC BY-SA 4.0 を AI が言語化。言葉は CC BY 4.0)/ 素材: ambientCG(CC0)/ 部品: 自作モデル。