こんにちは、さすを(@sasuwo0409)です。
先日、下記ツイートをしました。
Pythonを使って動体検知してみました!
— さすを🐧💻@月9,000PVブロガー🏃♂️💨 (@sasuwo0409) December 10, 2021
感度を細かく設定できるのがよい!🙆♂️
お留守番中のG対策に使えるかも(絶対にいや)🥶#プログラミング#Python #駆け出しエンジニアと繋がりたい pic.twitter.com/LXfoe2E0J1
Pythonを使って動体検知してみました!
感度を細かく設定できるのがよい!🙆
お留守番中のG対策に使えるかも(絶対にいや)🥶
#プログラミング
#Python
#駆け出しエンジニアと繋がりたい
今回の記事は、Pythonを使って、動体検知をする方法を解説していきます。
サンプルコードも載せているので、実際に試してみることも可能です。
動体検知をしたい方やカメラ・動画を使ったプログラムを書いてみたい人はぜひ試してみてください。
それでは本文をどうぞ。
手っ取り早く動体検知をしてみたいな。
あと、理解を深めたいから、サンプルコードが何をしているのかもわかるように教えて欲しい。。。
これらの悩みを解決します!
※0円のサンプルテキストという近道
独学よりプログラミングスクールの方が効果は出やすいですが、値段が高く、なかなか手を出しづらいですよね。techgymでは無料のサンプルテキストと解説動画をもらえるので、これを使ってお得にPythonの基礎を学ぶのもオススメです。
最短1分でできる!
【Python】OpenCVを使って動体検知をする方法!
プログラム作成時の環境
この記事ではVisual Studio Code上でプログラムを動かしていますが、プログラムが書けるエディタであれば問題ありません。
既にインストールされている方はそちらを使っていただければと思います。
エディタがないと、プログラムを書くことがほとんどできないので、まだインストールされていない方はこの機会にインストールしてしまいましょう。
>>ソースコードエディタ(VSCode)のインストール方法[Windows版]
>>ソースコードエディタ(VSCode)のインストール方法[Mac版]
ライブラリのインストール
これから紹介するプログラムではOpenCVというライブラリを使用しています。
ライブラリのインストールが済んでいない方は「【これだけ知っておけばOKです】 現役エンジニアもよく使う便利なPythonライブラリ22選」からOpenCVをインストールしてください。
この記事に取り上げられているライブラリは、どれも使い勝手がいいので、まだインストールしていないものがあれば、ついでにインストールしておくのがおすすめです!
サンプルコード
今回のサンプルコードでは、以下の処理を行うようにしています。
実際のサンプルコードは以下の通りです。
# 必要なライブラリのインポート
import cv2
import datetime
# Webカメラを使うときはこちら
cap = cv2.VideoCapture(0)
# ファイルパスで動画を読み込むときはこちら
# filepath = "読み込みたい動画ファイルのあるパスを入力する"
# cap = cv2.VideoCapture(filepath)
before = None
count = 1
time = datetime.date.today()
print("動体検知を開始します。")
print(str(datetime.datetime.now()))
while True:
# 画像を取得
ret, frame = cap.read()
# 再生が終了したらループを抜ける
if ret == False:
break
# 白黒画像に変換
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
if before is None:
before = gray.astype("float")
continue
# 現在のフレームと移動平均との差を計算
cv2.accumulateWeighted(gray, before, 0.5)
frameDelta = cv2.absdiff(gray, cv2.convertScaleAbs(before))
# frameDeltaの画像を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
areaframe = cv2.rectangle(frame, (x, y), (x+w, y+h), (0,255,0), 2)
if count == 1 or count == 100:
cv2.imwrite('保存するファイル名',areaframe)
count = count + 1
# ウィンドウで表示
cv2.imshow('target_frame', frame)
# Enterキーが押されたらループを抜ける
if cv2.waitKey(1) == 13: break
print("動体検知を終了します。")
print(str(datetime.datetime.now()))
# ウィンドウの破棄
cv2.destroyAllWindows()
冒頭でも紹介しましたが、実行結果はこちらです。
Pythonを使って動体検知してみました!
— さすを🐧💻@月9,000PVブロガー🏃♂️💨 (@sasuwo0409) December 10, 2021
感度を細かく設定できるのがよい!🙆♂️
お留守番中のG対策に使えるかも(絶対にいや)🥶#プログラミング#Python #駆け出しエンジニアと繋がりたい pic.twitter.com/LXfoe2E0J1
動体検知を開始します。
2021-12-13 15:28:11.748773
動体検知を終了します。
2021-12-13 15:29:11.711463
動体検知と画像保存がされていることを確認できました!
動体検知をすると画像・映像に対する理解が深まる
動体検知や画像編集は実際に目で見えるので、とっかかりやすい内容ですが、それ以上に画像・映像に対する理解が深まります。
例えば、以下のような用語などです。
これらの内容は、画像・映像処理をするうえで当たり前の知識として扱われます。
動体検知はプログラムがそこまで複雑ではなく、基本的な用語や計算方法が使われているので、画像・映像に対する理解を深めるのに適しています。
「こんな処理が必要なんだなあ」くらいの理解度で大丈夫です!
最後に:身近なものも結構簡単に作れる
Pythonを使って動体検知をする方法を解説してきました。
防犯カメラやバックカメラも動体検知が使われているので、なじみがあると感じたかもしれません。
今回紹介した動体検知システムなら、コピペですぐに作ることができるので、興味があったら試してみてください。
そして、
「追加でこんな機能を搭載したよ!」
というようなことがあれば、教えていただけると僕もうれしいです。
この記事があなたの役に少しでも立てていたらうれしいです!
それでは!
最短1分でできる!
コメント