We’ve rolled out a new quality_score field on Mapillary images and sequences. We would love feedback from folks that consume data from Mapillary APIs.
It’s a float in the range [0, 1] representing the predicted visual quality of an image or a sequence — higher is better. The intent is to make it easy to detect blurry, dark, or otherwise low quality captures.
How to query it — images (Graph API)
Add quality_score to the fields= parameter on any image-returning endpoint:
GET https://graph.mapillary.com/{image_id}?fields=id,quality_score&access_token=MLY|…
{
“id”: “2140279232804782”,
“quality_score”: 0.704
}
Image endpoints that expose it:
- GET /{image_id} — single image
- GET /images?bbox=… — bulk by bounding box
- GET /images?sequence_ids=… — images in a sequence
- GET /images?organization_id=… — images from an organization
- GET /{map_feature_id}/images — images depicting a map feature
Combine with other fields as usual, e.g. fields=id,quality_score,captured_at,geometry.
How to query it — sequences (vector tiles)
There is no Graph API entity endpoint for a sequence’s quality_score — it lives only on the vector tile sequence layer, as the average of per-image scores in that sequence (unscored images excluded). Fetch the relevant coverage tile and read the field off each sequence feature:
- https://tiles.mapillary.com/maps/vtp/mly1_public/2/{z}/{x}/{y}
- sequence layer (zoom 6-14) — sequence-level quality_score (average)
- image layer (zoom 14) — per-image quality_score
- https://tiles.mapillary.com/maps/vtp/mly1_computed_public/2/{z}/{x}/{y}
- same two layers, on the SfM-computed coordinates
Quick Python sample (using mapbox_vector_tile):
import requests, mapbox_vector_tile
raw = requests.get(
“https://tiles.mapillary.com/maps/vtp/mly1_public/2/14/8801/5374”,
params={“access_token”: “MLY|…”},
).content
tile = mapbox_vector_tile.decode(raw)
for f in tile[“sequence”][“features”]:
print(f[“properties”][“id”], f[“properties”].get(“quality_score”))
Not included: the overview layer (zoom 0-5) on either coverage tileset, and the map-feature tilesets (mly_map_feature_point, mly_map_feature_traffic_sign) — those are dedup objects, not images.
Notes
- Type: nullable float in [0, 1]
- Images that haven’t been scored yet may come back as either 0 or null — handle both
- On the sequence tile layer the field is absent when none of the images in the sequence have a score yet
Things we’d like to hear about:
- Does the quality score values make sense ?
- Any endpoints where you expected to see it but don’t?
- Anything else — bugs, gaps etc
Drop your thoughts ![]()