自宅にいないとき、うちのネコちゃんを見たいことがあります。それで手元にあるRaspberry Piを利用して、遠隔監視できるシステムを作ってみました。
必要なものは以下の通りです。
【ハードウェア】
- Raspberry Pi B Type
- SDカード
- WebCam Logicool C270 – 公式サイト
- LANケーブル or Wifi アダプター
【ソフトウェア】
- Motion – オンラインWebCamサーバーおよび移動検出ソフト(無料)
- MJPEGPlayer – ネコ技術オリジナル提供(無料)
また、初期設定の時以下を用意する必要があります。
- HDMIケーブル
- USBキーボード
Raspberry Piの準備
Raspberry Pi B TypeはRC Component Onlineから4000円程度で入手できます。A Type は1000円ぐらい安いですがLANインターフェースが搭載していないようで、今回では使えません。Raspberry Piの公式サイトからLinuxのイメージ(Raspbianという)をSDカードにダウンロードし、SDをRaspberry Piに差し込みます。具体的なインストール手順はこちら(英語)です。
最初Raspberry Piのネットワークが設定していない場合HDMIケーブルを利用しモニターやテレビに接続すると画面が表示されます。USBキーボードをRaspberry Piに繋いでから電源を入れます。Linuxの起動後にシステムにログインし、ネットワークが正しく動作しているか確認してください。
WebCamの接続
今回利用するLogicool M270はドライバーのインストールが不要ですのでRaspberry Piに差し込めばそのまま利用できます。
配信サーバー設定
Motionインストール
MotionはWebCamの入力画像をMJPEG Streamでインターネットに配布と、入力画像から動的なものを検出する機能を搭載しています。
sudo apt-get install motion
Motion設定
Motionの設定ファイルを編集します。
sudo nano /etc/motion/motion.conf
多くの設定値が既定のままでOKですので、以下私が編集した値のみを紹介します。
まず基本設定のSectorです。
############################################################ # Basic Setup Mode ############################################################
入力カメラのデバイス名を指定します。カメラは1個しかない場合普通Video0となります。2個目からVideo1、Video2のようになります。
# Videodevice to be used for capturing (default /dev/video0) videodevice /dev/video0
入力デバイスタイプを設定します。USBカメラの場合8に設定します(既定値)。
# The video input to be used (default: 8) # Should normally be set to 0 or 1 for video/TV cards, and 8 for USB cameras input 8
入力画像のサイズを指定します。サイズが大きい場合転送必要なデータ量も増えますのでバランスを取って適切なサイズを設定します。幅と高さの値は16の倍数が必要です。
width 352 height 288
framerateは1秒に何枚の画像を取るかの設定です。2に設定する場合1秒に2枚の写真を撮ります、つまり0.5秒ずつです。あまり高く設定してもネットの転送スピードがネックになりますのでそれなりのスピードで再生出来ません。私の場合2がちょうどよく、4が限界な感じです。
# Maximum number of frames to be captured per second. # Valid range: 2-100. Default: 100 (almost no limit). framerate 2
次のSectorの画像ファイルの設定を行います。
############################################################ # Image File Output ############################################################
Motionの出力ビデオはMJPEGですので全て画像がJPEGフォーマットになります。JPEGの圧縮率を設定することができます。100に近づければ画像の品質が高まりますが、転送必要なデータ量も増えます。大体60~80の範囲が最適です。もともとカメラのセンサーもそれほど高くないので、80以上の場合よい品質も得られません。
quality 80
次にFFMPEGの設定です。FFMPEGはJPEG画像をFlashに書き込に、Flash Playerから一気に再生することが出来ます。つまりVideoのようになります。
############################################################ # FFMPEG related options ############################################################
FlashファイルSWFの出力はデフォルトでOffとなっています。Onに変更します。
# Use ffmpeg to encode mpeg movies in realtime (default: off) ffmpeg_cap_new on
動的なものが検出されたらSWFとJPEG画像を出力します。その出力形式と保存先フォルダーを設定することができます。出力フォルダーをHTTPサーバーのパスに指定すれば、遠隔PCやスマホからWeb経由で出力画像を見ることが可能になります。
############################################################ # Target Directories and filenames For Images And Films ############################################################ # Target base directory for pictures and films # Recommended to use absolute path. (Default: current working directory) target_dir /var/www/webcam/
出力ファイル名を設定します。名前の先頭にパスも入れることができます。私の場合当日の日付をフォルダー名にしています。
snapshot_filename %Y-%m-%d/%v-%Y%m%d%H%M%S-snapshot jpeg_filename %Y-%m-%d/%v-%Y%m%d%H%M%S-%q movie_filename %Y-%m-%d/%v-%Y%m%d%H%M%S timelapse_filename %Y-%m-%d/%Y%m%d-timelapse
次は一番重要、一番面白い機能(オンラインリアルタイムの動画配信)を設定します。
############################################################ # Live Webcam Server ############################################################
まずサーバーのポート番号を設定する必要があります。デフォルトが0=禁止になり、それを自分の好きな番号に換えてください。私の場合9901と設定しています。
webcam_port 9901
転送JPEG画像の品質(圧縮率)を設定します。
webcam_quality 80
MAX転送率を1に設定します。1秒1枚をネットで配信します。
webcam_maxrate 1
インターネットでの配信の場合、以下の設定をデフォルトのonをoffに変更する必要があります。
# Restrict webcam connections to localhost only (default: on) webcam_localhost off
設定は以上です。以下のコマンドでMotionを起動してみます。
sudo motion
出力内容を確認します。
Jun 5 09:14:58 raspberrypi motion: [0] Motion 3.2.12 Started Jun 5 09:14:58 raspberrypi motion: [0] ffmpeg LIBAVCODEC_BUILD 3482368 LIBAVFORMAT_BUILD 3478785 Jun 5 09:14:58 raspberrypi motion: [0] Thread 1 is from /etc/motion/motion.conf Jun 5 09:14:58 raspberrypi motion: [1] Thread 1 started ... Jun 5 09:14:58 raspberrypi motion: [1] Resizing pre_capture buffer to 1 items Jun 5 09:14:59 raspberrypi motion: [1] Started stream webcam server in port 9901
最後にStarted stream webcam server in port 9901が出力されたらMotionが正しく起動したということです。
遠隔再生クライアントアプリ
これからサーバーのリアル配信動画を受信し再生するためのプログラムを設定します。インターネット通信に対応するMJPEGプレーヤーならどれでも再生できると思いますが、ここで利用するのがネコ技術のオリジナルソフトであるMJPEGPlayerです。(オプーンソース、無料)
インストールが不要で解凍して実行します。実行するとプレーヤー画面が表示します。ダウンロードの際に警告が出るかもしれませんがこのサイトが作ったソフトなので安全です。
ソースコードはGitHubから取得できます。
右クリックまたは「Open Stream…」をクリックする、または左上の2番目の「フォルダーを開くアイコン」をクリックします。
この画面からURLを入力します。
URLの形式は:
http://<raspberry PiのIPアドレス>:<port番号>
となります。IPアドレスはifconfigで確認できます。ポート番号は先ほど設定した9901です。入力したら「Open」ボタンを押します。
正しく受信できる場合画面にカメラの映像を再生します。
インターネットでの配信
上記のように配信・受信できる場合さらに少し設定を行うとインターネットでの配信も可能になります。家のWifiルーターのPort Forwardingという機能を利用する必要がありますので、Port Forwardingの画面を開いて、以下のような設定を行ってください。
TCPのポート番号をPublic/Private共にMotionの設定を9901に指定します。設定が完了したらWifiルーターを再起動してください。
ネコ技術のMJPEG Playerの「Open Stream…」画面を呼び出してURLを入れ直します。インターネットでの受信の場合家のPublic IPを入力する必要がああります。Public IPが分からない場合、Googleで「what is my ip address」を検索するとIPアドレスがわかります、そのアドレスを利用してください。
以上
MJPEGPlayerをChromeでインストールすると
「MJPEGPlayer.zipは一般的にダウンロードされておらず、危険を及ぼす可能性があります」と警告が出てきましたので
「このソフトをダウンロードする際に警告が出るかもしれませんがこのサイトが作ったソフトなので安全です」的な
文章を入れといた方がいいと思います
ご教示ありがとうございます。
該当文言を追加いたしました。