---
title: Mapillaryからほしい画像を取得する
tags:  #mapillary #foss4g  
author: [bannyaaa](https://convert.docswell.com/user/bannyaaa)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GJ5RPN6574.jpg?width=480
description: 2025/02/15 FOSS4G Hokkaido 2024 https://foss4g.hokkaido.jp/2024/
published: February 16, 25
canonical: https://convert.docswell.com/s/bannyaaa/K221DR-20250215-foss4g-hokkaido
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GJ5RPN6574.jpg)

Mapillaryから
ほしい画像を取得する
FOSS4G Hokkaido 2024
2025/2/15 bannyaaa


# Page. 2

![Page Image](https://bcdn.docswell.com/page/9E2D65MGER.jpg)

自己紹介
✓id: bannyaaa
✓SIerでおしごと（GISは趣味）
✓家のチーフ家事育児オフィサー
✓好きなもの
‣ 物語（時間・仮想空間・記憶を扱った作品が好み）
‣ 旅行（計画をたてたり、他人の旅行記を読むのも）


# Page. 3

![Page Image](https://bcdn.docswell.com/page/D7Y29KXG7M.jpg)

話すこと
1. Mapillaryの概要
2. 画像の取得方法
3. 画像のフィルタリング


# Page. 4

![Page Image](https://bcdn.docswell.com/page/VEN8LR18J8.jpg)

1. Mapillaryの概要


# Page. 5

![Page Image](https://bcdn.docswell.com/page/Y79K4M5X73.jpg)

©︎
©︎
©︎
©︎
Mapillaryとは
Mapillaryで共有されている画像例
✓ユーザーが街路画像（street-level
imagery）をアップロードして共有
できるプラットフォーム
✓スウェーデンのMapillary AB社が
2013年に提供開始、2020年に
Meta社が買収
allennatai(CC BY-SA)
fpm(CC BY-SA)
mitz(CC BY-SA)
nickp(CC BY-SA)
✓全世界で20億枚以上の画像が共有
されている


# Page. 6

![Page Image](https://bcdn.docswell.com/page/G78RQLY9ED.jpg)

Mapillaryのプラットフォームでできること
✓ユーザーは、画像のアップロードとダウンロードができる
✓プラットフォーム上で画像が解析され、顔・ナンバープレートはぼかされる
Mapillaryのプラットフォーム
アップロード
物体検出
ぼかし
ダウンロード


# Page. 7

![Page Image](https://bcdn.docswell.com/page/L7LKXL4MER.jpg)

Mapillaryの画像の特徴
✓顔とナンバープレートに自動でぼかしが入るので、加工の手間がかからない
✓オープンデータ（CC BY-SA）であり、研究やビジネスなど幅広く使える
✓ボランティアベースで、撮影対象・構図、撮影機材、撮影条件（天候、時間
帯）にばらつきがあるため、利用目的に合わせた画像のフィルタリングが必要


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4EM2LMK6EW.jpg)

Mapillaryの画像の活用例
✓OpenStreetMapの編集
✓AIモデルの学習や検証
✓都市の環境評価


# Page. 9

![Page Image](https://bcdn.docswell.com/page/PERMKVXN79.jpg)

2. 画像の取得方法


# Page. 10

![Page Image](https://bcdn.docswell.com/page/P7XVLZ68JX.jpg)

2. 画像の取得方法
〜取得手段の紹介〜


# Page. 11

![Page Image](https://bcdn.docswell.com/page/37KQL81L7D.jpg)

画像の取得手段（1. Webアプリ）
✓地図や画像を見ながらダウンロード対象を選べる
✓手作業のため大量の画像のダウンロードには向かない
出典：https://www.mapillary.com/app


# Page. 12

![Page Image](https://bcdn.docswell.com/page/LJ3P32Q675.jpg)

画像の取得手段（2. データセット）
✓用途にあわせてフィルタリング済みの画像セットが配布されている
✓データセットのライセンスは要確認（Mapillary提供のものは商用不可）
出典：https://www.mapillary.com/datasets


# Page. 13

![Page Image](https://bcdn.docswell.com/page/8JDL4Z9M7G.jpg)

画像の取得手段（3. API）
✓プログラムからMapillaryのWeb APIにアクセスして画像をダウンロード
✓プログラムを開発する必要があるが、条件にあった画像を一括で取得できる
✓MapillaryのPython SDK（ライブラリ）は今後の更新に期待
Mapillaryのプラットフォーム
条件を指定
プログラム
ダウンロード


# Page. 14

![Page Image](https://bcdn.docswell.com/page/VEP2MDZQE8.jpg)

2. 画像の取得方法
〜MapillaryのAPI〜


# Page. 15

![Page Image](https://bcdn.docswell.com/page/27VD91WP7Q.jpg)

MapillaryのAPIの概要
✓利用にはアクセストークンが必要
‣ 自身のアカウントのDevelopersページで、アプリ情報を登録すると発行さ
れるʼClient Tokenʼを使う
✓APIのカテゴリは2つ
‣ ベクトルタイル：交通標識や信号の（推定）位置、画像の撮影地点をタイル
で配信するAPI群
‣ エンティティ：画像の属性情報（撮影日や撮影地点）にアクセスするため
のAPI群


# Page. 16

![Page Image](https://bcdn.docswell.com/page/5JGYZ2DQJL.jpg)

プラットフォーム内での画像の扱い
✓APIのリクエストで返るのは、画像の属性情報（画像ファイルではない）
✓画像がアップロードされると画像IDがふられ、撮影日時や画像ファイルの保
存先URLといった属性情報が紐づく（と考える）
画像情報のイメージ
画像ID
1234567890
撮影日時
2025/2/15 00:00
撮影地点
(141.35, 43.06)
物体検出結果
信号、横断歩道
画像ファイルURL
https://…
…
画像ファイル


# Page. 17

![Page Image](https://bcdn.docswell.com/page/47QMLP1WEP.jpg)

Image API (imageエンドポイント)
指定した画像IDに紐づく属性情報を取得するAPI
Image APIに画像IDと取得したい属性情報を渡す
import requests
my_token = &#039;MLY|xxx&#039;
image_id = &#039;1949184908580152&#039;
url = f&#039;https://graph.mapillary.com/
{image_id}?
fields=captured_at,geometry,thumb_original_u
rl&amp;access_token={my_token}&#039;
response = requests.get(url)
data = response.json()
print(data)
撮影日時、撮影場所、画像ファイルURLの取得結果
{
&quot;captured_at&quot;: 1551196876000,
&quot;geometry&quot;: {
&quot;type&quot;: &quot;Point&quot;,
&quot;coordinates&quot;: [
141.35039489997,
43.0671272
]
},
&quot;thumb_original_url&quot;: &quot;https://scontentitm1-1.xx.fbcdn.net/m1/v/t6/An-…省略…bca&quot;,
&quot;id&quot;: &quot;1949184908580152&quot;
}


# Page. 18

![Page Image](https://bcdn.docswell.com/page/KE4VDYR171.jpg)

©︎
Image API (imageエンドポイント)
指定した画像IDに紐づく属性情報を取得するAPI
画像ファイルURLからダウンロード
指定した画像IDの画像ファイル(.jpg)
# URLはdata[&#039;thumb_original_url&#039;]に格納
image_file = f’{image_id}.jpg&#039;
with open(image_file, &#039;wb&#039;) as handler:
image_data =
requests.get(data[&#039;thumb_original_url&#039;],
stream=True).content
handler.write(image_data)
torishin (CC BY-SA)


# Page. 19

![Page Image](https://bcdn.docswell.com/page/L713Z6Q5EG.jpg)

©︎
Image API (imageエンドポイント)
指定した画像IDに紐づく属性情報を取得するAPI
画像ファイルURLからダウンロード
指定した画像IDの画像ファイル(.jpg)
# URLはdata[&#039;thumb_original_url&#039;]に格納
image_file = f’{image_id}.jpg&#039;
with open(image_file, &#039;wb&#039;) as handler:
image_data =
requests.get(data[&#039;thumb_original_url&#039;],
stream=True).content
handler.write(image_data)
画像IDがわかれば画像ファイルは取得できる
torishin (CC BY-SA)


# Page. 20

![Page Image](https://bcdn.docswell.com/page/G7WP9WMWE2.jpg)

Image API (imagesエンドポイント)
Bounding Boxで指定した範囲から複数の画像情報を取得するAPI
設定したBounding Boxの座標が取得できるWebサイト
出典：https://boundingbox.klokantech.com/


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4JZK95Q2J3.jpg)

Image API (imagesエンドポイント)
Bounding Boxで指定した範囲から複数の画像情報を取得するAPI
Image APIにBounding Boxと取得したい属性情報を渡す
範囲内の画像情報の取得結果
{
import requests
my_token = &#039;MLY|xxx&#039;
url = f&#039;https://graph.mapillary.com/images?
fields=id,thumb_original_url&amp;bbox=141.350529
1192,43.0668274429,141.3521117692,43.0677236
36&amp;access_token={my_token}&#039;
response = requests.get(url)
data = response.json()
print(data)
&quot;data&quot;: [
{
&quot;id&quot;: &quot;1349076868955436&quot;,
&quot;thumb_original_url&quot;: &quot;https://scontentnrt1-2.xx.fbcdn.net/m1/v/t6/An-…省略…bca&quot;
},
{
&quot;id&quot;: &quot;634820688601325&quot;,
&quot;thumb_original_url&quot;: &quot;https://scontentnrt1-2.xx.fbcdn.net/m1/v/t6/An_…省略…bca&quot;
},
…
]
}


# Page. 22

![Page Image](https://bcdn.docswell.com/page/YE6QK9N6EV.jpg)

3. 画像のフィルタリング


# Page. 23

![Page Image](https://bcdn.docswell.com/page/GE5RPN55J4.jpg)

©︎
©︎
©︎
©︎
©︎
©︎
目的に沿った画像を集めるには？
全世界の多種多様な画像の中から、研究や調査で必要とする画像を取得する
特定の範囲から画像を集める
目的の物体が写った画像を集める
ChenJJ(CC BY-SA)
musashino5(CC BY-SA)
Ca73(CC BY-SA)
ほしい画像
yasunari(CC BY-SA)
出典：https://www.mapillary.com/app
watalucky(CC BY-SA)
mitz(CC BY-SA)


# Page. 24

![Page Image](https://bcdn.docswell.com/page/972D65NG7R.jpg)

3. 画像のフィルタリング
〜特定の範囲から画像を集める〜


# Page. 25

![Page Image](https://bcdn.docswell.com/page/DJY29KPGJM.jpg)

例題：札幌市内の全画像を集めたい
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成


# Page. 26

![Page Image](https://bcdn.docswell.com/page/V7N8LR58E8.jpg)

Image APIの取得範囲を工夫する
札幌市を囲うBounding Boxを取得範囲に指定してImage APIを実行する
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成


# Page. 27

![Page Image](https://bcdn.docswell.com/page/YJ9K4MYXJ3.jpg)

Image APIの取得範囲を工夫する
札幌市を囲うBounding Boxを取得範囲に指定してImage APIを実行する
Image APIの取得件数は最大2,000件なので困難
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成


# Page. 28

![Page Image](https://bcdn.docswell.com/page/GJ8RQL697D.jpg)

Image APIの取得範囲を工夫する
タイルと同じ大きさのBounding Boxを設定してImage APIを実行する
Zoom Level: 12
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成
Zoom Level: 16
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成


# Page. 29

![Page Image](https://bcdn.docswell.com/page/LJLKXL9M7R.jpg)

Image APIの取得範囲を工夫する
タイルと同じ大きさのBounding Boxを設定してImage APIを実行する
Zoom Level: 12
Zoom Level: 16
画像は取得できるけど、もっとよい方法はないか🧐
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成


# Page. 30

![Page Image](https://bcdn.docswell.com/page/47M2LMZ67W.jpg)

ベクトルタイルを組み合わせるアプローチ
Coverage tiles APIから取得したベクトルタイルの画像情報が利用できそう
Coverage tilesのAPIドキュメント
出典： https://www.mapillary.com/developer/api-documentation
ベクトルタイルの可視化（オレンジ色の点が画像）


# Page. 31

![Page Image](https://bcdn.docswell.com/page/P7RMKV6NJ9.jpg)

ベクトルタイルから画像情報を抽出
札幌駅南東のタイルから画像情報が21,843件取得できた！(注：画像IDはid列)
Coverage tiles APIへのリクエストと画像情報の抽出
import requests
import geopandas as gpd
from vt2geojson.tools import vt_bytes_to_geojson
my_token = &#039;MLY|xxx&#039;
# 札幌駅南東のタイル
z = 14; x = 14625; y = 6016
url = f&#039;https://tiles.mapillary.com/maps/vtp/mly1_public/
2/{z}/{x}/{y}?access_token={my_token}&#039;
response = requests.get(url)
# ベクトルタイルのデータをGeoPandasへ
vt_content = response.content
features = vt_bytes_to_geojson(vt_content, x, y, z)
gpd_fetures = gpd.GeoDataFrame.from_features(features)
# 画像情報のみを抽出
gpd_images = gpd_fetures[gpd_fetures.geom_type == &#039;Point&#039;]
print(gpd_images.shape)
print(gpd_images.head())
取得できた画像情報の件数と中身
(21843, 8)
geometry
captured_at
creator_id
\
213
214
215
216
217
POINT (141.37017 43.067)
POINT (141.35032 43.06665)
POINT (141.36193 43.05678)
POINT (141.36551 43.06388)
POINT (141.36821 43.05342)
1654253241889
1687726649648
1667722182988
1656820903787
1534899133759
102927448613350
102508918660458
103659545209604
103659545209604
104408981801642
213
214
215
216
217
id
380380077569429
310286147991198
540982981196628
772227227285279
1595819890628774
is_pano
False
False
False
False
False
213
214
215
216
217
sequence_id
mLDIlsM31dAhUOEaG0qnK6
lECRT3x7nfyiFKjeSDrW42
J2b7rApsH3awEV6Tcug5fQ
LB7ZjuKaU2wexvHVTDrXod
inkm40cf3x103jy9vcxozj
image_id
NaN
NaN
NaN
NaN
NaN
compass_angle
79.003472
21.918503
264.290754
0.000000
130.078125
\


# Page. 32

![Page Image](https://bcdn.docswell.com/page/PJXVLZM8EX.jpg)

画像ファイルの取得にはもう一手間
✓ベクトルタイルの画像情報には、画像ファイルのURLが含まれない
✓タイルから抽出した画像IDに対してImage APIを実行してURLを入手する
Zoom Level: 14
Coverage tiles APIで取得した
タイルから画像IDを抽出
Image APIで
画像IDからURLを入手
画像ID
「国土数値情報（行政区域データ）」(国土交通省)を加工して作成
画像ファイルURL
380380077569429
https://…
310286147991198
https://…
540982981196628
https://…
…
…


# Page. 33

![Page Image](https://bcdn.docswell.com/page/3JKQL8GLJD.jpg)

3. 画像のフィルタリング
〜目的の物体の写った画像を集める〜


# Page. 34

![Page Image](https://bcdn.docswell.com/page/LE3P32N6J5.jpg)

©︎
例題：信号の写った画像を集めたい
watalucky (CC BY-SA)


# Page. 35

![Page Image](https://bcdn.docswell.com/page/8EDL4ZWMJG.jpg)

Mapillaryの物体検出結果を使う
✓プラットフォーム内の画像の物体検出結果はImage APIから取得できる
✓1ページ前の画像において信号が検出できていることが確認できる
Image APIへのリクエスト
import requests
my_token = &#039;MLY|xxx&#039;
image_id = &#039;635260998015689&#039;
url = f&#039;https://graph.mapillary.com/
{image_id}?
fields=detections.value&amp;access_token={my_
token}&#039;
response = requests.get(url)
data = response.json()
print(data)
レスポンス
{
&quot;detections&quot;: {
&quot;data&quot;: [
…
{
&quot;value&quot;: &quot;object--traffic-light--generalupright-front&quot;,
&quot;id&quot;: &quot;635452301329892&quot;
},
…
{
&quot;value&quot;: &quot;object--traffic-light--generalupright-front&quot;,
&quot;id&quot;: &quot;635452334663222&quot;
},
…
]
}
}


# Page. 36

![Page Image](https://bcdn.docswell.com/page/V7P2MD9Q78.jpg)

©︎
Mapillaryの物体検出結果を使う際の注意点
検出できるのは定義済みのカテゴリのみ
検出できない場合がある
出典：https://www.mapillary.com/developer/api-documentation/detections
s1319oka (CC BY-SA)


# Page. 37

![Page Image](https://bcdn.docswell.com/page/2JVD91MPJQ.jpg)

©︎
Mapillaryの物体検出結果を使う際の注意点
検出できるのは定義済みのカテゴリのみ
検出できない場合がある
物体検出結果に信号がない
{
&quot;detections&quot;: {
&quot;data&quot;: [
{
&quot;value&quot;: &quot;regulatory--noparking--g1&quot;,
&quot;id&quot;: &quot;4350367648328543&quot;
},
{
&quot;value&quot;: &quot;object--sign-advertisement&quot;,
&quot;id&quot;: &quot;4361214117243896&quot;
},
{
&quot;value&quot;: &quot;object--sign--store&quot;,
&quot;id&quot;: &quot;4362053953826579&quot;
}
]
}
}
出典：https://www.mapillary.com/developer/api-documentation/detections
s1319oka (CC BY-SA)


# Page. 38

![Page Image](https://bcdn.docswell.com/page/5EGYZ2GQEL.jpg)

©︎
自前のAIモデルで物体検出する
画像をダウンロード後にYOLO等で物体検出してフィルタリングする手もある
YOLO-Worldを使って信号が検出できた
s1319oka (CC BY-SA)


# Page. 39

![Page Image](https://bcdn.docswell.com/page/4JQMLPXW7P.jpg)

まとめ


# Page. 40

![Page Image](https://bcdn.docswell.com/page/K74VDY61J1.jpg)

話したこと
1. Mapillaryの街路画像は、オープンデータとして利用できる
2. 画像IDが取得できれば、属性情報から画像ファイルのURLがたどれる
3. 範囲や写っている物体でフィルタリングをかけ、ほしい画像を取得する


# Page. 41

![Page Image](https://bcdn.docswell.com/page/LJ13Z6V57G.jpg)

おしまい
Mapillaryの画像を使ってみませんか？


