NVIDIA Jetson Nano:レーン検出と追跡

Zachariah Peterson
|  投稿日 四月 9, 2020  |  更新日 三月 23, 2021
ステルス機と量子レーダー

自動運転車は徐々に自動車産業の重要な部分となりつつあります。多くの人々は、完全自動運転車が間もなく人間と並んで走るようになると信じており、技術企業は完全自動運転車を展開するための競争に参加しています。2018年12月、Googleの自動運転車プロジェクトから生まれた会社であるWaymoは、フェニックス郊外で商用自動運転車サービスを正式に開始しました。May Mobility、Drive.ai、Uberなどの企業も同じ道を歩んでいます。

自動運転車は壮大なビジョンのように思えるかもしれませんが、半自動運転車はすでに私たちの間にあります。新しいTeslaの車には、Tesla Autopilot機能が搭載されており、車線認識と追跡、アダプティブクルーズコントロール、自動駐車が可能です。道路上の車線を識別し追跡する能力は、無人運転車にとって多くの前提条件の一つです。車線認識は難しい問題のように思えるかもしれませんが、NVIDIA Jetson Nanoハードウェアプラットフォームを使って、車線認識と追跡のアルゴリズムの開発を始めることができます。

Jetson Nano入門

Jetson Nano COMは、Raspberry Pi 3よりもわずかに大きいですが、472 Gflopsのパワーで並列にニューラルネットワークを実行できます。これはRaspberry Pi 3よりも約22倍強力であり、わずか5Wという非常に低い電力で動作します。このボードは、トリムダウンされたLinuxカーネル上で動作する組み込みAIアプリケーションに最適です。高品質な画像およびビデオ処理アプリケーションに必要な処理能力とオンボードメモリを備えています。Jetson Nanoの主な特徴には次のようなものがあります:

  • GPU: 128コアNVIDIA Maxwell™アーキテクチャベースGPU
  • CPU: クアッドコアARM® A57
  • カメラ: MIPI CSI-2 DPHYレーン、12x(モジュール)および1x(デベロッパーキット)
  • メモリ: 4 GB 64ビットLPDDR4; 25.6ギガバイト/秒
  • 接続性: ギガビットイーサネット
  • OSサポート: Linux for Tegra®
  • モジュールサイズ: 70mm x 45mm
  • デベロッパーキットは、コンピュータビジョン/画像処理アプリケーションの新しいアルゴリズムをテストするのに最適なツールです。Jetson Nanoプラットフォームに慣れていない場合は、この記事をご覧ください。そうでなければ、レーン認識のための強力な画像処理アプリケーションを簡単にデプロイする方法を読み進めてください。
Developer kit for NVIDIA Jetson Nano
NVIDIA Jetson Nano 開発キット。 [Image source]

Jetson Nanoを使用したレーン認識

このプロジェクトには、Jetson Nano COMまたは開発ボードとCSIカメラ(Raspberry Pi CSI Camera v2で問題ありません)が必要です。このアプリケーションをNano開発ボードを使用して示しますが、Nano COM用のカスタムベースボードを簡単に構築し、このアプリケーションをデプロイすることができます。CSIカメラはJetson Nanoのカメラポートに接続されますが、USBカメラやIPカメラを使用することもできます。以下は、このプロジェクトを成功させるために必要な要件です:

ハードウェア

  • NVIDIA Jetson Nano
  • CSIカメラ

ソフトウェアパッケージ

  • Python
  • OpenCV
  • Nanocamera

実装

このプロジェクトの完全な実装はGitHubで見つけることができます。このプロジェクトのデモを動作させるために、以下の手順に従ってください。これらの手順は、レーン認識をより正確にすることを目的とした重要な画像処理のステップです。

認識

レーン検出システムの最初のステップは、カメラからのライブ画像を読み取ることができるようになることです。Jetson Nanoを使い始めた新しいユーザーにとって、カメラの操作は難しいかもしれません。このため、NanoCameraライブラリを使用します。このライブラリは、本番環境向けのアプリケーションには最適な選択ではありませんが、ここで示されているような単純なアプリケーションには機能します。

まず、pipでライブラリをインストールします:

.

カメラからのライブ画像を読み取ります:

.

ノイズをブラーで除去

画像を滑らかにし、望ましくないノイズを除去するために、ガウシアンブラーを適用できます。これには、各ピクセルの値を周囲のピクセルの加重平均として計算することが含まれます。

Gaussian blur algorithm for lane recognition
画像平滑化のためのガウシアンブラー アルゴリズム。[画像ソース]

OpenCVには、画像にガウシアンブラーを適用するための関数が含まれています:

.

色変換

ガウシアンブラーの後、画像はまだRGBのままであり、HSV色空間に変換する必要があります。色の分離は、画像から望ましくない色を除去するために使用されます。画像がHSVになると、グレースケールの範囲を指定することで、画像から不要な色を「取り除く」ことができます。

.

形態学的操作 - 膨張

拡張は、画像内のオブジェクトの境界にピクセルを追加します。画像に拡張を適用すると、線画像の緩い空間を閉じるのに役立ちます。

.

Canny(エッジ検出)

