
前々回セットアップしたraspberry pi zero Wにwebカメラを装着します。動かすソフトはraspberry piに特化したRPi Cam Web Interface (現在 version 6.3.3)を使います。
URL: http://elinux.org/RPi-Cam-Web-Interface
特徴です(webサイトより)
- 高いフレームレートでの表示,センサーの全エリア使用可能
- カメラの明るさややコントラスト等を調節可能
- mp4形式でフルHDビデオ画像をSDカードに保存
- 静止画およびコマ撮り静止画をSDカードに保存
- SDカードに保存した動画や静止画をプレビュー可能、サムネイルを指定してダウンロード,zip形式で一括ダウンロード可能
- 動体検知して録画をする機能、スクリプトを実行する機能
- 録画動作のスケージュール機能
- 古くなった録画ファイルの自動削除等々
とても高機能です。カメラからの動画をブラウザ等でモニタできて、それと同時にSDカードに記録できます。動体検知して静止画やコマ撮り静止画、動画いずれかを書込み可能です。同時にスクリプトも実行可能なので、以前失敗したメール送信なども再びチャレンジできそうですね。
また、時間に応じてカメラの設定、録画方式等を変えるなどのスケージュール機能も備えています。経度、緯度を指定して日の出、日没を算出するユニークな機能も備えています。
このソフトはRasiperry Piカメラのみに対応していてUSBカメラには対応していないみたいです。
■ インストール作業
Raspian Jessie Liteをインストールした後に、上記サイトのBasic Installationに書かれているとおりに作業して問題なくインストールできました。ただ、サイトの最後の方にコマ撮り録画をスムーズにするためにgstreamerをインストールした方が良いと書いてあります。sudo apt-get install gstreamer1.0 コマンドでインストールできますが、しばし時間がかかります。
新規インストールするならばFullパッケージのインストールをお勧めすると書かれていたので、Lite ではなくRASPBIAN JESSIE WITH PIXELをインストールする方法を改めて試してみました。前回の記事に書いたように、wpa_supplicant.confを作成し、sshを自動起動させるようにすると、すべてSSH経由で作業できます。

etcher
[インストールしたOS]
2017-03-02-raspbian-jessie.img
RASPBIAN JESSIE WITH PIXEL
Image with PIXEL desktop based on Debian Jessie
Version:March 2017
Release date:2017-03-02
Kernel version:4.4
Release notes:Link
■ OS をEtcherなどでSDカードに書き込み後、セットして電源を入れます
・パスワードを変更します
$ passwd
・不要なパッケージを削除します
$ sudo apt-get remove --purge wolfram-engine scratch minecraft-pi sonic-pi dillo gpicview penguinspuzzle oracle-java8-jdk openjdk-7-jre oracle-java7-jdk openjdk-8-jre
$ sudo apt-get clean
$ sudo apt-get autoremove
・パッケージを最新にします
$ sudo apt-get update
$ sudo apt-get dist-upgrade
raspi-configを起動します
$ sudo raspi-config
・タイムゾーン設定
4 Localisation Options> I2 Change Timezone > Asia > Tokyo
・テキストログインへ変更&自動ログインを禁止
3 Boot Options > B1 Desktop / CLI > B1 Console
・カメラサポートを有効にします
5 Interfacein Options > P1 Camera > Yes

・github リポジトリをクローンしてRPi_Cam_Web_Interfaceをインストールします
$ git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
$ cd RPi_Cam_Web_Interface
$ chmod u+x *.sh
$ ./install.sh
途中、オプション選択画面になります。Webサーバは3種類の中からお好みで選択できますが、なるべく軽い方が良いかと思い,初めて使うlighttpdにしました。インストール後別のwebサーバにする時はクリーンインストールからやり直すことを勧めています。
また、Webの管理画面にBasic認証をかけるときはUser Passwordを入力します。
(※2018/01/21追記※ コメント欄で教えて頂いたのですが、現時点では認証動作を設定しても機能しないみたいです。)

AutoStartを選ぶと電源投入後自動起動します。またRPi_Cam_Web_Interfaceフォルダの中のstart.sh stop.shでプログラムのスタート・ストップ可能です。update.shでプログラムのアップデート,remove.shでプログラムの削除となります。
■ カメラを接続します
わたしが購入したのはHD 1080P Camera Module Board 5.0MP Wide Angle Fish Eye For Raspberry Pi A/B
こちらです。(後で気付きましたが赤外線カメラでした)

5MP(2592×1944pixel)画素で 1080p/30fps 720p/60fps 640×480/90 のVideoを配信できます。さらに魚眼レンズ付きといううたい文句でした。どんな映像がとれるのか楽しみです。付属のカメラケーブルではzeroに取り付けられないので、あらかじめPiromoni社からZero用のカメラケーブルを仕入れておきました。ところが…

