- RTSPストリーミング用のDVRの準備
- ラズベリーパイの準備
- RaspberryPiへのOpenCVおよびその他のライブラリのインストール
- CCTVからRTSPビデオをストリーミングするためのRaspberryPiのプログラミング
- Raspberry PiCCTVビューアのテスト
今日の職場や商業ビルのほとんどには、活動を監視するためにCCTV監視システムが設置されています。しかし、関係当局やセキュリティ担当者がすべてのカメラのライブフィードを継続的に監視して、疑わしいアクティビティを探すのは難しい場合がよくあります。コンピュータービジョンと機械学習が急速に進んでいる今、CCTVシステムをよりスマートにする時が来ました。この記事では、PythonとOpenCVを使用したRaspberry piでのRTSPストリーミングを介して、既存のDVR(Hikvision DVRなど)からビデオフィードを取得する方法について説明します。これを取得すると、これらのビデオフィードでOpenCVの機能を活用して、特定のオブジェクトを検出したり、車両のナンバープレートや顔認識などを読み取ったりできるようになります。
このチュートリアルでは、建物にすでに設置されているHikvision4チャンネルのCCTVDVRを使用します。4つのカメラ画面すべてをラズベリーにストリーミングし、ユーザーが必要に応じて各チャネル間を移動できる5インチのタッチスクリーンディスプレイに表示します。OpenCVのパワーを考えると、これはあまりわかりません。モーション検出、ラッパビデオアラート、人物追跡などでスケールアップする予定ですが、それはすべて別のチュートリアルに任せましょう。
RTSPストリーミング用のDVRの準備
ラズベリーパイのハードウェアとPythonコードに飛び込む前に、DVRがRTSPをサポートしているかどうかとそのアクセス方法を確認することが重要です。手順はDVRのタイプごとに異なるようであり、多くのヒットを試してみる必要があるため、私はほとんどの時間をここで立ち往生して過ごしました。しかし、これを理解すると、毎回魅力のように機能します。
まず最初に、DVRシステムのユーザー名とパスワードを知っていること、そしてそれがインターネットに接続されていることを確認してください。また、このチュートリアルでは、ローカルネットワークからのみRTSPをストリーミングします。静的IPを使用している場合は、ポートフォワーディングを実行し、他のネットワークでも同じことを実行できます。ただし、このチュートリアルに関しては、ローカルネットワーク内ですべてを実行します。
ステップ1: DVRのIPアドレスを見つけます。DVRがインターネットに接続されると、独自のIPアドレスが割り当てられます。このIPアドレスは、ルーターの構成ページまたはDVR画面自体から見つけることができます(モニターがDVRに接続されている場合)。私のルーターのIPアドレスはhttp://192.168.11.110/でした(安全上の理由で変更されました)
ステップ2:任意のWebブラウザーを開き、IPアドレスを入力して、Enterキーを押します。DVRログインページに移動します。DVRのユーザー名(私のものは変更されています)とパスワードを入力する必要がある場所。デフォルトのユーザー名はadminですが、パスワードは知っておく必要があります。DVRのログイン画面を以下に示します。外観が異なる場合があります。
ステップ3:ログインに成功したら、DVRでRTSPポート番号を探します。ほとんどの場合、デフォルト値は554ですが、変更される可能性があります。ここで構成設定を試して、RTSPを有効にするオプションがあるかどうかを確認します。ない場合は、スキップできます。手順はDVRによって異なるため、ここでしばらく時間を費やす必要があります。
ステップ4: RTSPリンクを準備します。基本的なRTSPリンクは次の形式になります-
rtsp://
繰り返しますが、それはDVRのタイプに依存します、あなたはあなたのために働くものを見つけるためにグーグルを使うことができます。動作したものは以下のフォーマットでしたが、これで試すこともできます-
rtsp://
どこ
rtsp:// admin:[email protected]:554 / Streaming / Channels / 202 /
ステップ5: VLCでストリームを再生して、RTSP接続が機能していることを確認します。DVRと同じネットワークに接続されているコンピューターにVLCをインストールして起動し、 Ctrl + N を押してネットワークストリーミングを行います。以下に示すようにURLを入力し、[OK]を押します。
RTSPリンクが正常に機能している場合は、以下に示すように、VLCプレーヤーでCCTVのライブストリームが表示されます。エラーがスローされた場合は、正しいリンクを見つける必要があります。
これが完了すると、DVRについて話す必要がなくなり、Raspberrypiを使用できるようになります。
ラズベリーパイの準備
次に、5インチディスプレイでラズベリーパイをセットアップする必要があります。すでに何度も取り上げているので、その詳細については説明しません。あなたはガイダンスのために以下の記事を読むことができます-
- RaspberryPi入門
- 5インチディスプレイとRaspberryPiのインターフェース
Debian BusterOSが実行されているRaspberryPi 3 B +を使用しています。可能であればPi4を使用し、ヒートシンクやファンなどの冷却オプションを追加することもお勧めします。温度がほぼ70 * Cに達していることに気付いたからです。私は今のところ冷却手順に従わなかった、そして私のセットアップはこのように見える-
RaspberryPiへのOpenCVおよびその他のライブラリのインストール
次のステップは、RaspberryPiにOpenCVをインストールすることです。以前、RaspberrypiでOpenCVをコンパイルする方法について説明しました。
- RaspberryPiへのOpenCVのインストール
- OpenCV入門
上記のリンクをたどってCmakeを使用してOpenCVをコンパイルするか、apt-getメソッドを使用してインストールすることができます。それほど深刻なOpenCVプログラミングに興味がない場合は、後でお勧めします。次のコマンドを使用してOpenCVをインストールしました。
sudo apt update sudo apt install python3-opencv
このプログラムでは、「cvui」ライブラリを使用して、4つの画面間を移動できる2つのボタンを備えた基本的なUIを作成します。cvuiをインストールするには、以下のコマンドに従います。
Python3 pip install cvui
両方のパッケージがインストールされたら、メインプログラムに入ることができます。インストールされている両方のパッケージが、Piのコマンドターミナルからインポートしようとして機能していることを確認します。
CCTVからRTSPビデオをストリーミングするためのRaspberryPiのプログラミング
このプロジェクトの完全なプログラムは、このページの最後にあります。その説明は以下のとおりです。必要なヘッダーファイルを含めることからプログラムを開始します。
インポートcv2インポートcvui
プログラムの次の部分では、編集が必要です。DVRのユーザー名とパスワードを入力する必要があります。5インチディスプレイの場合、幅と高さはそれぞれ800と480なので、同じものを入力しました。
rtsp_username = "admin" rtsp_password = "aswinth347653" width = 800 height = 480 cam_no = 1
次に、表示する必要のあるカメラ番号を変更するたびに使用されるカメラの作成という機能があります。
def create_camera(channel):rtsp = "rtsp://" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100:554 / Streaming / channels /" + channel + "02" cap = cv2.VideoCapture()cap.open(rtsp)cap.set(3、640)#幅のID番号は3ですcap.set(4、480)#高さのID番号は480ですcap.set(10、100)#明るさのID番号は10qqですリターンキャップ
メインのwhileループ内には、キャプチャデバイスからフレームを読み取り、それをフルスクリーンに変換するプログラムがあります。プログラムの表示ウィンドウは画面と呼ばれます。
成功、current_cam = cam.read()dim =(幅、高さ)Full_frame = cv2.resize(current_cam、dim、interpolation = cv2.INTER_AREA)cv2.namedWindow( 'screen'、cv2.WINDOW_NORMAL)cv2.setWindowProperty( 'screen '、cv2.WND_PROP_FULLSCREEN、cv2.WINDOW_FULLSCREEN)
続いて、画面に配置される2つのボタンのコードがあります。コマンド cvui.button を使用してボタンを必要な場所に配置し、コマンド cvui.mouse を使用してマウスクリックを検出します。我々は2を持っている 場合は 2つのボタンの文がボタンがクリックされた場合に、それぞれの 場合の 文が実行されます。
if(cvui.button(Full_frame、width-100、height-40、 "Next")and cvui.mouse(cvui.CLICK)):print( "Next Button Pressed")cvui.init( 'screen')cam_no = cam_no +1 if(cam_no> 4):cam_no = 1 del cam cam = create_camera(str(cam_no))if(cvui.button(Full_frame、width-200、height-40、 "Previous")and cvui.mouse(cvui。 CLICK)):print( "Previous Button Pressed")cvui.init( 'screen')cam_no = cam_no-1 if(cam_no <1):cam_no = 4 del cam cam = create_camera(str(cam_no))
if ステートメント内で、ボタンに基づいて cam_no countを増減してから、既存のカムを削除し、上記の関数を使用して新しいカムを作成します。また、UI画面を更新するには、 cvui.init を毎回呼び出す 必要 があることに注意してください。
コードの最後の部分は、フレームを出力として表示し、qが押されたときに出力画面を終了することです。キーストロークを待つだけで、キーが「q」の場合、すべてのウィンドウが破棄されます。
cv2.imshow( 'screen'、Full_frame)if cv2.waitKey(1)&0xFF == ord( 'q'):cv2.destroyAllWindows()break
Raspberry PiCCTVビューアのテスト
コードのテストは非常に簡単です。piの電源を入れ、このページの下部にあるpythonコードを起動します。RTSPリンクが機能するための正しい資格情報を入力したことを確認してください。安全を確保したい場合は、バスターOSにプリインストールされているPiでVLCプレーヤーを使用することもできます。
VLCで機能する場合は、piが同じネットワークに接続され、RTSPリンクが正常に機能していることを確認できます。次に、このページの下部にあるプログラムを開き、PythonIDEを使用して起動します。資格情報が正しく入力されると、次の画面が表示されます。これは、下部に2つのボタンがあるライブカメラフィードを示しています。
画面にはTFTタッチスクリーンが搭載されているため、「前へ」ボタンと「次へ」ボタンをタッチするだけで次のカメラに移動できます。プログラムは最初の4台のカメラ間でループするように作成されており、DVRに接続されているカメラが4台を超える場合は簡単に変更できます。
このプロジェクトの完全な動作は、以下にリンクされているビデオで見つけることができます。チュートリアルを楽しんで、質問がある場合に役立つことを学んだことを願っています。コメントセクションに残してください。または、フォーラムを使用して他の質問を投稿することもできます。また、この設定にモーション検知と動画保存機能を追加する予定ですので、ご期待ください。