キーボード一体型Raspberry Pi 400レビューはこちら

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

Raspberry Pi 4B
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で手間なしです。

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

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

インストールの注意点

サイトにあるように、各種ライブラリをインストールし、必要なアプリケーションを入れていきます。【OSはRaspberry Pi OS(32bit)のBuster】

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

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

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

調べてみるnumpyのバージョンと組み合わせがあるようです。

どうやらコンパイルするみたいで、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 はセットで始めよう /
NewLife NewDesingストア

2台目にも最適な最小基本セット!

\ 初めてのRaspberry Pi はセットで始めよう /
NewLife NewDesingストア

2台目にも最適な最小基本セット!

スポンサーリンク
未だにラズパイダも買っているセット品
Raspberry Pi 4からケーブルの種類が変わりました。あまり汎用性がなく使い回しができません。 その点、セットになっている商品なら、必要なケーブル類や専用ケースを用意する面倒が無いため、何度も購入しています。 特に最初の1台目は楽ですよ。 3種類のセット品をご案内しています。
ラズパイダ

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

  1. jazzwalker より:

    記事を読ませていただきました。いつも為になる記事をありがとうございます。

    自分のラズパイでもやってみようと考えました(OSは64bit版)。

    まず、sudo apt install libjasper-dev ですが、無いと返答が来ます。インストールしないままで進めてよろしい良いものでしょうか?

    これがないまま、進めてみたところ、
    sudo pip3 install opencv-contrib-python==4.4.0.46
    sudo pip3 install opencv-python==4.5.1.48
    としますと、赤文字のエラーが出てインストールできませんでした。ここでコケました。

    コメントを頂ければ幸いです。

    • ラズパイダ ラズパイダ より:

      いつもコメント、ありがとうございます。

      それ、もしかしたら64bitだからかも知れません。

      参考までにエラーメッセージをプリーズ。

      OSのバージョンが上がったりすると、変わっていたりしますけどね。
      libjasper-devはOpenCVの実行で必要なライブラリです。

      そこはハマらなかったので、たぶん、32bitとは違うのではないでしょうか。

      • jazzwalker より:

        コメントありがとうございます。

        参考までに例えば、
        sudo pip3 install opencv-contrib-python==4.4.0.46
        を実行すると、しばらくビルドした後に以下のようなメッセージが出ます。

        赤字で表示された部分だけ貼り付けます。

        Command “/usr/bin/python3 -m pip install –ignore-installed –no-user –prefix /tmp/pip-build-env-i91aqq32 –no-warn-script-location –no-binary :none: –only-binary :none: -i https://pypi.org/simple –extra-index-url https://www.piwheels.org/simple — setuptools wheel scikit-build cmake pip “numpy==1.13.3; python_version==’3.6′” “numpy==1.14.5; python_version==’3.7′” “numpy==1.17.3; python_version==’3.8′” “numpy==1.19.3; python_version>=’3.9′”” failed with error code 1 in None

        以上です

        • ラズパイダ ラズパイダ より:

          エラーメッセージのコピペをありがとうございます。

          それぞれ、バージョンがどうなんでしょう。
          pip3のアップデートは試しました?
          pip3 install --upgrade pip

          また、既にRaspberry Pi OSに入っていた以下も実行してみてください。
          sudo pip3 install flask
          sudo pip3 install numpy

          それか、scikit-build自体をインストールするのはどうでしょう。
          python3 -m pip install scikit-build

          microSDカードがどこかに行ってしまい、同じ環境が無くなってしまいましたので検証していません。
          多分、バージョン絡みかと。
          私がトライした時はエラーが出ませんでした。

          Anacondaの方が簡単とエンジニアの人は言いますが、なんだか余分なような気がして、あまり好きではありません。
          pipもあまり好きではありませんけど。

          詳しくは知りませんが、どうもenv環境でのビルドのエラー報告が多いようですね。
          非エンジニアの私にはとても難しく思えます。

          • jazzwalker より:

            返信ありがとうございます。

            pip3のアップデート及び
            scikit-build自体のインストール
            をやってみました。
            ですが、結果は同じでした。

            どうも私のラズパイでは出来なさそうです。

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