一瞬目がくらみました
やってしまいました!!カメラケーブル取り付けの時にプラスチック製の留め具を破損してしました。賢明な皆様はこのようなドジはしないと思いますが、お気をつけください。留め具は1mm~2mmぐらいしか動く範囲がありません。取り扱いはソフトにお願いいたします。
ケースは余裕をもたせTAKACHIのプラスチックケース SW-100にしました。電源ですがmicro-usbとGPIOの+5V,Gndどちらに接続しても同じらしいです。今回はGPIOの方にに給電しますが、くれぐれも結線間違いしないようにせねばなりません。+-を逆にしたり他のGPIOピンに電圧をかけたりすると壊れてしまいます。また、未確認ですが電源は3.3Vの電圧でも動作可能らしいです。

さて、カメラとZero Wを結線して電源を入れます。ブラウザでアクセスするアドレスはhttp://ipAddress:port/subfolderとサイトに書かれています。macとwindows10ではipアドレスだけではなくホスト名.localでもアクセスできます。デフォルトの80番でインストールしたならば:portも不要です。
ただ、上記の記述に反し、意外にも今回私のインストール作業では http://raspberrypi.local/ (サブディレクトリなし)が管理画面になっていました。webサーバにlighttpdを選んだ時だけみたいです。インストーラーのバグでしょう。webサーバにapach,nginxを選んでデフォルトでインストールしたときは、マニュアル通りhttp://raspberrypi.local/html/が管理画面になります。
また、http://raspberrypi.local/min.php へアクセスするとコントロールボタン等は表示されず、カメラ画像だけが表示されまます。
ちなみにchrome v59.0 ,IE11,opera v44.0,firefox v51.0ではホスト名でアクセスできるのですが、なぜかMS Edge 38.14393 ではIPアドレスでしかアクセスできませんでした。
アクセスした画面にエラー表示が出るときは,カメラケーブルの接続が悪いか又はraspi-configでカメラを有効にしていない可能性があります。再起動で回避できることもあります。

RPi-Cam-Web-Interface管理画面です
■ 使い方
設定できるパラメータがたくさんあって、私は全部の内容を理解できていません。わかるところを簡単にご説明します。設定した値は System > reset Setting で元に戻すことができるので色々トライされることをお勧めします。(注 : schedule settingsはリセットされません)
[record video start/stop] 現在のカメラ画像の動画録画をスタート・ストップ
[record image] 現在のカメラ画像の静止画をキャプチャー
[tamelapse start/stop] 現在のカメラ画像のコマ撮りをスタート・ストップ
[motion detection start/stop] 動体検知録画をスタート・ストップ(Camera Settingで Motion detect modeをInternalにする必要があります)
※ 4/3 追記 設定項目は多数ありますが、とりあえず Camera Setting > Motion detect mode : Internal 次にmotion detection start だけで動体検知-動画(Video)録画することが可能です。ただ、このままだとSDフラッシュカードがいずれ満杯になってしまいますので、古くなったファイルの削除(後述)だけは、設定しておいた方が良いでしょう。
[Camera Setting]

Resolutions: Video及び静止画,解像度等を設定します
Timelapse-Interval (0.1…3200): コマ撮りの間隔(秒)
Video Split : 動画を分割します(秒)
Annotation (max 127 characters): アノテーション デフォルトで日時が表示されています
Buffer (1000… ms), default 0: 動体検知して録画されるまでにタイムラグがあるので画像のバッファリングを予めおこないます(ms)
Sharpness: シャープネス
Contrast : コントラスト
Brightness : 照度
Saturation : 彩度
ISO : ISO感度
Exposure Mode : 露光モード
White Balance : ホワイトバランス
Image Effect : 画像にイフェクトをかけることができます
Rotation : 90度単位で画像を回転させます
Sensor Region : 画像センサーの使う範囲を指定
MP4 Boxing mode : h264動画をmp4に変換するモード
Motion detect mode : 動体検出モード
MP4 Boxing mode は動画ファイルのmp4変換作業の選択で、backgroundにするとブラウザで動画を再生することができますが、CPU処理を消費してしまい反応が遅くなります。offにするとブラウザでは見ることができずダウンロードしてからVLCメディアプレーヤーなどで再生することになります。その場合でもサムネイルは作成されます。
Motion detect mode : Internalにすると Motion Settingsのボタンが出現して動体検出の設定ができるようになります。
アノテーションはデフォルトで日時が表示されますが、スクリプトを組んで他の情報も表示させることが出来るみたいです。
[Motion Settings]

動体検知のセッティングです。風で木の枝が動いたことなどで録画スイッチが入ってしまうとか、細かく考えると動体検知の調整は少々めんどうです。ただ、デフォルトのままでも動体検知しますので詳細にセットしたい時だけ値を変更するのが良いと思います。
Noise level : ノイズと動きを区別するために画像をフィルタします
Threshold : 画像変化の検知基準をpixl数でセットします
Clipping factor : Thresholdで変化のあったフレームを何個で有効とするかの値
MasK Image: 不検知部分のファイルを作成して、動体検知の範囲を絞ります。ファイル形式はPGMで画像と同じ幅,高さでなければいけません。
Changes Frames to start : スタートとなる動体検知のフレーム数
Still Frames to stop : ストップとなる動体不検知のフレーム数
自分の理解ではスレッショルドを超えたフレーム数が(Changes Frames to start)×(Clipping factor)個になった時にスタートとなるのではないかと思います。誤っていたらすみません。
[System]

