ディープラーニング + OpenCV、Python でリアルタイムのビデオ オブジェクト検出を実現

ディープラーニング + OpenCV、Python でリアルタイムのビデオ オブジェクト検出を実現

OpenCV と Python を使用してライブ ビデオ ストリームでディープラーニング オブジェクト検出を実行するのは非常に簡単です。適切なコードをいくつか作成し、ライブ ビデオを接続して、独自のオブジェクト検出機能を追加するだけです。

この記事では、ディープラーニングと OpenCV を使用して、元のオブジェクト検出プロジェクトを拡張し、アプリケーションの範囲をリアルタイムのビデオ ストリームとビデオ ファイルに拡張する方法を学習します。このタスクは、VideoStream クラスを通じて実行されます。

  • ディープラーニングによる物体検出チュートリアル: http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/
  • VideoStream クラスのチュートリアル: 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 が必要です。システム設定では、OpenCV をデフォルト設定でインストールするだけです (また、Python 仮想環境のすべての指示に従っていることを確認してください)。

注意: ディープ ニューラル ネットワーク モジュールが含まれていることを確認するには、OpenCV 3.3 (またはそれ以降) と OpenCV-contrib バージョン (OpenCV 3.3 用) をダウンロードしてインストールしてください。

次に、これらのコマンドライン引数を解析します。

前回のオブジェクト検出プロジェクトと比較すると、ここではビデオ ストリームとビデオを扱っているため、画像パラメータは必要ありません。ただし、次のパラメータは同じままです。

  • --prototxt: Caffe prototxt ファイルのパス。
  • --model: 事前トレーニング済みモデルへのパス。
  • --confidence: 弱い検出をフィルタリングするための最小確率しきい値。デフォルト値は 20% です。

その後、クラス リストとカラー セットを初期化します。

22 行目から 26 行目では、CLASS ラベルと対応するランダムな COLORS を初期化します。これらのクラス(およびネットワークのトレーニング方法)の詳細については、http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/ を参照してください。

ここで、独自のモデルをロードし、独自のビデオ ストリームを設定します。

独自のシリアル化モデルをロードし、prototxt およびモデル ファイルへの参照を提供します (行 30)。OpenCV 3.3 でわかるように、これは非常に簡単です。

次に、ビデオ ストリームを初期化します (ソースはビデオ ファイルまたはカメラです)。まず、VideoStream を開始し (行 35)、次にカメラの起動を待機し (行 36)、最後に 1 秒あたりのフレーム数の計算を開始します (行 37)。 VideoStream クラスと FPS クラスは、imutils パッケージの一部です。

次に、各フレームをループしてみましょう (速度を重視する場合は、いくつかをスキップできます)。

まず、ビデオ ストリームからフレームを読み取り (行 43)、サイズを変更します (行 44)。幅と高さは後で必要になるので、47 行目で取得します。次に、フレームは dnn モジュールを使用して BLOB に変換されます (行 48)。

ここで、ブロブをニューラル ネットワークへの入力として設定し (行 52)、入力をネットに渡して (行 53)、検出結果を取得します。

この時点で、入力フレーム内のオブジェクトが検出されました。次は、信頼度値を確認して、オブジェクトの周囲に境界ボックスとラベルを描画できるかどうかを判断します。

まず、画像内で複数のオブジェクトが検出できることを念頭に置き、検出をループします。また、各検出の信頼性(つまり確率)も確認する必要があります。信頼度が十分に高い場合(しきい値を超える場合)、画像の予測がテキストと色付きの境界ボックスの形式で端末に表示されます。これを1行ずつ見てみましょう:

  • 検出ループ内では、まず信頼値を抽出します (行 59)。
  • 信頼度が特定のしきい値を超える場合 (行 63)、クラス ラベル インデックスを抽出し (行 67)、検出されたオブジェクトの座標を計算します (行 68)。
  • 次に、境界ボックスの (x, y) 座標を抽出し (行 69)、これを使用して四角形とテキストを描画します。
  • クラス名と信頼度で構成されるテキスト ラベルを作成します (行 72、73)。
  • また、クラスの色と、前に抽出した (x, y) 座標を使用して、オブジェクトの周囲に色付きの四角形を描画します (行 74、75)。
  • 通常、ラベルは長方形の上に表示されますが、スペースがない場合は、ラベルを長方形の上端より少し下に表示します (行 76)。
  • ***、先ほど計算した y 値を使用して、色付きのテキストをフレーム上に配置します (行 77、78)。

フレームキャプチャループの残りのステップは、(1)フレームの表示、(2)終了キーの確認、(3)fpsカウンターの更新です。

