OpenCVに基づくネットワークリアルタイムビデオストリーミング

上の「XiaobaiLearnVision」をクリックし、「star」または「topを追加することを選択します

重い乾物、すぐに配達

多くの小さなパートナーは、自宅やオフィスにWebサイトや監視カメラを設置しません。しかし、時々、人々はいつでもどこでもライブビデオを見たいと思っています。

ほとんどの人は、CCTV(Closed Circuit Television)の代わりにIPカメラ(Internet Protocol Cameras)を使用することを選択します。これは、解像度が高く、ケーブル接続のコストが削減されるためです。この記事では、IPカメラに焦点を当てます。IPカメラは、IPネットワークを介して制御データの受信と画像データの送信が可能なデジタル カメラであり、ローカルの記録装置を必要としません。ほとんどのIPカメラはRTSP(Real Time Streaming Protocol)に基づいているため、インターネットブラウザ自体はRTSPを「サポートしていません」

01.Webブラウザを使用してライブストリーミングメディアを表示する方法

コンピュータービジョンは、デジタル画像やビデオから高レベルの理解を得るためにコンピューターを作成する方法を含む学際的な分野です。コンピュータービジョン部分を実装するためにPythonでOpenCVモジュールを使用し、Webブラウザーでリアルタイムストリームを表示します。FlaskWeb フレームワークを使用します。コーディングの部分に入る前に、まずこれらのモジュールについて簡単に理解しましょう。これらのモジュールに既に精通している場合は、次のセクションに直接スキップできます。

ウィキペディアによると、FlaskはPythonで書かれたマイクロウェブフレームワークです。特定のツールやライブラリを必要としないため、マイクロフレームワークとして分類されます。データベース抽象化レイヤー、フォーム検証、または共通の機能を提供するその他の既存のサードパーティライブラリコンポーネントはありません。

GeeksForGeeksによると、OpenCVは、コンピュータービジョン、機械学習、および画像処理のための巨大なオープンソースコードライブラリであり、現在、今日のシステムで非常に重要なリアルタイム操作で重要な役割を果たしています。

02.操作手順

ステップ1-FlaskとOpenCVをインストールします。

pipinstallflask  」および「  pipinstallopencv-python  」コマンドを使用でき ます。PyCharmIDEを使用してフラスコアプリケーションを開発しています。

ステップ2-必要なライブラリをインポートし、フラスコアプリケーションを初期化します。

次に、必要なライブラリをインポートして、フラスコアプリケーションを初期化します。

#Import necessary libraries
from flask import Flask, render_template, Response
import cv2
#Initialize the Flask app
app = Flask(__name__)

ステップ3-OpenCVを使用してビデオをキャプチャします。

VideoCapture()オブジェクトを作成してカメラをトリガーし、ビデオの最初の画像/フレームを読み取ります。ビデオファイルのパスを指定するか、番号を使用してローカルWebサイトの使用を指定できます。Webサイトをトリガーするには、パラメーターとして「0」を渡します。IPカメラからリアルタイムソースをキャプチャするために、パラメータとしてRTSPリンクを提供します。

camera = cv2.VideoCapture(0)
'''
for ip camera use - rtsp://username:password@ip_address:554/user=username_password='password'_channel=channel_number_stream=0.sdp' 
for local webcam use cv2.VideoCapture(0)
'''

ステップ4-ウィンドウを追加し、カメラからフレームを生成します。

gen_frames()関数は、応答ブロックとしてカメラからフレームを継続的に返すループに入ります。この機能では、カメラがフレームを提供し、それをコンテンツタイプの応答ブロックにフォーマットして、上記のようにimage / jpegを生成する必要があります。コードは次のとおりです。

def gen_frames():  
    while True:
        success, frame = camera.read()  # read the camera frame
        if not success:
            break
        else:
            ret, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')  # concat frame one by one and show result


ステップ5 -Webアプリケーションのデフォルトページのアプリケーションルートを定義します

