今年のプライムデーは6月21日(月)、22日(火)に開催します。セール情報はこちら
Raspberry Pi 4B

ラズパイでライブストリーミングカメラを構築、VPNサーバー経由で外から確認できる

Raspberry Pi 4B
スポンサーリンク

自宅にペットや高齢者などを見守るカメラを設置している人はどのくらいいらっしゃるでしょう。特に外出先からスマホでサクッと確認できたら便利ですよね。

既製品でも構いませんが、ラズパイとカメラモジュールで簡易的なストリーミングカメラを構築してみます。

断っておきますが、私はペットも高齢者も見守る環境ではありません。

スポンサーリンク

今回の環境

自宅内であれば、Wi-Fiに接続するだけで済むことがほとんどです。外出先から確認となると、ルーターを経由しないとなりませんから、ポート開放が必要です。

更に、カメラの映像はストリーミングと言って配信する機能が無ければなりません。単にカメラで撮影できるだけでは、その機械でしか確認できません。

録画を再生するのではなく、リアルタイムに視聴するなら、映像を送り続けている状態にしないとなりません。

つまり、提供(serve)しないとならないので、ある意味でサーバーになります。

ポート開放するとセキュリティのリスクがとても高まります。できればVPNサーバー経由で閲覧した方が良いでしょう。

  1. カメラの映像を配信するサーバー(Raspberry Pi )
  2. Raspberry Pi用カメラモジュール
  3. ルーターのポートフォワーディング(ポート開放)
  4. 別のVPNサーバーと連携

Raspberry Pi は手に入りやすいRaspberry Pi 4にしました。スペック的には3B+でも良いです。Raspberry Pi Zero 系は色々と遅いので、今回は避けます。

カメラモジュールは、Raspberry Pi用のものです。メニューからカメラを有効にして再起動で使えます。

ルーターのポート開放は機種によります。この記事では家庭内で確認しています。

VPNサーバーと連携させて外出先からも使ってください。

最終的な出来上がり

インストール自体はopenCVだけ気をつければ10分程度です。

プログラムを実行すると、Webブラウザ経由で閲覧できます。

ポートは5000番になっています。

撮影風景

前回に構築したVPNサーバーと連携して、外出先からこのカメラのストリーミングも安全に閲覧できます。

ウェブアプリケーションフレームワーク「Flask」

今回のストリーミングはWebブラウザで確認するパターンです。

色々試してみたところ、いつものようにgithubから探して、文系の私にも構築できた方法でご紹介します。

mjpg_streamerなんかが有名だと思いますけど、flaskというフレームワークが気になっていたので、ちょうど良かった。

利用したプログラム:pi-camera-stream-flask

ウェブアプリケーションフレームワークの「flask」を利用しています。

肝心のプログラムは比較的に短く、gitで取り寄せればOKで手間なしです。

それにコードが複雑ではないため、理解し易く、自分で手を入れるのも良さそうに思えたからです。(自分でコードを書けないので)

この作者さん、どこかで見たことあると思ったら、スマートミラーの動画で発見していました。

インストールの注意点

サイトにあるように、各種ライブラリをインストールし、必要なアプリケーションを入れていきます。

先ずはいつものアップデートとアップグレードから始めましょう。

sudo apt update
sudo apt full-upgrade

aptコマンドで必要なライブリを追加していきます。ここは特に問題ないでしょう。

sudo apt install libatlas-base-dev
sudo apt install libjasper-dev
sudo apt install libqtgui4
sudo apt install libqt4-test
sudo apt install libhdf5-dev

次に、Flask、numpy、imutils、opencvをpip3コマンドで入れていきます。

pip、pip3やPython、Python3とか、ホントよく分からない。単純に統一して欲しい、と感じるのは非エンジニアだからかな。

どうやら現時点のRaspberry Pi OSでは、pip3も入っているし、flaskもnumpyも入っていた。

sudo pip3 install flask (既に入っていた)
sudo pip3 install numpy (既に入っていた)
sudo pip3 install imutils

問題のopencv

検索すると色々と出てくる問題のopencv-contrib-python、opencv-pythonは、調べた結果、参考にするサイトとは別の方法でインストールします。

armv7でbusterに対応しているバージョンです。バイナリで提供されます。

sudo pip3 install opencv-contrib-python==4.4.0.46

参考https://www.piwheels.org/project/opencv-contrib-python/#install

piwheelsサイトに書いてあったとおり、必要なモジュールがあります。念のためインストールを実行しました。Raspberry Pi OSをアップグレードした段階ではすべて入っていましたので、飛ばしても大丈夫です。

