Python を使用して VIN 番号から情報を抽出する GUI を作成する
車両識別番号 (VIN) は、1981 年以降に製造されたすべての車両に割り当てられる固有の 17 桁のコードです。これには、車両のメーカー、モデル、製造年、製造国、およびその他の関連詳細に関する情報が含まれています。この取扱説明書では、Python プログラミング言語を使用してグラフィカル ユーザー インターフェイス (GUI) を作成し、VIN 番号から車両情報を抽出する方法を学びます。
前提条件
GUI の作成の詳細に入る前に、Python プログラミング、オブジェクト指向プログラミング (OOP) の概念、および Tkinter モジュールの操作方法について基本を理解しておく必要があります。
推奨設定一覧
pip install tkinter、pandas、リクエスト
ユーザーは、VS-Code、PyCharm、Atom、Sublime text などのスタンドアロン IDE にアクセスできることが期待されます。
-
Kaggle.com、Google Cloud プラットフォームなどのオンライン Python コンパイラーも使用できます。
Python のバージョンが更新されました。記事執筆時点ではバージョン3.10.9を使用しています。
Jupyter Notebook の使用に関する知識。
仮想環境の知識と応用は有益ですが、必須ではありません。また、何らかのコンテキストで API を使用することも役立ちます。
タスクを完了するために必要な手順
ステップ 1: 必要なモジュールをインポートする
from tkinter import*
import requests
次に、必要なライブラリを Python スクリプトにインポートする必要があります。この場合、API リクエストを作成するための request ライブラリと、GUI インターフェイスを作成するための tkinter ライブラリが必要です。これがインポートステートメントです-
ステップ 2: VIN データをフェッチする関数を作成する
次に、API を使用して VIN 番号から車両情報を取得する関数を作成する必要があります。この例では、NHTSA (米国道路交通安全局) の VIN デコーダー API を使用して車両情報を取得しています。関数は次のとおりです。
def get_vin_data(vin):
url = f'https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{vin}?format=json'
response = requests.get(url)
if response.status_code == 200:
return response.json()['Results']
else:
return None
この関数は、VIN 番号を入力として受け取り、車両情報を JSON オブジェクトとして返します。
ステップ3: VINを入力し、車両情報を表示するためのGUIインターフェイスを作成します-
次に、ユーザーが VIN 番号を入力し、車両情報を出力として表示できる GUI インターフェイスを作成する必要があります。この例では、tkinter ライブラリを使用して GUI 要素を作成しています。コードは次のとおりです-
def display_vin_data():
vin = vin_entry.get()
data = get_vin_data(vin)
if data:
for d in data:
info_text.insert(END, f"{d['Variable']} : {d['Value']}\n")
else:
info_text.insert(END, "No data found for the VIN provided.\n")
root = Tk()
root.title("VIN Decoder")
vin_label = Label(root, text="Enter VIN: ")
vin_label.pack()
vin_entry = Entry(root)
vin_entry.pack()
submit_button = Button(root, text="Decode", command=display_vin_data)
submit_button.pack()
info_text = Text(root)
info_text.pack()
root.mainloop()
このコードは、ラベル、テキスト ボックス、ボタン、および別のテキスト ボックスを含むウィンドウを作成します。ユーザーはテキスト ボックスに VIN 番号を入力し、[デコード] ボタンをクリックすると 2 番目のテキスト ボックスに車両情報が表示されます。
ステップ 4: 結果を技術文書として表示します。
車両情報を技術文書として表示したい場合は、display_vin_data 関数を変更して、希望の形式で文書を生成できます。更新されたコードは次のとおりです
def display_vin_data():
vin = vin_entry.get()
data = get_vin_data(vin)
if data:
doc_text = f"Vehicle Information\n{'='*20}\n"
for d in data:
doc_text += f"{d['Variable']} : {d['Value']}\n"
info_text.insert(END, doc_text)
else:
info_text.insert(END, "No data found for the VIN provided.\n")
このコードは、次の形式で技術文書を生成します。
Vehicle Information
====================
<Variable 1> : <Value 1>
<Variable 2> : <Value 2>
...
<Variable n> : <Value n>
最終的なコード、プログラム
import requests
from tkinter import *
def get_vin_data(vin):
url = f'https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{vin}?format=json'
response = requests.get(url)
if response.status_code == 200:
return response.json()['Results']
else:
return None
def display_vin_data():
vin = vin_entry.get()
data = get_vin_data(vin)
if data:
doc_text = f"Vehicle Information\n{'='*20}\n"
for d in data:
doc_text += f"{d['Variable']} : {d['Value']}\n"
info_text.insert(END, doc_text)
else:
info_text.insert(END, "No data found for the VIN provided.\n")
root = Tk()
root.title("VIN Decoder")
vin_label = Label(root, text="Enter VIN: ")
vin_label.pack()
vin_entry = Entry(root)
vin_entry.pack()
submit_button = Button(root, text="Decode", command=display_vin_data)
submit_button.pack()
info_text = Text(root)
info_text.pack()
root.mainloop()
出力
現実世界の例
例 1: VIN 番号から車両情報を取得する
ユーザーは入力フィールドに VIN 番号を入力します (例: 1HGCM82633A004352)
ユーザーが入力フィールドに有効な API キーを入力します。
ユーザーが「送信」ボタンをクリックする
GUI は API から取得した車両情報を表示します (例: 2003 Honda Accord)
出力
画面はユーザーに VIN の入力を求めます
これで、希望どおりの VIN の出力が確認できるため、アプリが動作していることがわかります。
例 2: 無効な VIN 番号のエラー処理
-
ユーザーが入力フィールドに無効な VIN 番号を入力しました (例: 1234567890)
ユーザーが入力フィールドに有効な API キーを入力します。
ユーザーが「送信」ボタンをクリックする
GUI には、VIN 番号が無効であることを示すエラー メッセージが表示され、エラーが特定されます。
2 番目のシナリオでは、出力の妥当性をチェックできる品質管理ステップであるため、エラー チェックのためにテストしています。
例 3: 間違った API キーのエラー処理
ユーザーが入力フィールドに有効な VIN 番号を入力します (例: JM1BK123451234567)
ユーザーが入力フィールドに間違ったまたは無効な API キーを入力した
ユーザーが「送信」ボタンをクリックする
GUI は、VIN の一部の桁に問題があることを示すエラー メッセージを表示しますが、可能な限り最も近い値を見つけるために最善を尽くします。これにより、これが欠損値のチェックや予測分析にも使用できることがわかります。
結論
このスクリプトを使用するには、.py 拡張子が付いた Python ファイルとして保存し、Python インタープリターを使用して実行します。 GUI ウィンドウが開いたら、テキスト ボックスに VIN 番号を入力し、[デコード] ボタンをクリックして車両情報を取得し、技術文書として表示します。
Python を使用して VIN 番号から車両情報を抽出する GUI を作成することは、自動車業界や車両の歴史に興味がある人にとって役立つスキルです。この取扱説明書に概説されている手順に従うことで、この機能を独自の Python プログラムやアプリケーションに簡単に統合できます。あなたが自動車愛好家、整備士、自動車歴史家であっても、このツールは興味のある自動車について貴重な洞察を得るのに役立ちます。
注: この例では、NHTSA の VIN デコーダ API を使用します。これには、未登録ユーザーに対する 1 日あたり 25 リクエストの制限があります。さらにリクエストを行う必要がある場合は、API キーを登録し、URL でそれを使用できます。