ルーティングとは、アプリケーションのURLパターンを指します(たとえば、myapp.com / homeまたはmyapp.com/about)。@ app.route( "/")は、Flaskが提供するPythonデコレータであり、操作を簡単にするためにアプリケーションでURLを割り当てるために使用されます。

@app.route('/')
def index():
    return render_template('index.html')

デコレータは、ユーザーが指定されたアプリケーションドメイン(ローカルサーバーではlocalhost:5000) .route()にアクセスしている限り、index()関数が実行されることを@appに通知しますFlaskは、Jinjaテンプレートライブラリを使用してテンプレートをレンダリングします。このアプリケーションでは、テンプレートを使用してHTMLをレンダリングし、ブラウザーに表示します。

ステップ6-ビデオフィードの適用ルートを定義します。

@app.route('/video_feed')
def video_feed():
    return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

「/ video_feed」ルートはストリーミング応答を返します。このストリームはWebページに表示される画像を返すため、ルーティングされたURLはimageタグの「src」属性にあります(以下の「index.html」を参照)。ほとんど/すべてのブラウザがマルチパート応答をサポートしているため、ブラウザはJPEG画像ストリームを表示することで画像要素を自動的に更新します

index.htmlファイルを見てみましょう

<body>
<div class="container">
    <div class="row">
        <div class="col-lg-8  offset-lg-2">
            <h3 class="mt-5">Live Streaming</h3>
            <img src="{
    
    { url_for('video_feed') }}" width="100%">
        </div>
    </div>
</div>
</body>

ステップ7-Flaskサーバーを起動します

if __name__ == "__main__":
    app.run(debug=True)

app.run()を呼び出し、[localhost:5000]でローカルにWebアプリケーションをホストします

「Debug = True」を使用すると、変更を加えるたびにアプリケーションを実行する必要がなくなります。サーバーの実行中にWebページを更新するだけで、変更を確認できます。

プロジェクトの構造:

プロジェクトは「CameraDetection」という名前のフォルダに保存されます。「app.py」ファイルを実行します。このファイルを実行した後、アプリケーションはローカルサーバーのポート5000でホストされます。

  • 「app.py」を実行してWebアプリケーションを開いた後、Webブラウザに「localhost:5000」と入力するだけです。

  • app.py-これは上記で作成したFlaskアプリケーションです

  • テンプレート-このフォルダには「index.html」ファイルが含まれています。これは、Flaskでテンプレートをレンダリングするときに必要です。すべてのHTMLファイルはこのフォルダーに配置されます。

'app.py'を実行するとどうなるか見てみましょう。

提供されたURLをクリックすると、Webブラウザがライブフィードを開きます。上記のVideoCapture(0)を使用したため、Webサイトの概要がブラウザーに表示されます。

IPカメラ/ネットワークカメラからのリアルタイムビデオストリームがあり、セキュリティと監視の目的で使用できます。

コードリンク:https://github.com/NakulLakhotia/Live-Streaming-using-OpenCV-Flask

交換グループ

パブリックアカウントリーダーグループに参加して、ピアと通信することを歓迎します。現在、SLAM、3Dビジョン、センサー、自律運転、計算写真、検出、セグメンテーション、認識、医療画像、GAN、アルゴリズムコンペティションなどのWeChatグループがあります(将来的には徐々に細分化されます)。次のWeChatアカウントをスキャンして、グループ、コメントを追加してください:「ニックネーム+学校/会社+研究の方向性」、例:「張山+上海嘉通大学+ビジュアルSLAM」。フォーマットの備考に従ってください。従わない場合、承認されません。追加が成功すると、調査の方向性に従って、関連するWeChatグループに参加するよう招待されます。グループ内で広告を送信しないでください。送信しないと、グループからの退会を求められます。ご理解のほどよろしくお願いいたします。


おすすめ

転載: blog.csdn.net/qq_42722197/article/details/109665279