昼夜を問わず、貨物や重量物を長距離輸送するトラック運転手は、睡眠不足に悩まされることが多い。倦怠感と眠気は、高速道路での重大な事故の主な原因のいくつかです。自動車産業は、眠気を検出してドライバーに警告することができるいくつかの技術に取り組んでいます。
このプロジェクトでは、Raspberry Pi、OpenCV、およびPiカメラモジュールを使用して、ドライバー向けの睡眠検知および警告システムを構築します。このシステムの基本的な目的は、ドライバーの顔の状態と目の動きを追跡することであり、ドライバーが眠気を感じている場合、システムは警告メッセージをトリガーします。これは、以前の顔のランドマーク検出および顔認識アプリケーションの拡張です。
必要なコンポーネント
ハードウェアコンポーネント
- ラズベリーパイ3
- Piカメラモジュール
- マイクロUSBケーブル
- ブザー
ソフトウェアおよびオンラインサービス
- OpenCV
- Dlib
- Python3
このドライバーの眠気検知プロジェクトに進む前に 、 まず、OpenCV、imutils、dlib、Numpy、およびその他の依存関係をこのプロジェクトにインストールする必要があります。ここでは、OpenCVをデジタル画像処理に使用しています。デジタル画像処理の最も一般的なアプリケーションは、オブジェクト検出、顔認識、および人のカウンターです。
ここでは、Raspberry Pi、Pi Camera、およびブザーのみを使用して、この睡眠検出システムを構築しています。
RaspberryPiへのOpenCVのインストール
OpenCVおよびその他の依存関係をインストールする前に、RaspberryPiを完全に更新する必要があります。以下のコマンドを使用して、RaspberryPiを最新バージョンに更新します。
sudo apt-get update
次に、次のコマンドを使用して、RaspberryPiにOpenCVをインストールするために必要な依存関係をインストールします。
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get install libqt4-test –y
最後に、以下のコマンドを使用してRaspberryPiにOpenCVをインストールします。
pip3 install opencv-contrib-python == 4.1.0.25
OpenCVを初めて使用する場合は、Raspberrypiを使用した以前のOpenCVチュートリアルを確認してください。
- CMakeを使用してRaspberryPiにOpenCVをインストールする
- RaspberryPiとOpenCVによるリアルタイムの顔認識
- RaspberryPiとOpenCVを使用したナンバープレート認識
- OpenCVとRaspberryPiを使用した群集サイズの推定
また、初心者レベルから始まる一連のOpenCVチュートリアルを作成しました。
他の必要なパッケージのインストール
Raspberry Pi for Drowsiness Detectorをプログラミングする前に、他の必要なパッケージをインストールしましょう。
dlibのインストール: dlibは、機械学習アルゴリズムと実際の問題のためのツールを含む最新のツールキットです。以下のコマンドを使用して、dlibをインストールします。
pip3 install dlib
NumPyのインストール: NumPyは、強力なn次元配列オブジェクトを含む科学計算用のコアライブラリであり、C、C ++などを統合するためのツールを提供します。
pip3 install numpy
face_recognitionモジュールのインストール:このライブラリは、Pythonまたはコマンドラインから顔を認識して操作するために使用されます。以下のコマンドを使用して、顔認識ライブラリをインストールします。
Pip3インストールface_recognition
そして最後に、以下のコマンドを使用して eye_game ライブラリをインストールします。
pip3インストールアイゲーム
RaspberryPiのプログラミング
OpenCVを使用した居眠り運転検知器の完全なコードは、ページの最後に記載されています。ここでは、理解を深めるためにコードのいくつかの重要な部分について説明します。
したがって、いつものように、必要なすべてのライブラリを含めることからコードを開始します。
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
その後、piカメラからビデオフィードを取得するためのインスタンスを作成します。複数のカメラを使用している場合は、 cv2.VideoCapture(0) 関数でゼロを1に置き換えます。
video_capture = cv2.VideoCapture(0)
次の行に、ファイル名とファイルのパスを入力します。私の場合、コードとファイルの両方が同じフォルダーにあります。次に、顔のエンコーディングを使用して、画像内の顔の位置を取得します。
img_image = face_recognition.load_image_file( "img.jpg")img_face_encoding = face_recognition.face_encodings(img_image)
その後、2つの配列を作成して、面とその名前を保存します。私は1つの画像のみを使用しています。コードに画像とそのパスを追加できます。
既知の顔のエンコーディング=既知の顔の名前=
次に、いくつかの変数を作成して、面パーツの位置、面名、およびエンコーディングを格納します。
face_locations = face_encodings = face_names = process_this_frame = True
while 関数内で、ストリーミングからビデオフレームをキャプチャし、フレームのサイズを小さいサイズに変更し、キャプチャしたフレームを顔認識用のRGBカラーに変換します。
ret、frame = video_capture.read()small_frame = cv2.resize(frame、(0、0)、fx = 0.25、fy = 0.25)rgb_small_frame = small_frame
その後、顔認識プロセスを実行して、ビデオ内の顔を画像と比較します。また、顔のパーツの位置も取得します。
if process_this_frame:face_locations = face_recognition.face_locations(rgb_small_frame)face_encodings = face_recognition.face_encodings(rgb_small_frame、face_locations)cv2.imwrite(file、small_frame)
認識された顔が画像内の顔と一致する場合は、 eyegame関数 を呼び出して目の動きを追跡します。コードは、目と眼球の位置を繰り返し追跡します。
face_distances = face_recognition.face_distance(known_face_encodings、face_encoding)best_match_index = np.argmin(face_distances)一致する場合:name = known_face_namesdirection = eye_game.get_eyeball_direction(file)print(direction)
コードが10秒間目の動きを検出しない場合、アラームがトリガーされて人が目覚めます。
else:count = 1 + count print(count)if(count> = 10):GPIO.output(BUZZER、GPIO.HIGH)time.sleep(2)GPIO.output(BUZZER、GPIO.LOW)print( "Alert! !アラート!!ドライバーの眠気が検出されました ")
次に、OpenCV関数を使用して、顔の周りに長方形を描画し、その上にテキストを配置します。また、 cv2.imshow 関数を使用してビデオフレームを 表示し ます。
cv2.rectangle(frame、(left、top)、(right、bottom)、(0、255、0)、2)cv2.rectangle(frame、(left、bottom-35)、(right、bottom)、(0 、255、0)、cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame、name、(left + 6、bottom-6)、font、1.0、(0、0、255)、1)cv2.imshow (「ビデオ」、フレーム)キー「S」を設定してコードを停止します。if cv2.waitKey(1)&0xFF == ord( 's'):break
居眠り運転検知システムのテスト
コードの準備ができたら、PiカメラとブザーをRaspberry Piに接続し、コードを実行します。約10秒後、RaspberryPiカメラからのライブストリーミングを含むウィンドウが表示されます。デバイスが顔を認識すると、フレームにあなたの名前が印刷され、目の動きの追跡が開始されます。次に、目を閉じて7〜8秒間、アラームをテストします。カウントが10を超えると、アラームがトリガーされ、状況が通知されます。
これは、OpenCVとRaspberryPiを使用してDrowsinessDetectorを構築する方法です。下にスクロールして、作業中のビデオとコードを確認します。