sudo apt install libaec0 libaom0 libatk-bridge2.0-0 libatk1.0-0 libatlas3-base libatspi2.0-0 libavcodec58 libavformat58 libavutil56 libbluray2 libcairo-gobject2 libcairo2 libchromaprint1 libcodec2-0.8.1 libcroco3 libdatrie1 libdrm2 libepoxy0 libfontconfig1 libgdk-pixbuf2.0-0 libgfortran5 libgme0 libgraphite2-3 libgsm1 libgtk-3-0 libharfbuzz0b libhdf5-103 libilmbase23 libjbig0 libmp3lame0 libmpg123-0 libogg0 libopenexr23 libopenjp2-7 libopenmpt0 libopus0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 librsvg2-2 libshine3 libsnappy1v5 libsoxr0 libspeex1 libssh-gcrypt-4 libswresample3 libswscale5 libsz2 libthai0 libtheora0 libtiff5 libtwolame0 libva-drm2 libva-x11-2 libva2 libvdpau1 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx5 libwavpack1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwebp6 libwebpmux3 libx264-155 libx265-165 libxcb-render0 libxcb-shm0 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1 libxkbcommon0 libxrandr2 libxrender1 libxvidcore4 libzvbi0

opencv-pythonも同じくバージョンを指定してインストールします。

sudo pip3 install opencv-python==4.5.1.48

改めて記載しておくと、OpenCVはバイナリでbusterでも動作するバージョンを指定してインストールしました。

今回opencvをインストールした方法
sudo pip3 install opencv-contrib-python==4.4.0.46
sudo pip3 install opencv-python==4.5.1.48

そのため参考にするサイトにあった方法ではインストールしませんでした。

どうやらコンパイルするみたいで、Raspberry Piの性能では1時間以上?かかるとあり、現実的ではありませんね。Raspberry Pi Zero 系だと1日かかったとissueにありました。

sudo pip3 install opencv-contrib-python
sudo pip3 install opencv-python

これで、コケることなく無事にスムーズにインストールは完了しました。

プログラムをダウンロード&実行

早速、作者のgithubからPythonプログラムをダウンロードして実行してみましょう。

git clone https://github.com/EbenKouao/pi-camera-stream-flask.git

pi-camera-stream-flask/というフォルダがあり、その中のmain.pyを実行します。

cd pi-camera-stream-flask/
sudo python3 main.py

実行すると、警告が出ていました。内容は、ちゃんとWSGIサーバーの仕様に準拠しろよ、ってことでした。

実稼働環境で開発サーバーを使用しないでください。
代わりに、運用WSGIサーバーを使用してください。

 Serving Flask app "main" (lazy loading)
 Environment: production
 WARNING: Do not use the development server in a production environment.
 Use a production WSGI server instead.
 Debug mode: off
 Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

別PCのWerbブラウザでなら、Raspberry Piの稼働しているIPアドレスにコロンで5000番ポートで確認できます。

iPhone縦
iPhone横

カメラモジュールを接続したRaspberry Piなら、localhost:5000/で観られます。

カメラモジュールを繋いだラズパイのブラウザ

結構、メモリー消費があるようなので、長時間も表示していると、閲覧デバイス側のWebブラウザでメモリー消費が大きくなります。macで3時間くらい試してみました。一応、大丈夫でした。

プログラムをカスタマイズ

プログラムもシンプルにcamera.pyとmain.py、表示用のHTMLはテンプレートフォルダに入っています。非エンジニアにとっては難しいですけど、それほど複雑なプログラムではありませんので、ご自分でカスタマイズしましょう。

Pythonを勉強しているなら、ちょうど良い教材だなと感じました。特に画像処理系は人気があるので、前から気になっていました。作者のEbenKouaoさんに感謝です。

画像を処理するためにopenCVをインストールしてありますが、機械学習にも利用するので、見守りカメラに物体検知を組み込むなど、コードを勉強しながら発展させてみてはいかがでしょう。

VPNサーバーと連携させて試せるように、簡単に用意できるストリーミングカメラのご紹介でした。

スポンサーリンク
■ラズパイダからのお知らせ
最初はセットになった商品がオススメ!

Raspberry Pi 4Bが発売されてから、セットアップも簡単になってきました。
とはいえ、ラズパイは基板として売っているため、まだあまりよく分からない方がバラバラに必要な物を購入するのは大変です。
初めの頃は何が良いのかも分かりません。

ラズパイダでは、たくさんのRaspberry Piを購入してきました。ケース1つにしても色々とメリット・デメリットがあります。

慣れるまではセットになった商品で善し悪しを含めてトライしてみてください。

オススメをまとめました。

ラズパイダ

コメント ご感想をお願いします。

タイトルとURLをコピーしました