parent
50f14226cd
commit
31b53aba05
1 changed files with 378 additions and 0 deletions
@ -0,0 +1,378 @@ |
|||||||
|
{ |
||||||
|
"cells": [ |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": 1, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "stderr", |
||||||
|
"output_type": "stream", |
||||||
|
"text": [ |
||||||
|
"kj/filesystem-disk-unix.c++:1703: warning: PWD environment variable doesn't match current directory; pwd = /mnt/c/Users/camer/AppData/Local/Programs/Microsoft VS Code\n" |
||||||
|
] |
||||||
|
} |
||||||
|
], |
||||||
|
"source": [ |
||||||
|
"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": [ |
||||||
|
{ |
||||||
|
"data": { |
||||||
|
"application/vnd.jupyter.widget-view+json": { |
||||||
|
"model_id": "9ddb0675cd4a4f46a23b608252324ed4", |
||||||
|
"version_major": 2, |
||||||
|
"version_minor": 0 |
||||||
|
}, |
||||||
|
"text/plain": [ |
||||||
|
" 0%| | 0/261 [00:00<?, ?it/s]" |
||||||
|
] |
||||||
|
}, |
||||||
|
"metadata": {}, |
||||||
|
"output_type": "display_data" |
||||||
|
} |
||||||
|
], |
||||||
|
"source": [ |
||||||
|
"import random\n", |
||||||
|
"\n", |
||||||
|
"from tqdm.contrib.concurrent import thread_map\n", |
||||||
|
"\n", |
||||||
|
"from openpilot.tools.lib.logreader import LogReader\n", |
||||||
|
"\n", |
||||||
|
"\n", |
||||||
|
"def process(segment):\n", |
||||||
|
" CP = LogReader(segment).first(\"carParams\")\n", |
||||||
|
" return CP.carVin, CP.carFw, CP.carFingerprint, CP.fuzzyFingerprint, CP.fingerprintSource\n", |
||||||
|
"\n", |
||||||
|
"\n", |
||||||
|
"FW_TO_CHECK = set(thread_map(process, [\n", |
||||||
|
" segment for platform in platforms\n", |
||||||
|
" for segment in random.sample(database[platform], min(len(database[platform]), 50))\n", |
||||||
|
"]))" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": 3, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [ |
||||||
|
{ |
||||||
|
"name": "stdout", |
||||||
|
"output_type": "stream", |
||||||
|
"text": [ |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"Skipping vin: 00000000000XXXXXX platform: FORD F-150 14TH GEN, no car fw\n", |
||||||
|
"Skipping vin: 00000000000XXXXXX platform: FORD F-150 14TH GEN, no car fw\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"Skipping vin: 00000000000XXXXXX platform: FORD F-150 14TH GEN, no car fw\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"Skipping vin: 00000000000XXXXXX platform: FORD F-150 14TH GEN, no car fw\n", |
||||||
|
"Skipping vin: 00000000000XXXXXX platform: FORD F-150 14TH GEN, no car fw\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"vin: 3FTTW8E3XPRXXXXXX expected: FORD MAVERICK 1ST GEN fuzzy: mock correct: False\n", |
||||||
|
" source: fw\n", |
||||||
|
" fuzzy: True\n", |
||||||
|
" car_fw:\n", |
||||||
|
" abs b'PZ6C-2D053-ED'\n", |
||||||
|
" engine b'PZ6A-14C204-JE'\n", |
||||||
|
" eps b'NZ6C-14D003-AL'\n", |
||||||
|
" fwdCamera b'NZ6T-14F397-AC'\n", |
||||||
|
"Success rate: 95.70%\n" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"data": { |
||||||
|
"text/html": [ |
||||||
|
"<div>\n", |
||||||
|
"<style scoped>\n", |
||||||
|
" .dataframe tbody tr th:only-of-type {\n", |
||||||
|
" vertical-align: middle;\n", |
||||||
|
" }\n", |
||||||
|
"\n", |
||||||
|
" .dataframe tbody tr th {\n", |
||||||
|
" vertical-align: top;\n", |
||||||
|
" }\n", |
||||||
|
"\n", |
||||||
|
" .dataframe thead th {\n", |
||||||
|
" text-align: right;\n", |
||||||
|
" }\n", |
||||||
|
"</style>\n", |
||||||
|
"<table border=\"1\" class=\"dataframe\">\n", |
||||||
|
" <thead>\n", |
||||||
|
" <tr style=\"text-align: right;\">\n", |
||||||
|
" <th></th>\n", |
||||||
|
" <th>source</th>\n", |
||||||
|
" <th>expected</th>\n", |
||||||
|
" <th>fuzzy</th>\n", |
||||||
|
" <th>correct</th>\n", |
||||||
|
" </tr>\n", |
||||||
|
" </thead>\n", |
||||||
|
" <tbody>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>0</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD BRONCO SPORT 1ST GEN</td>\n", |
||||||
|
" <td>FORD BRONCO SPORT 1ST GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>1</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD ESCAPE 4TH GEN</td>\n", |
||||||
|
" <td>FORD ESCAPE 4TH GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>5</th>\n", |
||||||
|
" <td>fixed</td>\n", |
||||||
|
" <td>FORD EXPLORER 6TH GEN</td>\n", |
||||||
|
" <td>FORD EXPLORER 6TH GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>8</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD EXPLORER 6TH GEN</td>\n", |
||||||
|
" <td>FORD EXPLORER 6TH GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>11</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD MAVERICK 1ST GEN</td>\n", |
||||||
|
" <td>FORD MAVERICK 1ST GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>12</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD MAVERICK 1ST GEN</td>\n", |
||||||
|
" <td>mock</td>\n", |
||||||
|
" <td>False</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>17</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD FOCUS 4TH GEN</td>\n", |
||||||
|
" <td>FORD FOCUS 4TH GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>103</th>\n", |
||||||
|
" <td>fixed</td>\n", |
||||||
|
" <td>FORD MAVERICK 1ST GEN</td>\n", |
||||||
|
" <td>FORD MAVERICK 1ST GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>119</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD F-150 LIGHTNING 1ST GEN</td>\n", |
||||||
|
" <td>FORD F-150 LIGHTNING 1ST GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" <tr>\n", |
||||||
|
" <th>149</th>\n", |
||||||
|
" <td>fw</td>\n", |
||||||
|
" <td>FORD MUSTANG MACH-E 1ST GEN</td>\n", |
||||||
|
" <td>FORD MUSTANG MACH-E 1ST GEN</td>\n", |
||||||
|
" <td>True</td>\n", |
||||||
|
" </tr>\n", |
||||||
|
" </tbody>\n", |
||||||
|
"</table>\n", |
||||||
|
"</div>" |
||||||
|
], |
||||||
|
"text/plain": [ |
||||||
|
" source expected fuzzy \\\n", |
||||||
|
"0 fw FORD BRONCO SPORT 1ST GEN FORD BRONCO SPORT 1ST GEN \n", |
||||||
|
"1 fw FORD ESCAPE 4TH GEN FORD ESCAPE 4TH GEN \n", |
||||||
|
"5 fixed FORD EXPLORER 6TH GEN FORD EXPLORER 6TH GEN \n", |
||||||
|
"8 fw FORD EXPLORER 6TH GEN FORD EXPLORER 6TH GEN \n", |
||||||
|
"11 fw FORD MAVERICK 1ST GEN FORD MAVERICK 1ST GEN \n", |
||||||
|
"12 fw FORD MAVERICK 1ST GEN mock \n", |
||||||
|
"17 fw FORD FOCUS 4TH GEN FORD FOCUS 4TH GEN \n", |
||||||
|
"103 fixed FORD MAVERICK 1ST GEN FORD MAVERICK 1ST GEN \n", |
||||||
|
"119 fw FORD F-150 LIGHTNING 1ST GEN FORD F-150 LIGHTNING 1ST GEN \n", |
||||||
|
"149 fw FORD MUSTANG MACH-E 1ST GEN FORD MUSTANG MACH-E 1ST GEN \n", |
||||||
|
"\n", |
||||||
|
" correct \n", |
||||||
|
"0 True \n", |
||||||
|
"1 True \n", |
||||||
|
"5 True \n", |
||||||
|
"8 True \n", |
||||||
|
"11 True \n", |
||||||
|
"12 False \n", |
||||||
|
"17 True \n", |
||||||
|
"103 True \n", |
||||||
|
"119 True \n", |
||||||
|
"149 True " |
||||||
|
] |
||||||
|
}, |
||||||
|
"execution_count": 3, |
||||||
|
"metadata": {}, |
||||||
|
"output_type": "execute_result" |
||||||
|
} |
||||||
|
], |
||||||
|
"source": [ |
||||||
|
"import pandas as pd\n", |
||||||
|
"\n", |
||||||
|
"from openpilot.selfdrive.car.fw_versions import build_fw_dict\n", |
||||||
|
"from openpilot.selfdrive.car.ford.fingerprints import FW_VERSIONS\n", |
||||||
|
"from openpilot.selfdrive.car.ford.values import match_fw_to_car_fuzzy\n", |
||||||
|
"\n", |
||||||
|
"rows = []\n", |
||||||
|
"success, count = 0, 0\n", |
||||||
|
"for vin, car_fw, expected_platform, fuzzy, source in FW_TO_CHECK:\n", |
||||||
|
" car_fw = list(filter(lambda fw: fw.brand == \"ford\" and not fw.logging, car_fw))\n", |
||||||
|
" if len(car_fw) == 0:\n", |
||||||
|
" print(f\"Skipping vin: {vin} platform: {expected_platform}, no car fw\")\n", |
||||||
|
" continue\n", |
||||||
|
"\n", |
||||||
|
" fuzzy_fingerprint = match_fw_to_car_fuzzy(build_fw_dict(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", |
||||||
|
" rows.append((source, expected_platform, fuzzy_fingerprint, correct))\n", |
||||||
|
" if not correct:\n", |
||||||
|
" print(f\"vin: {vin} expected: {expected_platform: <30} fuzzy: {fuzzy_fingerprint: <30} correct: {correct}\")\n", |
||||||
|
" print(f\" source: {source}\")\n", |
||||||
|
" print(f\" fuzzy: {fuzzy}\")\n", |
||||||
|
" print(\" car_fw:\")\n", |
||||||
|
" fws = set()\n", |
||||||
|
" for fw in car_fw:\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}%\")\n", |
||||||
|
"\n", |
||||||
|
"pd.set_option(\"display.max_rows\", None)\n", |
||||||
|
"\n", |
||||||
|
"df = pd.DataFrame(rows, columns=[\"source\", \"expected\", \"fuzzy\", \"correct\"]).drop_duplicates()\n", |
||||||
|
"df" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": null, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [], |
||||||
|
"source": [] |
||||||
|
} |
||||||
|
], |
||||||
|
"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