ナンバープレート認識ビデオ
記事末の公式アカウントにソースコードあり
目次
自動運転技術の急速な発展に伴い、運転支援システムにおける車間距離推定の重要性がますます高まっています。本論文は主にYOLOv5に基づく車両距離推定法を研究し,原理的アイデア,卒業設計のアイデア,および対応するPythonコードを詳細に紹介した。私たちの実験結果は、この方法が高い精度を持ち、実用的なアプリケーションのニーズを満たすことができることを示しています。
1 はじめに
車間距離推定は、自動運転、交通監視、運転支援システムなど、多くの分野で幅広い用途があります。これらのアプリケーションでは、車両間の距離を正確に推定することは、交通事故を回避し、交通安全を向上させる上で非常に重要です。本論文では、車両を検出・追跡することで高精度な車間距離推定を実現するYOLOv5に基づく車間距離推定手法を提案する。
2.YOLOv5の紹介
YOLOv5 はエンド ツー エンドのターゲット検出アルゴリズムであり、その正式名称は「You Only Look Once: Unified, Real-Time Object Detection」です。YOLOシリーズの第5世代で、前世代よりも大幅に性能が向上しています。YOLOv5 は、リアルタイムのビデオ ストリームで高速かつ正確なオブジェクト検出を可能にする単一段階の検出方法を採用しています。
3. 原則の考え方
本稿での車間距離推定方法は、主に次の 2 つのステップに分けられます。
-
車両検出: YOLOv5 を使用して画像内の車両を検出し、車両の境界ボックス情報を抽出します。
-
距離推定: 車両のバウンディング ボックス情報に基づいて、車両間の距離が推定されます。
3.1 車両検知
YOLOv5 モデルは事前トレーニング段階で車両を認識することを学習しており、このモデルを直接使用して画像内の車両を検出できます。まず、入力画像を YOLOv5 で必要なサイズに変換してから、推論のためにモデルに入力する必要があります。モデルの出力には、車両の境界ボックス座標と信頼スコアが含まれます。
3.2 距離推定
車両の境界ボックス情報を取得したら、車両間の距離を推定する必要があります。ここで使用
距離推定には、ホモグラフィ行列に基づく方法が提案されています。ホモグラフィは、画像内の点を別の平面上の点にマッピングする 3x3 行列です。ホモグラフィ行列を計算することにより、画像座標系の点を地上座標系にマッピングして、地上座標系での車両の位置を取得できます。
実際の操作では、まずカメラをキャリブレーションし、カメラの内部参照行列と歪み係数を取得する必要があります。次に、地上の 4 つの基準点を選択し、地上座標系でそれらの座標を測定する必要があります。これらの 4 つのポイントから、ホモグラフィ行列を計算できます。
ホモグラフィ マトリックスを使用すると、車両の境界ボックスの下部中心点を地上座標系にマッピングし、地上座標系で 2 台の車両間の距離を計算できます。具体的な計算式は次のとおりです。
距離 = sqrt((x1 - x2)^2 + (y1 - y2)^2)
4. 卒業デザインのアイデア
この論文の卒業デザインは、主に次の部分を含みます。
- データの準備: 車両の画像データを収集し、データの前処理を実行します。
- モデルのトレーニング: YOLOv5 の事前トレーニング済みモデルを車両検出に使用します。
- カメラのキャリブレーション: カメラの内部参照行列と歪み係数を取得します。
- ホモグラフィ行列の計算: 基準点を選択し、ホモグラフィ行列を計算します。
- 距離推定: ホモグラフィ行列に基づいて、車両間の距離が推定されます。
- 結果表示:検出した車両のバウンディングボックスと距離情報を原画像に重ねてリアルタイムに表示します。
4.1 データの準備
データ準備には、主に車両画像データの収集とデータの前処理が含まれます。
- 車両画像データの収集: KITTI、COCO などの公開データセットから取得するか、自分で収集することができます。
- データの前処理: 画像データをスケーリングおよびトリミングして、YOLOv5 モデルの入力サイズに適合させます。
import os import cv2 def preprocess_image(image_path, target_size): image = cv2.imread(image_path) image = cv2.resize(image, target_size) return image
4.2 モデルトレーニング
YOLOv5 事前トレーニング済みモデルを使用した車両検出。まず、YOLOv5 モデルをロードしてから、推論のために前処理された画像をモデルに入力する必要があります。
from yolov5 import YOLOv5
def load_model(model_path):
model = YOLOv5(model_path)
return model
def vehicle_detection(model, image):
result = model.predict(image)
return result
4.3 カメラのキャリブレーション
カメラの内部パラメーター マトリックスと歪み係数を取得します。カメラのキャリブレーションには OpenCV のキャリブレーション ツールを使用できます。まず、チェッカーボード キャリブレーション ボードを準備し、さまざまな角度から複数のチェッカーボード画像を収集する必要があります。
import cv2
import numpy as np
def calibrate_camera(images, board_size, square_size):
obj_points = []
img_points = []
objp = np.zeros((board_size[0] * board_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:board_size[0], 0:board_size[1]].T.reshape(-1, 2) * square_size
for image in images:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, board_size, None)
if ret:
obj_points.append(objp)
img_points.append(corners)
ret, mtx, dist, _, _ = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None)
return mtx, dist
4.4 ホモグラフィ行列の計算
地上で 4 つの基準点を選択し、地上座標系でそれらの座標を測定します。これらの 4 つのポイントから、ホモグラフィ行列を計算できます。
def compute_homography(src_points, dst_points):
src_points = np.float32(src_points)
dst_points = np.float32(dst_points)
homography, _ = cv2.findHomography(src_points, dst_points)
return homography
4.5 距離推定
ホモグラフィ行列から、車両間の距離が推定されます。まず、車両のバウンディング ボックスの下部中心点を地上座標系にマッピングし、地上座標系で 2 台の車両間の距離を計算する必要があります。
def distance_estimation(homography, bbox1, bbox2):
# 计算车辆底部中心点的坐标
bottom_center1 = np.array([(bbox1[0] + bbox1[2]) / 2, bbox1[3], 1]).reshape(3, 1)
bottom_center2 = np.array([(bbox2[0] + bbox2[2]) / 2, bbox2[3], 1]).reshape(3, 1)
# 将图像坐标映射到地面坐标
world_center1 = np.dot(homography, bottom_center1)
world_center1 = world_center1 / world_center1[2]
world_center2 = np.dot(homography, bottom_center2)
world_center2 = world_center2 / world_center2[2]
# 计算地面坐标系中的距离
distance = np.sqrt((world_center1[0] - world_center2[0])**2 + (world_center1[1] - world_center2[1])**2)
return distance[0]
4.6 結果表示
検出した車両のバウンディングボックスと距離情報を原画像に重ねてリアルタイムに表示します。
def draw_bbox_and_distance(image, bboxes, distances):
for i, bbox in enumerate(bboxes):
x1, y1, x2, y2 = bbox
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, f"Distance: {distances[i]:.2f}m", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
return image
def display_result(image, bboxes, homography):
distances = []
for i in range(len(bboxes) - 1):
distance = distance_estimation(homography, bboxes[i], bboxes[i + 1])
distances.append(distance)
result_image = draw_bbox_and_distance(image, bboxes, distances)
cv2.imshow('Result', result_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. 注意事項
-
データ品質: 収集された画像データが高解像度で鮮明であることを確認し、ぼやけ、露出オーバー、露出不足などの問題を回避します。さらに、モデルの認識を容易にするために、画像内の車両のオクルージョンが少ないことを確認してください。
-
カメラのキャリブレーション: カメラのキャリブレーションは、車両距離推定の精度にとって重要です。キャリブレーション プロセス中に、収集されたチェッカーボード イメージの角度、距離、および照明条件が異なることを確認して、キャリブレーション結果の堅牢性を向上させます。
-
シナリオの選択: ホモグラフィ行列を計算するときは、選択した地上基準点が実際のアプリケーション シナリオを表すことができることを確認してください.たとえば、道路上の交通標識を基準点として選択できます. 同時に、距離推定の精度に影響を与えないように、高さの変化が明らかな地面エリアを選択しないように注意してください。
-
リアルタイム性能: 実際のアプリケーションでは、アルゴリズムのリアルタイム性能を考慮する必要があります。YOLOv5 モデルの構造を最適化し、入力画像のサイズを小さくすることで、検出速度を向上させることができます。さらに、GPU を使用して計算を高速化し、リアルタイム要件を満たすことができます。
-
例外処理: 実際のアプリケーションでは、車両の閉塞や画像ノイズなどの異常な状況に遭遇する可能性があります。これらの異常は、距離推定の堅牢性を確保するために処理する必要があります。たとえば、物体追跡アルゴリズムを使用して、車両の閉塞を処理できます。
-
システム統合: 車両距離推定方法を実際のアプリケーションに統合する場合、センサーの同期、システムの安定性と信頼性など、他の関連要因を考慮する必要があります。実際の展開プロセスでは、さまざまなアプリケーション シナリオや要件に適応するために、アルゴリズムをある程度調整する必要がある場合があります。
-
規制と倫理: 車間距離推定システムを開発および展開する際には、関連する法律と規制を遵守し、倫理的な問題を十分に考慮する必要があります。ユーザーのプライバシーを尊重し、ユーザーの個人情報を画像で公開しないようにします。また、悪意のある攻撃や改ざんを防ぐために、システムのセキュリティを確保する必要があります。
5. まとめ
この論文では、YOLOv5に基づく車両距離推定方法を提案し、卒業設計のアイデアと対応するPythonコードを詳細に紹介します。この方法により、リアルタイムのビデオ ストリームで高速かつ正確な車両検出と距離推定が可能になり、自動運転、交通監視、運転支援システムなどのアプリケーションを強力にサポートします。今後の作業では、ホモグラフィ行列の計算方法をさらに最適化して、距離推定の精度を向上させることができます。