OpenCVのとPythonを使用してターゲット検出に関する詳細な研究は非常にシンプルであるため、リアルタイムストリーミングビデオは、私たちは、元の目標検出を加えて、リアルタイムのビデオにアクセスする、適切なコードのいくつかの組み合わせを必要とします。
この記事は、2つの部分に分かれています。最初の部分では、OpenCVの深さの調査を使用して、本来の目標検出プロジェクトを拡張する方法について説明しますと、リアルタイムのビデオストリーミングやビデオファイルに適用範囲を拡大していきます。このタスクは、ビデオストリームクラスによって達成されます。
ディープ学習オブジェクト検出チュートリアル:http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/
ビデオストリームクラスのチュートリアル:http://www.pyimagesearch.com/2016/01/04/unifying-picamera-and-cv2-videocapture-into-a-single-class-with-opencv/
FPSを測定しながら今、私たちは、+目標深さ検出コードは、ビデオストリームに適用学ぶために処理速度を開始します。
ビデオオブジェクト検出のためのOpenCVの深さの調査と使用
リアルタイムターゲット検出器を学習に基づいてOpenCVの深さを構築するために、我々は効果的にカメラ/ビデオストリームにアクセスする必要がある、と検出されたオブジェクトは、各フレームに適用されます。
まず第一に、私たちは、新しいファイルを開くreal_time_object_detection.pyという名前を付け、その後、次のコードを追加します。
私たちは、ライン2-8からパケットをインポートを開始します。これに先立ち、あなたがimutilsとOpenCVの3.3を必要としています。システム設定では、あなただけのことができます(あなたがPythonの仮想環境コマンドのすべてに従っていることを確認)デフォルト設定のOpenCVのをインストールする必要があります。
注:あなたがダウンロードしてインストールしてくださいニューラルネットワークモジュールいることを保証するために、綿密に含まれているOpenCVの3.3(またはそれ以降)および(OpenCVの3.3に適した)OpenCVの-contribのバージョン、です。
以下では、これらのコマンドラインパラメータを解析します。
ここで私たちのビデオストリーミングやビデオ処理であるため、前回の目標検出プロジェクトと比較すると、我々は、画像パラメータを必要としない - 以下のパラメータを除いて変わりません。
-prototxt:カフェprototxtファイルのパス。
-model:パスの事前トレーニングモデル。
-confidence:弱い濾過最小確率閾値検出、20%のデフォルト値。
その後、私たちはクラスやカラーセットのリストを初期化します。
ライン22-26で、私たちは、クラスラベルを初期化し、ランダムな色に対応します。:より多くのこれらのクラスの情報(だけでなく、トレーニング方法ネットワーク)については、を参照してください。http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/
今、私たちは自分のモデルをロードし、そしてあなた自身のビデオストリームを設定します。
私たちは、彼らのprototxtとモデルファイル(ライン30)への参照を提供し、独自のシリアル化のモデルをロードし、それは非常に簡単ですOpenCVの3.3、で見ることができます。
次に、我々は(ソースファイルがビデオやカメラすることができます)ビデオストリームを初期化します。まず、我々はビデオストリーム(ライン35)を起動し、その後、カメラは(ライン36)を起動するのを待ち、最終的に第二(行37)あたりのフレーム数を計算し始めました。ビデオストリームとFPS imutilsクラスがパッケージの一部です。
それでは、(あなたがスピードを要求された場合、あなたには、いくつかのフレームをスキップすることができます)各フレームを介して歩いてみましょう:
まず、その大きさ(ライン44)を調整、ビデオストリームから1(ライン43)をお読みください。私たちはその後、幅と高さが必要になりますので、私たちはライン47上でクロールする必要があります。フレームは、次いで、BLOBのDNNモジュール(ライン48)に変換されます。
今、私たちは、ニューラルネットワークの入力(ライン52)としてブロブを設定し、検出を提供してくれネットを通じて入力(53行)を渡します。
この場合は、私たちがターゲットに入力フレームで検出されている、今、私たちは、目標とラベルの周りに描かれたバウンディングボックスを持っているかどうかを判断するために、信頼の値を参照するには時間があります:
我々の検出の最初のサイクルで、画像が複数のターゲットを検出することができることを覚えておいてください。また、各テスト(すなわち確率)の信頼性を確認する必要があります。信頼レベルが(閾値以上の)十分に高い場合、我々は最後に表示される予測し、バウンディングボックスのテキストと色の形で予測画像を作成します。のは、行ずつ見てみましょう:
検出サイクルでは、まず私たちは、信頼値(ライン59)を抽出します。
信頼度が最小閾値(線63)よりも高い場合、我々は、クラスラベルインデックス(ライン67)を抽出し、検出対象(ライン68)の座標を算出します。
その後、我々は、次に、四角形を描画し、テキストのために、境界ボックス座標(x、y)(ライン69)を抽出します。
私たちは、テキストラベルを構築し、クラス名と自信(ライン72、73)が含まれています。
我々はまた、オブジェクトの周りに描かれた着色矩形(ライン74、75)の座標(x、y)の前に色クラスおよび抽出を使用します。
一般的に、我々はラベルを付けるには、四角形の上に表示されますが、スペースがない場合、我々は少し(ライン76)の下に長方形の上部にあるラベルの位置が表示されます。
最後に、我々は、フレーム(ライン77,78)上に配置されたYだけ着色テキストの計算値を使用します。
(1)フレームを示す;(2)終了ボタンをチェックする;(3)アップデートカウンタFPS:残り撮像されたフレーム周期は、さらに以下の工程を含みます:
コードブロックは、我々はその後、押された特定のキー(第82回)を見つけ、そして(「終了」の代わりに)「Q」キーをチェックし、最初のフレーム(ライン81)を示し、単純明快です。すでに押されている場合は、我々は、ループフレームキャプチャ(最初の行85、86)を終了します。最終更新fpsのカウンタ(89行)。
我々は(「Q」キーまたはビデオストリームの終わり)ループを終了した場合、我々はこれらに対処する必要があります。
場合我々アウト(出口)ループ、FPSカウンタ停止(ライン92)、(ライン93および94上の)第二の出力当たりのフレームの数に関する情報端末へ。
私たちは、ストリーム(ライン98)を停止、その後、(ライン97)ウィンドウを閉じます。
あなたはこの時点に到達した場合、アップどのように動作するかを試すために彼らのウェブカメラを使用するために準備されるだろう。のは、次のセクションを見てみましょう。
リアルタイムターゲット検出深さの調査の結果
目標検出が実行されているリアルタイムの深さを知るために、あなたは、ニューラルネットワークの畳み込みサンプルコードと事前研修ガイドライン「のダウンロード」のセクションを使用してください。(必要なコードやその他の情報を取得するために、電子メールアドレスを入力し、「ダウンロード」セクションを入力して、元のリンクを開いてください。)
ターミナルを開き、次のコマンドを実行します。
OpenCVのは、あなたのカメラにアクセスできる場合は、検出対象と出力ビデオフレームを見ることができます。次のように私はサンプルビデオオブジェクトの深い学習を使用し、検出結果です:
図1:使用の深さの調査とOpenCVの+ Pythonの映画は、リアルタイムターゲット検出しました。
検出され、リアルタイムですべて - 学習目標検出器の深さは人だけではないを検出することができ、また隣に座ってソファや椅子の人を検出することに注意してください!
概要
今日のブログは、私たちは深い学習+ OpenCVの+ビデオストリームを使用してリアルタイムターゲット検出を実行する方法を学びました。我々は2つのチュートリアルに従うことによって、これを達成しました:
-
OpenCVの深さの調査と目標検出(使用http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/)を
-
OpenCVのでは効率的な、ネジ付きビデオストリーム(http://www.pyimagesearch.com/2016/01/04/unifying-picamera-and-cv2-videocapture-into-a-single-class-with-opencv/ )
最終結果は、ビデオ検出器6-8 FPSを扱うことができる学習目標の深さに基づいています(もちろん、これはまた、お使いのシステムの速度に依存します)。
あなたはさらに、次の方法で速度を向上させることができます。
-
フレームをスキップされました。
-
MobileNet使用異なる変種(速いが、精度が落ちます)。
-
SqueezeNetの量子バリアント(そのネットワークのフットプリントが小さいので、私はこれをテストするためには至っていないが、私はそれがより速くなるべきだと思います)。
著者:ほとんどの人間
出典:https://www.jiqizhixin.com/articles/2017-09-21-3
大連渤海病院 mobile.dlbhfk.com
大連渤海病院 bpmobile.39552222.com