parent
772e31208e
commit
5b1660eae6
1 changed files with 153 additions and 0 deletions
@ -0,0 +1,153 @@ |
||||
{ |
||||
"cells": [ |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": null, |
||||
"metadata": {}, |
||||
"outputs": [], |
||||
"source": [ |
||||
"\"\"\"In this example, we use the public comma car segments database to check if vin fingerprinting is feasible for ford.\"\"\"\n", |
||||
"\n", |
||||
"from openpilot.tools.lib.comma_car_segments import get_comma_car_segments_database\n", |
||||
"from openpilot.selfdrive.car.ford.values import CAR\n", |
||||
"\n", |
||||
"database = get_comma_car_segments_database()\n", |
||||
"\n", |
||||
"platforms = [c.value for c in CAR]" |
||||
] |
||||
}, |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": 2, |
||||
"metadata": {}, |
||||
"outputs": [ |
||||
{ |
||||
"name": "stdout", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"Skipping platform: FORD F-150 14TH GEN, no data available\n" |
||||
] |
||||
} |
||||
], |
||||
"source": [ |
||||
"from openpilot.tools.lib.logreader import get_first_message, LogReader\n", |
||||
"\n", |
||||
"\n", |
||||
"FW_TO_CHECK = set()\n", |
||||
"\n", |
||||
"for platform in platforms:\n", |
||||
" if platform not in database:\n", |
||||
" print(f\"Skipping platform: {platform}, no data available\")\n", |
||||
" continue\n", |
||||
"\n", |
||||
" for segment in database[platform]:\n", |
||||
" lr = LogReader(segment)\n", |
||||
" CP = get_first_message(lr, \"carParams\").carParams\n", |
||||
" FW_TO_CHECK.add((CP.carVin, CP.carFw, CP.carFingerprint, CP.fuzzyFingerprint, CP.fingerprintSource))" |
||||
] |
||||
}, |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": 6, |
||||
"metadata": {}, |
||||
"outputs": [ |
||||
{ |
||||
"name": "stdout", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"vin: 3FTTW8E31PRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: FORD MAVERICK 1ST GEN correct: True\n", |
||||
"vin: 3FMTK3SU0MMXXXXXX expected: FORD MUSTANG MACH-E 1ST GEN fuzzy: FORD MUSTANG MACH-E 1ST GEN correct: True\n", |
||||
"vin: 3FMCR9B69NRXXXXXX expected: FORD BRONCO SPORT 1ST GEN fuzzy: FORD BRONCO SPORT 1ST GEN correct: True\n", |
||||
"vin: 3FTTW8F98NRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: FORD MAVERICK 1ST GEN correct: True\n", |
||||
"vin: WF0NXXGCHNJXXXXXX expected: FORD FOCUS 4TH GEN fuzzy: FORD FOCUS 4TH GEN correct: True\n", |
||||
"vin: 3FTTW8E31PRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: FORD MAVERICK 1ST GEN correct: True\n", |
||||
"vin: WF0NXXGCHNJXXXXXX expected: FORD FOCUS 4TH GEN fuzzy: FORD FOCUS 4TH GEN correct: True\n", |
||||
"vin: 3FMCR9B69NRXXXXXX expected: FORD BRONCO SPORT 1ST GEN fuzzy: FORD BRONCO SPORT 1ST GEN correct: True\n", |
||||
"vin: 1FM5K7LC0MGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 5LM5J7XC9LGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 00000000000XXXXXX expected: FORD ESCAPE 4TH GEN fuzzy: FORD ESCAPE 4TH GEN correct: True\n", |
||||
"vin: 1FTVW1EL4NWXXXXXX expected: FORD F-150 LIGHTNING 1ST GEN fuzzy: FORD F-150 LIGHTNING 1ST GEN correct: True\n", |
||||
"vin: 1FM5K7LC0MGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 1FMCU9J94MUXXXXXX expected: FORD ESCAPE 4TH GEN fuzzy: FORD ESCAPE 4TH GEN correct: True\n", |
||||
"vin: 3FMCR9B69NRXXXXXX expected: FORD BRONCO SPORT 1ST GEN fuzzy: FORD BRONCO SPORT 1ST GEN correct: True\n", |
||||
"vin: 00000000000XXXXXX expected: FORD ESCAPE 4TH GEN fuzzy: FORD ESCAPE 4TH GEN correct: True\n", |
||||
"vin: 3FTTW8E99NRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: FORD MAVERICK 1ST GEN correct: True\n", |
||||
"vin: 3FMTK3SU0MMXXXXXX expected: FORD MUSTANG MACH-E 1ST GEN fuzzy: FORD MUSTANG MACH-E 1ST GEN correct: True\n", |
||||
"vin: 1FTVW1EL4NWXXXXXX expected: FORD F-150 LIGHTNING 1ST GEN fuzzy: FORD F-150 LIGHTNING 1ST GEN correct: True\n", |
||||
"vin: 00000000000XXXXXX expected: FORD ESCAPE 4TH GEN fuzzy: FORD ESCAPE 4TH GEN correct: True\n", |
||||
"vin: 1FM5K8GC7LGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 1FM5K7LC0MGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 3FMCR9B69NRXXXXXX expected: FORD BRONCO SPORT 1ST GEN fuzzy: FORD BRONCO SPORT 1ST GEN correct: True\n", |
||||
"vin: 1FM5K8HC7MGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: WF0NXXGCHNJXXXXXX expected: FORD FOCUS 4TH GEN fuzzy: FORD FOCUS 4TH GEN correct: True\n", |
||||
"vin: 3FTTW8E31PRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: FORD MAVERICK 1ST GEN correct: True\n", |
||||
"vin: 5LM5J7XC8MGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 1FTVW1EL4NWXXXXXX expected: FORD F-150 LIGHTNING 1ST GEN fuzzy: FORD F-150 LIGHTNING 1ST GEN correct: True\n", |
||||
"vin: 1FM5K8GC7NGXXXXXX expected: FORD EXPLORER 6TH GEN fuzzy: FORD EXPLORER 6TH GEN correct: True\n", |
||||
"vin: 3FMTK3SU0MMXXXXXX expected: FORD MUSTANG MACH-E 1ST GEN fuzzy: FORD MUSTANG MACH-E 1ST GEN correct: True\n", |
||||
"Success rate: 100.00%\n" |
||||
] |
||||
} |
||||
], |
||||
"source": [ |
||||
"from openpilot.selfdrive.car.fw_versions import build_fw_dict\n", |
||||
"from openpilot.selfdrive.car.ford.values import match_fw_to_car_fuzzy\n", |
||||
"from openpilot.selfdrive.car.ford.fingerprints import FW_VERSIONS\n", |
||||
"\n", |
||||
"success, count = 0, 0\n", |
||||
"for vin, car_fw, expected_platform, fuzzy, surce in FW_TO_CHECK:\n", |
||||
" if len(car_fw) == 0:\n", |
||||
" print(f\"Skipping vin: {vin} platform: {expected_platform}, no car fw\")\n", |
||||
" continue\n", |
||||
" car_fw = build_fw_dict(car_fw)\n", |
||||
" fuzzy_fingerprint = match_fw_to_car_fuzzy(car_fw, FW_VERSIONS)\n", |
||||
" if len(fuzzy_fingerprint) == 0:\n", |
||||
" fuzzy_fingerprint = \"mock\"\n", |
||||
" elif len(fuzzy_fingerprint) > 1:\n", |
||||
" fuzzy_fingerprint = \"multiple\"\n", |
||||
" else:\n", |
||||
" fuzzy_fingerprint = list(fuzzy_fingerprint)[0]\n", |
||||
"\n", |
||||
" correct = fuzzy_fingerprint == expected_platform\n", |
||||
" print(f\"vin: {vin} expected: {expected_platform: <30} fuzzy: {fuzzy_fingerprint: <30} correct: {correct}\")\n", |
||||
" if not correct:\n", |
||||
" print(f\" source: {surce}\")\n", |
||||
" print(f\" fuzzy: {fuzzy}\")\n", |
||||
" print(\" car_fw:\")\n", |
||||
" fws = set()\n", |
||||
" for fw in car_fw:\n", |
||||
" if fw.brand != \"ford\" or fw.logging:\n", |
||||
" continue\n", |
||||
" fw_version = fw.fwVersion.rstrip(b\"\\0\")\n", |
||||
" fws.add(f\"{fw.ecu} {fw_version}\")\n", |
||||
" for fw in sorted(fws):\n", |
||||
" print(f\" {fw}\")\n", |
||||
" success += correct\n", |
||||
" count += 1\n", |
||||
"\n", |
||||
"print(f\"Success rate: {success / count * 100:.2f}%\")" |
||||
] |
||||
} |
||||
], |
||||
"metadata": { |
||||
"kernelspec": { |
||||
"display_name": ".venv", |
||||
"language": "python", |
||||
"name": "python3" |
||||
}, |
||||
"language_info": { |
||||
"codemirror_mode": { |
||||
"name": "ipython", |
||||
"version": 3 |
||||
}, |
||||
"file_extension": ".py", |
||||
"mimetype": "text/x-python", |
||||
"name": "python", |
||||
"nbconvert_exporter": "python", |
||||
"pygments_lexer": "ipython3", |
||||
"version": "3.11.4" |
||||
} |
||||
}, |
||||
"nbformat": 4, |
||||
"nbformat_minor": 2 |
||||
} |
Loading…
Reference in new issue