上記のコード ブロックは非常に単純で、最初にフレームを表示し (行 81)、次に特定のキーを見つけ (行 82)、さらに「q」キー (「quit」の略) が押されたかどうかを確認します。押された場合は、フレーム キャプチャ ループを終了します (行 85、86)。 ***fps カウンターを更新します (行 89)。

ループを終了する場合(「q」キーまたはビデオ ストリームの終了)、これも処理します。

ループを終了すると、fps カウンターが停止し (行 92)、1 秒あたりのフレーム数が端末に出力されます (行 93、94)。

ウィンドウを閉じて (行 97)、ビデオ ストリームを停止します (行 98)。

ここまで来たら、自分のウェブカメラで試してみて、どのように動作するか確認する準備が整いました。次の部分に進みましょう。

リアルタイムディープラーニングによる物体検出の結果

リアルタイムのディープラーニング オブジェクト検出器を起動して実行するには、このガイドのダウンロード セクションにあるサンプル コードと事前トレーニング済みの畳み込みニューラル ネットワークを使用するようにしてください。 (元のリンクを開いて「ダウンロード」セクションに移動し、メールアドレスを入力して、必要なコードやその他の情報を入手してください。)

ターミナルを開き、次のコマンドを実行します。

OpenCV がウェブカメラにアクセスできる場合は、検出されたオブジェクトを含む出力ビデオ フレームを表示できます。

ディープラーニング オブジェクト検出器が、人物だけでなく、その人物が座っているソファとその隣の椅子もすべてリアルタイムで検出できることに注目してください。

要約する

今日のブログでは、ディープラーニング + 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 の量子化されたバリアントを使用します (これはテストしていませんが、ネットワーク フットプリントが小さいため、より高速になると思います)。

オリジナル:

http://www.pyimagesearch.com/2017/09/18/real-time-object-detection-with-deep-learning-and-opencv/

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  3Wイノベーションフェスティバル:先進的な起業家のアイデアが古都西安に流入

>>:  ビッグデータは経済生活に影響を与え、AIの基礎となる

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

猫=チューリングマシン? 4つのテストにより、「猫コンピューター」が任意の計算を実行できることが証明された

柔らかくてかわいい猫は、いつも私たちに「猫を撫でたい」「猫を抱きしめたい」という衝動を掻き立てます。...

...

このモデルは数十万ドルの費用がかかり、数え切れないほどのプロジェクトを導いたのに、使用されたネガティブサンプルがゼロだったことが判明したのですか?

今日の人気のディープラーニング モデルはブラック ボックスであるとよく言われます。つまり、入力を与え...

人工知能は私たちの仕事を奪うのでしょうか?北京大学の教授2人は次のように解釈した。

[[317607]]人工知能(AI)とは、人間と同等かそれ以上の知覚、認知、行動などの知能を機械に...

Microsoft が Meta との AI および PyTorch の連携を強化

Microsoft は、Meta との AI パートナーシップをさらに拡大し、Meta が AI ...

2021年の人工知能業界の予測

2020 年は激動の年であり、組織は数多くの課題に直面しました。 2021年に入り、人工知能業界は急...

デジタル時代においてヘルスケアサービスをより良くサポートするにはどうすればよいでしょうか?

アルカテル・ルーセント・エンタープライズの英国ヘルスケア部門責任者であるニール・ハンフリー氏が、デジ...

1ペニーに30,000円入るんですか?コーネル大学、人体に埋め込める「ゾウリムシ」センサーを開発

[[323586]]神学者たちは長い間、非常に退屈な問題について議論してきました。それは、「ピンの先...

基準に問題があり、人工知能は間違った方向に向かっている

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

BOE の革新的なテクノロジーは、国際的な氷上および雪上イベントを強化し、世界クラスのスポーツイベントをより華やかにします。

春の始まりの2月4日、世界の注目は北京に集まった。音楽、光、影が流れる中、オリーブの枝に囲まれた巨大...

人工知能、機械学習、ディープラーニングの違いと関連性を説明する記事

人工知能の波が世界を席巻しており、人工知能、機械学習、ディープラーニングといった多くの言葉が常に私た...

...

2022 年にゲームを変える AI と ML テクノロジーのトップトレンド

Covid-19パンデミックの発生に伴い、あらゆる業界の企業が先進技術を活用して、私たちの働き方や生...

デュアルポインタとスライディングウィンドウアルゴリズムテンプレート

[[428819]]ダブルポインタのアルゴリズム原理は、2 つのポインタを介して 1 つの for ...

...