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