土曜日, 11月 28, 2015

たった半日でRaspberry Piを使った監視カメラと配信サーバを作る Step 2



前回

ということで、今回から設定していきます。
beepcapです。

前回で必要なソフトのインストールは大体終わったので、設定を行います。

Raspberry Pi 設定

Raspberry Pi2ではmotionの設定を以下のように変更します。
  • 画像の出力は動体検出ではなく定期的に
  • 画像のファイル名は固定(取得のたびに上書き)
  • 画像の置き場はramfs
そのためには、まずエディタで/etc/motion/motion.conf
を開く必要があります。

raspbianではデフォルトでnanoが採用されているので、
sudo nano /etc/motion/motion.conf
とします。

とりあえず僕は以下のように変更しました。
<<後日設定ファイルをはりつける>>

## デーモンモードを切る
daemon on

daemon off

## 常にキャプチャを取得する
emulate_motion off

emulate_motion on

## 動画の出力を停止する
ffmpeg_output_movies on

ffmpeg_output_movies off

## ramfsにファイルを出力する
target_dir /var/lib/motion

target_dir /dev/shm

## 出力ファイル名を固定する
picrure_filename  %v-%Y%m%d%H%M%S-%q

picure_filename output

ここで、動作確認をしてみます。
USBカメラをRaspberry Pi2に接続し

sudo motion

を実行し、出力された/dev/shm/output.jpgを確認して下さい。
画面がキャプチャされていれば成功です。

さて、サーバにuploadするための仕組みも作りましょう。

以下のようにしてスクリプトを書きます。

nano upload.sh
以下ファイル内

#!/bin/bash
while :
do
  scp -i "azureサーバの秘密鍵" /dev/shm/output.jpg azureuser@******.test-serv.cloudapp.net:/home/azureuser/output.jpg
sleep 1
done
秘密鍵は事前に作っておく必要があります。
秘密鍵の作成手順は、あとで例として載せますが、同じ手順である必要はありません。


上のスクリプトは1秒に一回、画像ファイルを/home/azureuser/output.jpgに上書きします。

 あとはこれらを起動時にじっこうするよう、Raspberry Pi2に登録します。

sudo nano /etc/rc.local
 このファイルのexit 0 の前に以下の2行を追加します。

motion&
/bin/bash /home/pi/upload.sh&

これで、Raspberry Pi2は起動後からカメラだ撮った内容をサーバにuploadし続ける機器になりました。

サーバ側の設定

さて、Azure側では受け取った画像を公開しなければなりません。
今回は気取って、canvasを使いました。
web 1.0な人はimgタグをつかってreloadすればおしまいです。

nano index.html
ここで新規に作成して


<html>
<script>
onload = function() {
  draw();
  setInterval("draw()", 1000);
};

function draw() {
  var canvas = document.getElementById('c1');
  if ( ! canvas || ! canvas.getContext ) { return false; }
  var ctx = canvas.getContext('2d');
  var img = new Image();
  img.src = "output.jpg?" + new Date().getTime();
  img.onload = function() {
    ctx.drawImage(img, 0, 0, 640, 480);
  }
}
</script>
<canvas id="c1" width="640" height="480"></canvas>
</html>




こんな感じのスクリプトを仕込みます。

上のスクリプトが何をやっているのかは見ていただければわかりますが、
最大限手抜きをしているので資源がもったいないとかはご容赦下さい。

さて、index.htmlがAzureの /home/azureuserに出来たかとおもうので、
webサーバを立ち上げます。

~/thttpd-2.27/thttpd -d .

終わり!!!(※1)

※1 Azureの場合はポートを開ける動作として、エンドポイントの設定でHTTPを開いて下さい。

あとは、Raspberry Pi2を起動して、サーバのwebページにアクセスすれば、
バッチリカメラ画像が更新されているはずです。




さいごに

どうだったでしょうか?
半日で出来たでしょうか?

普段、ちょっとほしいなと思いつつも、中々ハードルが高そうで出来ないこと。
それを実現するのがIoTと呼ばれる、簡易組み込みの世界だと思います。

こうやってどんどん、楽に、色々作っていけたら楽しいですよね!

ではでは。
beepcapでした。




おまけ

サーバで公開鍵認証を行う方法

ssh-keygen -t rsa
cd ~/.ssh
cat id_ras.pub >> authorized_keys
あとは、id_rsaをRaspberry Pi2側に転送すればok

使いまわさないように注意。


0 件のコメント:

自己紹介

自分の写真
NetRadioDJ ...since 2003, Programer ...since 1994