車線の線を検出するために、Cannyエッジ検出という技術を使用できます。Cannyエッジ検出は、オブジェクトから有用な構造情報を抽出するために使用できます。OpenCVライブラリは、画像内のエッジを検出するために使用できるCannyエッジ検出機能を提供しています。Canny検出を機能させるためには、最小および最大の閾値を供給する必要があります。OpenCVは通常、値を(100、200)または(200、400)と推奨しているので、(200、400)を使用しています。

.
Canny edge detection applied to a camera image
Cannyエッジ検出を施した画像。画像に示されたレーンに注目。

関心領域の分離

Cannyエッジ出力画像にはノイズが含まれています。画像内の車線以外のすべての情報は、関心領域を縮小することによって分離できます。車線認識とナビゲーションを行う際に、必ずしも画像全体を見る必要はありません。これを行う簡単な方法は、画像の上半分を切り取ることです。

ROI reduction for lane recognition
オリジナル画像(左)と、切り取られた関心領域を持つ画像(右)。

関心領域を縮小するコードは次のとおりです:

.

線分の検出 - ハフ変換

関心領域を縮小した後、4つの明確な線を持つ車線がはっきりと見えます。しかし、コンピュータはこれらの線が2つの車線の境界を表していることを知りません。したがって、これらの車線線の座標を抽出する方法が必要です。ハフ変換は、線、円、楕円などの特徴を抽出するために画像処理で使用される技術です。これは、線を形成していると思われる多数のピクセルから直線を見つけるために使用できます。これはOpenCVのHoughLinesP関数を使用して行うことができます。この関数は、すべての白いピクセルを通る多くの線を適合させ、いくつかの最小限の閾値制約に従って最も可能性の高い線のセットを返します。

Lines found during lane recognition
ハフ変換を適用した線検出。

こちらがハフ変換を使用して線分を検出するコードです。ここで使用されるほとんどのパラメータは、試行錯誤や参照画像からパラメータを選択することによって決定できます。

.

線分を左右の車線線の2つの線に結合する

detect_line_segments()関数の出力は、端点座標(x1, y1)および(x2, y2)を持つ小さな線のセットを生成します。私たちはそれらを左右の車線線のためのただ2つの線に結合する方法を見つける必要がありますが、それはどのように達成できるでしょうか?一つの方法は、これらの線分をその傾きによって分類することです。

左側の車線線はすべて正の傾きを持ち、右側の車線線に属する線分は負の傾きを持ちます。これら2つの新しいグループに基づいて、線分の傾きと切片の平均を取ることで、左右の車線線の傾きと切片を得ることができます。これは、average_slope_intercept()関数で実装されています:

..

make_points()関数は、average_slope_intercept()関数のためのヘルパー関数で、線の傾きと切片を取り、線分の端点を返します。この時点で、私たちは車線線を持っています!

次は何か

この時点で、この関数からの出力は、車両の速度と進行方向を制御するための別のアルゴリズムに入力されます。これを行うために、検出された車線線から操舵角を計算し、PIDコントローラーに渡して操舵角を最小限に抑え、車両を中央に保つことができます。

この作業はNano開発ボードを使用して行われましたが、同じコードは組み込み画像処理システムを製造環境に展開するための出発点としても機能します。これを行うには、Jetson Nano用の実際のベースボードを構築する必要があります。モジュラー電子設計ツールUpverter Board Builderアプリケーションで使用すると、これが最も簡単です。モジュラーなアプローチを取ることで、Jetson Nano、カメラ、レーン認識用の他のセンサーのためのベースボードを簡単にカスタマイズできます。

Upverterのモジュラー電子設計ツールは、新しいソフトウェアをダウンロードまたはインストールすることなく、業界標準のCOMおよび人気のモジュールへのアクセスを提供します。ドラッグアンドドロップのユーザーインターフェースを使用して、Jetson Nanoを使用したレーン認識やその他の画像処理タスクを含むさまざまなアプリケーションのための生産グレードのハードウェアを作成できます。システムに追加機能が必要な場合は、無線接続、センサーの配列などを含めることができます。

Gumstixの顧客成功事例をいくつか見てみるか、今すぐお問い合わせください。私たちの製品、設計ツール、およびサービスについてもっと知ることができます。

筆者について

筆者について

Zachariah Petersonは、学界と産業界に広範な技術的経歴を持っています。PCB業界で働く前は、ポートランド州立大学で教鞭をとっていました。化学吸着ガスセンサーの研究で物理学修士号、ランダムレーザー理論と安定性に関する研究で応用物理学博士号を取得しました。科学研究の経歴は、ナノ粒子レーザー、電子および光電子半導体デバイス、環境システム、財務分析など多岐に渡っています。彼の研究成果は、いくつかの論文審査のある専門誌や会議議事録に掲載されています。また、さまざまな企業を対象に、PCB設計に関する技術系ブログ記事を何百も書いています。Zachariahは、PCB業界の他の企業と協力し、設計、および研究サービスを提供しています。IEEE Photonics Society、およびアメリカ物理学会の会員でもあります。

関連リソース

ホームに戻る
Thank you, you are now subscribed to updates.