diff --git a/openpilot/starpilot/speed_limits/vision/assets/PROVENANCE.md b/openpilot/starpilot/speed_limits/vision/assets/PROVENANCE.md index 649eebd9ce..5adad11100 100644 --- a/openpilot/starpilot/speed_limits/vision/assets/PROVENANCE.md +++ b/openpilot/starpilot/speed_limits/vision/assets/PROVENANCE.md @@ -1,3 +1,9 @@ +## Current numeric classifier asset + +| File | Bytes | SHA-256 | +| --- | ---: | --- | +| `speed_limit_us_value_classifier.onnx` | 6,240,534 | `f70477aa34a5557b69103ed65066b5a7a678f5bc35dfb4ee19914aec3c108918` | + ## Current STOP-head refinement (November 5, 2026) The current joint detector is 9,725,049 bytes, SHA-256 diff --git a/openpilot/starpilot/speed_limits/vision/assets/speed_limit_us_value_classifier.onnx b/openpilot/starpilot/speed_limits/vision/assets/speed_limit_us_value_classifier.onnx index 3090c34d0c..8ab5b7b722 100644 Binary files a/openpilot/starpilot/speed_limits/vision/assets/speed_limit_us_value_classifier.onnx and b/openpilot/starpilot/speed_limits/vision/assets/speed_limit_us_value_classifier.onnx differ diff --git a/openpilot/starpilot/speed_limits/vision/model.py b/openpilot/starpilot/speed_limits/vision/model.py index 3d34223cc0..a390f193a7 100644 --- a/openpilot/starpilot/speed_limits/vision/model.py +++ b/openpilot/starpilot/speed_limits/vision/model.py @@ -291,7 +291,7 @@ class VisionModelCore: ASSET_DIR = Path(__file__).resolve().parent / "assets" DETECTOR_SHA256 = "82408b68c79c269296f0af942130c5383cace4ee06c78e2a4690e8488720116a" - CLASSIFIER_SHA256 = "5d861067ab8f50986488f983cbc24f78527775d37af0b9740c5545d5f3173902" + CLASSIFIER_SHA256 = "f70477aa34a5557b69103ed65066b5a7a678f5bc35dfb4ee19914aec3c108918" DETECTOR_SIZE = 256 CLASSIFIER_SIZE = 128 diff --git a/openpilot/starpilot/speed_limits/vision/observation.py b/openpilot/starpilot/speed_limits/vision/observation.py index 80d4ecebb9..62fe4b38ed 100644 --- a/openpilot/starpilot/speed_limits/vision/observation.py +++ b/openpilot/starpilot/speed_limits/vision/observation.py @@ -13,7 +13,7 @@ MAX_FRAME_AGE_NS = 250_000_000 # Bound sign-processing latency independently of raw camera admission. MAX_RESULT_AGE_NS = 2_000_000_000 MAX_PAIR_SKEW_NS = 5_000_000 -MODEL_ID = '43b8e54053778ea6ca73cc5967a8c080e7f7af4c3fcb245231547bff5a4916ae:5d861067ab8f50986488f983cbc24f78527775d37af0b9740c5545d5f3173902' +MODEL_ID = '19cc26a0e4169962c1965e27b7237301a50d83a8771dde565e26bd0a63e39033:f70477aa34a5557b69103ed65066b5a7a678f5bc35dfb4ee19914aec3c108918' def clock_pair_ns() -> tuple[int, int] | None: diff --git a/openpilot/starpilot/speed_limits/vision/tests/test_vision_asset_metadata_privacy.py b/openpilot/starpilot/speed_limits/vision/tests/test_vision_asset_metadata_privacy.py new file mode 100644 index 0000000000..917429872d --- /dev/null +++ b/openpilot/starpilot/speed_limits/vision/tests/test_vision_asset_metadata_privacy.py @@ -0,0 +1,18 @@ +from pathlib import Path +import unittest + + +class TestVisionAssetMetadataPrivacy(unittest.TestCase): + def test_numeric_classifier_metadata(self): + asset = Path(__file__).resolve().parents[1] / 'assets' / 'speed_limit_us_value_classifier.onnx' + data = asset.read_bytes() + for prefix in (b'/Users/', b'/Volumes/', b'/home/', b'/tmp/', b'C:\\Users\\'): + with self.subTest(prefix=prefix): + self.assertNotIn(prefix, data) + self.assertIn(b'Ultralytics', data) + self.assertIn(b'AGPL-3.0 License (https://ultralytics.com/license)', data) + self.assertIn(b'https://docs.ultralytics.com', data) + + +if __name__ == '__main__': + unittest.main() diff --git a/prebuilt.json b/prebuilt.json index f525fa8ffd..d983f57224 100644 --- a/prebuilt.json +++ b/prebuilt.json @@ -1 +1 @@ -{"protected_inventory_sha256": "1e6ffb7ca4d42bc8a37087a4e0984e847bb03682ff85c31be57cf0a78bd4b8bd", "schema_version": 1} +{"protected_inventory_sha256": "fb78a23b1998f94730ef0e7f177e9477f8bee39b6960c9328939e91c60e8f2f9", "schema_version": 1}