{"service": "road marking taper gate", "access": "POST needs the x-access-token header; the token is given with the competition submission", "opencv": "5.0.0", "post": {"image_base64": "JPEG or PNG, <= 3 MB encoded. red_line_gap and taper_table_4_2_7 need the camera's original resolution: at 2000 px on the long side both refuse (checked 2026-09-23 on F17/F30-32/F40). Re-save the full-size photo at JPEG 90 (about 2.2 MB, under this cap) and send it to the Function URL given with the submission: it has no 30 s limit and takes about 2.5 minutes, about 4 when the burst check below runs. Through API Gateway (30 s) a full-size photo times out", "image_url": "instead of image_base64: an https URL on raw.githubusercontent.com, fetched by the function (up to 15 MB, so an original photo can be sent as it is). For example any photo in the repository's evidence/ folder", "burst_base64 / burst_urls": "optional, up to 2 more photos taken a second apart from the same spot. For the repository's own photos they are found by capture time without being sent", "burst": "optional, false to skip the second loop", "fov_deg": "horizontal field of view of the lens", "posted_kmh": "speed limit in force", "lane_width_m": "optional. Without it the width check is skipped and said to be skipped; a photograph has no scale"}, "returns": {"en": "first in every response: the summary, findings, what was measured and what was refused with the reason, and the next actions, in English. The fields after it keep the regulations' Traditional Chinese wording", "red_line_gap_burst": "the second loop: when the red-line gap is refused (or can be confirmed), the photos taken within 3 s are fetched, registered to the first with cv2.findTransformECCMultiScale (correlation >= 0.90), measured, and the gap is reported only if 2 or more agree within 5 cm; `trace` lists every step", "scenario": "what a road user meets here. Every clause either quotes a value measured in this frame or names inline the clause it is read under", "site_description_not_measured": "things that are true of this place and that this program did not measure - the drain covers under the red line, the bridge ahead. Kept apart from `scenario` so an unearned sentence has nowhere to sit", "findings": "the same thing itemised, each with its measurement, basis and state", "red_line_gap": "intact red line's inner edge to the worn line's centre, metres; the ruler is the line's own 10 cm width (§169). Reported only if at least 3 of 4 encodings of the bytes agree within 5 cm", "taper_table_4_2_7": "chevron taper ratio, set beside 表 4.2.7 (50 km/h 16:1) as a reference only: that table is written for lane shifts at turning lanes. Reported only if at least 3 of 4 encodings agree within 10%; one re-encode at quality 97 moved F40 from 11.9:1 to 23.2:1", "site_116_not_measured_from_this_photograph": "the 116 縣道 site's published figures, attached to every response, each with its results/ source. Not measured from the photograph sent", "state": "NOT_A_ROAD_PHOTOGRAPH when the road region is under 30% of the frame; then nothing was measured and every other key is empty except the site block, which is attached to every response"}, "finding_codes": {"TAPER_TOO_STEEP": "the lane-closing taper is steeper than the works code's reference (code p.9)", "TAPER_BELOW_TABLE_4_2_7": "the painted island's taper is below design table 4.2.7's ratio for the speed (table 4.2.7 used as a reference only)", "TWO_RED_LINES": "new and old red lines, and the distance between them (the line's 10 cm width as the ruler, §169)", "NO_LANE_CHANGE": "double white line: no lane changes (§167)", "EDGE_NOT_CARRIAGEWAY": "kerbside red line: the drivable road may end here (§169)", "SURFACE_IN_PIECES": "joins between old and new paving in the carriageway (excavation review rules)", "LANE_TOO_NARROW": "a car and a scooter side by side lack the legal clearance (§101)", "CENTRE_LINE_SOLID": "double yellow line: the centre line (§165); unlike §167, it forbids crossing into oncoming traffic"}, "not_needed": {"pitch": "the angle measured is invariant to camera rotation", "road_bearing": "the road's own markings give it", "scale": "a taper rate is dimensionless"}, "states": {"WITHIN_REFERENCE": "clear of the reference by more than the measurement's doubt", "STEEPER_THAN_REFERENCE": "past it by more than the doubt", "INDETERMINATE": "measured, but nearer the reference than this measurement can resolve", "CANNOT_MEASURE": "the photograph does not show what is needed"}}