下側にある数字はモーションファクターです。変化がないので0.0になっています。, 玄関前に人が現れると変化が認識され、jpegファイルが保存されます。モーションファクターが一定以上になってるので動きを検知したことがわかります。, モーションファクター(motion factor)は私が勝手につくた造語です。画面全体ピクセルのうちどれくらいの割合が変化したかを示す係数です。, 動き検知といっていますが、原理は前フレームとの差があるピクセルを探しているということになります。ちょっとした環境の変化で微妙に前のフレームとの差が検出されることがあます。その度に検知していると監視カメラの役に立ちません。 #日付時刻のあとに付加するファイル名を指定する, #モーションファクター(どれくらいの点に変化があったか)が By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. #どの程度以上なら記録するか。, Raspberry Pi 3 Model B Plus Rev 1.3(USBが刺さるラズパイならなんでもいい?), you can read useful information later efficiently. RaspberryPi+Python+OpenCVで動体検知の値を画像に表示する 更新日: 11月 24, 2019 動画の動体検知の出力値を画面上に表示するプログラムを作成しました。 Why not register and get more from Qiita? # Webカメラを使うときはこちら ・PC側デバッグ環境 ・Windows 10 Home 64bit ・Python 3.7.4(Anaconda3で導入) ・OpenCV 4.2.0.32 ・RaspberryPI Model3B側本番環境 ・Raspbian 10.3 ・Python 3.7.3 ・OpenCV 3.4.6.27 ・お手持ち … 玄関の前に誰かきたら静止画をjpeg形式で記録する 3. By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. # WEBカメラを使って監視カメラを実現するプログラム  一方、人がカメラの前に立ったならば、かなりの割合のピクセルが変化するはずです。ある程度の割合が変化したならば記録するということにしておけば、「玄関前に人が来たら記録する」という目的が達成できそうです。, 偽陽性の誤検知について考えます。つまり、「人が来てないのに検知してしまう」ことについてどう対処するか。監視カメラを設置した場所はただのマンションの一室なので人が来ることはまれです。なので、偽陽性でデータが埋め尽くされると困ります。誤検知(偽陽性)を防ぐ方法を考えます。  おそらくですがこのシステムでは人がいるのに記録されないケースとしては「壁と同じ配色の服を着ている」「画面の端に見切れている」「光学迷彩を着用している」とかになるとおもいます。この場合は何が写っているのわからなすぎて写っていても逆に役に立たない事が考えられるので許容することにしました。 Why not register and get more from Qiita? https://dev.classmethod.jp/articles/yoshim-opencv-extract-diff  どれくらいの変化があれば...ということについては、モーションファクターとcv.threshold() 関数の第2引数(各ドットの前画像との変化のしきい値)で調整できそうです。 さて、先程の動画を再生するコードに動体検知の … What is going on with this article? What is going on with this article?  完璧を求めてもしょうがないですね。バランスが大事です。. 2枚の静止画を比較した動体検知を行い、指定した閾値以上の時にLINEでメッセージと静止画を送信します。 当初はOpenCVによる動画からの動体検知を試みましたが、処理に時間がかかり過ぎたので静止画のみを使う事にしました。 OpenCVを利用して動画(カメラ)から動体検知をする方法について 手のひらサイズのコンピュータ、Raspberry Piを使って動体(動くもの)に反応して写真を撮影する簡易的な監視カメラを作る方法です。画像はGoogle Drive上のフォルダに保管されます。, Raspberry Pi(Raspbian)、及びGoogle Driveの基本的なセットアップや設定の知識を持っている方。細かい流れは別のサイト(GitHub)に載せているのですが、そこを読むに至るまでの周辺情報を補足する目的で記述しました。包括的な解説書というよりは、リンク集のような位置づけです。「ここが分からない」というフィードバックを歓迎します。是非ご意見をお寄せ下さい。, - Raspberry Pi 本体、電源ケーブル、microSDカード- Raspberry Pi カメラモジュール- Wifiまたは有線LANによるインターネット接続環境- Google Driveのアカウント, Raspberry PiにRaspbian(Raspberry Pi上で動作するLinux)をインストールします。以下のサイトの手順で、SDカードにRaspbianをコピーし、必要な初期設定(Wifiへの接続とモジュールの有効化など)を行います。, カメラモジュールを接続し、動作確認します(raspistillコマンドが便利です)。, すべて完了したら、一度Raspberry Piの電源を落とします。再度立ち上げてしばらく待ってから、Google Driveに写真が届くことを確認できれば、セットアップ完了です。, 初心者が迷いそうな用語をピックアップして解説をつけました。筆者の主観が混ざった簡単な説明なので、詳細は是非、ご自身で調べてみてください。, apt - Debian系Linuxのパッケージ管理ツール。このコマンドを使って、様々なパッケージ(アプリケーション)のインストールや更新が出来ます。sudo - Linux上で、管理者(root)権限、または他のユーザ権限でコマンドを実行するためのコマンド。OSレベルの設定の変更や、パッケージのインストールなどは、このコマンドを使って管理者(root)として実行します。crontab - 任意の時間にコマンドを自動実行するための設定を確認・編集するコマンドです。nano - ターミナル上で動作するシンプルなエディタ。Linux系のエディタとして有名なviやemacsに比べて、より直感的な操作でファイルの編集などが可能です。. 画面上に撮影した映像と時刻を表示する 2. Rasberry Piで自動レジを作成するプロジェクトをやっていたのですが、その際に使用した物体検出方法を紹介します。自動レジのgit ↓自動レジで使ったモデルの詳細 最新の距離学習を使っているので是非みてみてください。 [Keras]MobileNetV2+ArcFaceを使ってペットボトルの分類してみた Raspberry Pi上で処理速度が必要なタスクだったので、YoloやSSDなどのディープラーニングベースでの物体検出は使えませんでした。また検出画像を次工程でCNNに入れ商品を分類するという構造だったので、とにか … # 動体検知、そのときの日付時刻を埋め込んだjpgファイルを保存する, #ファイル名は日付時刻を含む文字列とする 手のひらサイズのコンピュータ、Raspberry Piを使って動体(動くもの)に反応して写真を撮影する簡易的な監視カメラを作る方法です。画像はGoogle Drive上のフォルダに保管されます。 対象読者 Raspberry Pi(Raspbian)、及びGoogle Driveの基本的なセットアップや設定の知識を持っている方。  それでも、実際の動きがなくてもいくつかのピクセルはたまに変化を誤検知するので、モーションファクターで誤検知を防ぎます。, 逆に、「人がいるのに記録されない」については監視カメラとしては役に立ちません。 Help us understand the problem. 居住しているマンションの玄関に夜な夜な不審者が出没しているようなので、玄関のドアにWEBカメラを取り付けRaspberryPiで解析・記録するシステムを作ってみました。仕様は次の通りです。, 最初はパソコン工房さんの記事を参考に顔検知でやろうと思いました、誤検知が多くて今回の用途には適しませんでした。, いろいろ考えた結果、動体検知(撮影している映像に変化があったことを検知)によって実現できそうだな、と思い試行錯誤の結果そこそこ上手く行ったので方法を紹介します。, https://qiita.com/K_M95/items/4eed79a7da6b3dafa96d, OpenCVのインストール手順は、上記のパソコン工房の記事を参考にしています。Pythonはもとから入っている物を使用。, USB接続のWEBカメラはドライバが最初から入っているみたいなので、接続すれば認識します。, lsusbコマンドの結果にUSBカメラっぽい名前が表示されていればOKです。わからなければ、抜いたときと接続したときで項目が増えるか確認しましょう。, 変化がなければ何も起きません。 動体検知をするための方法. DOT_TH 変数を第2引数としているのでこの変数で調整します。あまり小さい値にすると環境の変化やピクセルのゆれで誤検知してしまいます。 居住しているマンションの玄関に夜な夜な不審者が出没しているようなので、玄関のドアにWEBカメラを取り付けRaspberryPiで解析・記録するシステムを作ってみました。仕様は次の通りです。 1. 誤検知はある程度許容する ※ちなみに、カメラの設置は許可取得済みです。 記録した静止画には撮影時刻を埋め込む 4. Help us understand the problem. ここでcv2.waitKey(30)は本来はOpenCVで出力しているウィンドウからのキー入力を待つ時間を指定するものですが、動画を再生する上ではコマ送りを遅くして動画が早く流れるのを防ぐ役割も果たしています。. 今回はRaspberry Piに接続したカメラモジュールで捉えた画像を「OpenCV」と呼ばれる画像認識ライブラリーを用いて人の顔かどうかを判別します。 「OpenCV(Open Source Computer Vision Library、オープンシーブイ)」はオープンソースの画像認識ライブラリ(プログラムの集まり)で、カメラが捉えた画像の解析、パターン認識による物体検出や機械学習のための画像処理など、様々な機能を備えており、Raspberry Piで多く用いられるプログラミング言語Pythonにも対応しています。 今回はRaspberr… 自分が書いた記事の中でだいぶ前に書いたOpenCVやRaspberryPiの記事がここ最近また皆さんに読まれるようになりました。最近のトレンドになっている「ディープラーニング」、「エッジコンピューティング」に関連したキーワードになっていることから参考にしていただけているのだと思います。その中でふとエッジコンピューティングを使う場面を考えた時、カメラで動体検知をする事例を割とよく見かけるようになった気がします。自動運転やロボット、そして定点カメラの機能として使っています。というわけで今回はOpenCVの関数を駆使して簡単な動体検知を実装してみようと思います。, OpenCVはpip install opencv-opencvを使ってインストールしてます。これだとOpenCVを動かすときに必須になるnumpyもインストール出来ます。, まずは、動画を再生するプログラムを作成します。今回はOpenCVの公式パッケージで配布されているこちらの動画を使用します。予めダウンロードしてソースコードと同じフォルダーに保存しておきます。, ここでcv2.waitKey(30)は本来はOpenCVで出力しているウィンドウからのキー入力を待つ時間を指定するものですが、動画を再生する上ではコマ送りを遅くして動画が早く流れるのを防ぐ役割も果たしています。, さて、先程の動画を再生するコードに動体検知のコードを足していきます。順を追ってアルゴリズムを見ていきます。, 彩度に依存することなくエッジ検出を行うためにグレースケールに変換して2値化します。具体的には、以下の関数を使用します。, ソースコードのはじめにavg = Noneを定義してavgに比較用のフレームの配列を残します。そこで動画を出力するループの中に以下のコードを追加します。言うまでもなく、ここで残すフレームはグレースケールで変換したものです。, 画像の累算器に加算して、そこから現在のフレームの差を求めます。具体的には以下のコードになります。, 今度は閾値を設定し、フレームを2値化します。これによって前のフレームから変化の合った箇所の輪郭線をはっきりします。findContours関数を使用して以下のコードになります。, ここまでで動体検知の処理が出来ました。ですが、結果を可視化する必要があります。drawContours関数を使用して結果の輪郭線をフレームに描画していきます。, 画像で変化した箇所の輪郭をプロットする形になっているので、目で見てわかる人の動きの他に背景のちょっとした揺れも変化として検知しています。, 今回はOpenCVの関数だけで動体検知の処理を実装しました。特に目新しいアルゴリズムを使用しているわけではありませんが、簡単に「動いたもの」を検知することができました。あくまで簡易的なシステムなゆえ、背景の変化などのいわゆるノイズも検知することになるので、今回の場合だと人や特定の物の動きだけを検知したいときには、更にアルゴリズムを改良したり、ディープラーニングを使用する必要があります。, 輪郭: 初めの一歩 -OpenCV-Python Tutorials 1 documentation- # cap = cv2.VideoCapture(0), 輪郭: 初めの一歩 -OpenCV-Python Tutorials 1 documentation-, you can read useful information later efficiently. OpenCVで動体検出をしてみた, IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com.