シャットダウンやリブート、[Camera Setting]と[Motion Settings]パラメータのリセットができます。Default Stream とMJPEG Streamの切り替えもありますが、何が違うのか私にはわかりません。
[Edit schedule settings]

指定した時間にカメラの感度等などの設定や記録する方式を変更するなど、コマンドを実行することができます。Command referenceのボタンを押すと実行できるコマンドの説明が出てきます。デフォルトは24時間休みなく動体検知したときに動画を記録する設定になっています。管理画面トップのmotion detection start ボタンをクリックすると動体検知録画がはじまります。起動と同時に動体検知する場合はこの画面のPeriod Start欄に md 1を書き込みます。
MOtion Start Stopの欄ですが、コマ撮りをしたいときはca 1をtl1 ,ca 0 を tl 0 に変更します。同様に静止画1枚を撮りたいときときはca 1を
imに変更します。
Days Su-Sa 欄のチェックは日曜日から土曜日に対応して、曜日による動作指定です。チェックがない曜日はその右にかかれている動作を行いません。
● 録画した画像ファイルがSDカード容量を超えてしまうのを防ぐためにファイル削除機能があります。2通りの設定方法があります。
1. PurgeVideo_Hours PurgeLapse_Hours PurgeImage_Hours それぞれ動画、コマ撮り静止画、静止画が指定時間以上古いファイルを消去します。48を指定すると2日以上たったファイルは消去されます。
2. ファイルの最大の記録スペースを指定して、それを超えた時に古いファイルから消去する方法。
PurgeSpace_ModeExを下記のいずれかで選んで値を PurgeSpace_Levelに設定します。
Min Space % (書込み可能ファイル容量の最小値 パーセント)
Max Usage % (使用済ファイル容量の最大値 パーセント)
Min Space GB (書込み可能ファイル容量の最小値 ギガバイト)
Max Usage GB (使用済ファイル容量の最大値 ギガバイト)
このファイル削除作業はManagement_Interval に設定された秒数(デフォルトでは1時間)ごとに行います。
同時に実行させたいスクリプトがもしあれば、Management_Command を指定します。このスクリプトはインストールしたサブディレクトリ下にあるmacroディレクトリに保存されていて、実行可能でなければなりません。
● DayModeはAll Day(全日)の他に Sun Based (日の出、日の入りの時間を基準) Fixd Time(特定の時間指定)があります。

Sun Based DayMode
Sun Based DayMode は一日をDawn(明け方),Day(日中),Dusk(夕暮れ),Night(夜中)の4つに区切ります。日の出を基準にDawnStart_Minutes(負の値) DayStart_Minutes を設定して明け方の時間を定めます、日の入りを基準にDayEnd_Minutes DuskEnd_Minutes を設定して夕方の時間を定めると、4つの時間帯が定まります。
日の出、日の入りの時刻は自動的に計算されますが、そのために Latitude(緯度) Longtitude(経度) GMT時間との差を指定します。東京の例をとるとLatitude=35,Longtitude=139,GMTOffset=9 になると思います。
Period Start欄にその時間が来たら実行させたいコマンドを設定します。

Fixed Times DayMode
Fixed Times は時間固定で指定です。
●またログファイルの操作もここで行うことが出来ます。
[Download Videos and Images]
録画したファイルのサムネイルが表示されます。プレビューをしたり、必要なファイルのダウンロードを行います。先ほど述べたようにMP4 Boxing modeがBbackgroundになっていないと、動画のプレビューはできません。
■ 感想
とても使いやすく、動体検知録画もできるので非常に便利です。以前作ったESP-WROOM-02+Arducamではパワーが足りませんでしたが、今回はとってもいい感じです。まだ、長時間使っていませんが、Zeroのスペックでデータの通信がwifiでも十分実用になりそうです。素晴らしいソフトを作ってくださった作者の方に感謝します。
■ またもや失敗談
夜、蛍光灯の下で撮影する時は問題なかったのですが、昼間日光の元で撮影すると全く色合いがおかしいことに気付きました。最初は理由がわからず、一生懸命色彩の調整を行い無駄な努力をしていましたが、このカメラはナイトビジョンだったのですね。他の方の記事を読んで、ようやく理解できました。自然光では色が変で、画像もぼけた感じになってしまいます。写る角度(範囲)は広いですが、選択間違いでした。とりあえず映像はわかりますので、しばらく使ってみたいと思います。

自然光では色が変です

部屋を暗くして赤外線LEDライトをあててみました