概要
自転車に取り付けるドライブレコーダー
使用部品
Raspberry pi4
Pi camera
バッテリー
詳細
自転車に取り付けたPi cameraで得た情報からOpenCVで人や車、電柱などの障害物を検知すると、Pi cameraが事故の瞬間を録画し、ドライブレコーダーの役割を果たす
ソースコード
録画プログラム
import cv2
import time
from picamera2 import Picamera2
# 顔検出のためのCascadeClassifierの読み込み
face_detector = cv2.CascadeClassifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml")
cv2.startWindowThread()
# Picamera2の初期化
picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration(main={"format": 'XRGB8888', "size": (640, 480)}))
picam2.start()
# 録画設定
recording = False
recording_start_time = None
output_video = None
fourcc = cv2.VideoWriter_fourcc(*'XVID') # ビデオコーデックの設定
video_filename = 'recorded_video.mp4' # 録画ファイル名
while True:
# カメラからフレームを取得
im = picam2.capture_array()
# グレースケールに変換して顔検出
grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(grey, 1.1, 5)
# 顔が検出された場合
if len(faces) > 0 and not recording:
# 録画開始
print("顔を検出、録画を開始します")
recording = True
recording_start_time = time.time()
output_video = cv2.VideoWriter(video_filename, fourcc, 20.0, (640, 480)) # フレームレート20で録画
# 録画中の場合、フレームを保存
if recording:
output_video.write(cv2.cvtColor(im, cv2.COLOR_BGR2RGB)) # 正しい色空間に変換して保存
if time.time() - recording_start_time >= 10:
# 10秒経過したら録画を終了
print("録画終了")
recording = False
output_video.release()
# 顔検出結果を画面に表示
for (x, y, w, h) in faces:
cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0))
cv2.imshow("Camera", im)
# ESCキーでループを抜ける
if cv2.waitKey(1) & 0xFF == 27:
break
# カメラとウィンドウを解放
# picam2.stop()
# cv2.destroyAllWindows()
#
# # 録画されたビデオを再生
# cap = cv2.VideoCapture(video_filename)
#
# if cap.isOpened():
# print(f"録画されたビデオ {video_filename} を再生します")
# while cap.isOpened():
# ret, frame = cap.read()
# if not ret:
# print("ビデオの再生が終了しました")
# break
# cv2.imshow('Recorded Video', frame)
#
# # ESCキーで再生を終了
# if cv2.waitKey(25) & 0xFF == 27:
# break
# else:
# print(f"ビデオファイル {video_filename} を開けませんでした")
cap.release()
cv2.destroyAllWindows()
まとめ
OpenCVに車や電柱など様々な障害物を学習させていく予定だったが、学習させるために必要な画像が足らずうまくいかなかったため、最初から学習されている顔認証をベースに作成した。
今後、時間があるときに少しずつ学習させていきたい。
また、顔を検知した際に録画する都合、人の顔が必ず映ってしまうため実行動画はありません。
参考文献
【ラズベリーパイ】監視カメラの作り方:https://sozorablog.com/camera_shooting/#ラズベリーパイでカメラ映像-動画-を表示する
OpenCVのカスケード分類器を自作して画像認識:https://www.pc-koubou.jp/magazine/21280#section03-01
-
fukumasa2
さんが
2024/09/20
に
編集
をしました。
(メッセージ: 初版)
-
fukumasa2
さんが
2024/09/30
に
編集
をしました。
-
fukumasa2
さんが
2024/09/30
に
編集
をしました。
-
fukumasa2
さんが
2024/10/31
に
編集
をしました。
ログインしてコメントを投稿する