今回はRaspberry Pi 4とWebカメラを使って、動いているものを画像処理で検出する動体検知システムを実装する方法について解説します。画像処理ライブラリにはOpenCVを利用しPythonでコーディングを行いました。
当サイトでこれまで公開したOpenCVの活用事例についても以下の記事で解説していますので、あわせてご覧ください。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi 5は、Raspberry Pi財団が開発した最新のシングルボードコンピュータで、従来モデルよりも大幅な性能向上を実現しています。
搭載される64ビットクアッドコアプロセッサは、クロック速度が最大2.4GHzに達し、前世代よりも処理速度が格段に向上しました。また、4GBまたは8GBのRAMを選択できるため、教育用途からリソースを必要とするプロジェクトまで幅広く対応可能です。
グラフィックス性能も強化され、4K解像度でのデュアルディスプレイ出力をサポートしています。さらに、新たにPCIeインターフェイスが追加され、外部ストレージや高速デバイスとの接続が容易になりました。Wi-Fi 6やBluetooth 5.2の導入により、無線通信も高速かつ安定。
教育、IoT、AI開発、メディア再生など、多様な用途に対応するRaspberry Pi 5は、初心者から上級者まで幅広いユーザーにとって魅力的な選択肢となっています。
Raspberry Piでできることについては以下の記事で解説していますので、あわせてご覧ください。
OpenCVとは
画像処理ライブラリOpenCVについては以下のページで解説しています。
OpenCVのインストール
Raspberry Pi環境でのOpenCVのインストール方法については、以下のページで解説しています。
使用するハードウェア
今回使用するハードウェアはRaspberry Pi 4とUSB接続のWebカメラ、ロジクールのC270を使用します。
WebカメラC270をPythonのプログラムから制御し、画像処理を行います。
C270で取り込んだ映像の中に動体が検出された場合は、動体の周りに緑の枠線を描画します。
C270は標準でドライバーが搭載されていますので、Raspberry Piに接続するだけで自動的に認識されます。
作成したソースコード
カメラで撮影した動画の動体検知を行うため、以下のソースコードを作成しました。
import cv2
#VideoCaptureオブジェクト取得
cap = cv2.VideoCapture(-1)
print("start")
avg = None
while(True):
#フレームを取得
ret, frame = cap.read()
if not ret:
print("not capture")
break
#動体検知処理
#グレースケールに変換
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 比較用にフレームの切り出し保存
if avg is None:
avg = gray.copy().astype("float")
continue
#現在のフレームと移動平均との差を計算
cv2.accumulateWeighted(gray, avg, 0.5)
frameDelta = cv2.absdiff(gray, cv2.convertScaleAbs(avg))
#画像を2値化する
thresh = cv2.threshold(frameDelta, 3, 255, cv2.THRESH_BINARY)[1]
#輪郭を抽出する
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
# 差分があった点を画面に描く
for target in contours:
x, y, w, h = cv2.boundingRect(target)
if w < 30: continue #条件以下の変更点は除外
#動体の位置を描画
cv2.rectangle(frame, (x, y), (x + w, y + h), (0,255,0), 2)
#画像表示
cv2.imshow("Frame", frame)
#キーボード入力処理
key = cv2.waitKey(1)
if key == 13: #enterキーの場合処理を抜ける
break
#カメラデバイスクローズ
cap.release()
#ウィンドウクローズ
cv2.destroyAllWindows()
実行結果
実際にプログラムを動作させた際の、Webカメラの映像です。
リアルタイムに動いている部分を検出し、枠線を描画することができました。
\ Pythonを自宅で好きな時に学べる! /
まとめ
今回はRaspberry Pi 4に取り付けたカメラで撮影した動画の動体検知をOpenCVを使ってリアルタイムに行う方法を解説してみました。今回のアプリケーションを応用する(動体を検知したら録画を開始するなど)ことで、監視カメラなどにも活用できるかと思いますので、ぜひ試してみてください。
また、OpenCVをさらに詳しく学びたい方には、Udemyの以下の講座もお勧めです。
【Pythonで学ぶ】OpenCVでの画像処理入門また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
\OpenCVを使った画像処理を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
コメント