平成 26...

42
平成 26 年度卒業研究論文 RaspberryPi 監視カメラの可能性: 出席確認 近畿大学工学部 情報システム工学科 情報メディアコース 和泉大介 学籍番号:1110960070

Upload: others

Post on 29-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

平成 26 年度卒業研究論文

RaspberryPi監視カメラの可能性:

出席確認

近畿大学工学部

情報システム工学科 情報メディアコース

和泉大介

学籍番号:1110960070

Page 2: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

目次

1. 研究の背景と目的........................................................................................................................................11.1 RaspberryPi の概要................................................................................................................................1

1.1.1 RaspberryPi のハードウェア.......................................................................................................21.1.2 RaspberryPi の OS.........................................................................................................................21.1.3 RaspberryPi を windows でリモート操作する...........................................................................2

1.2 RaspberryPi の実用例............................................................................................................................32. RaspberryPi を使う上で知っておきたい知識...........................................................................................42. RaspberryPi を使う上で知っておきたい知識...........................................................................................4

2.1 sudo.........................................................................................................................................................42.1.1 sudo のリスクとメリット...........................................................................................................4

2.2 パッケージマネージャー....................................................................................................................52.2.1 パッケージマネージャに必要な要素.......................................................................................5

2.3 IoT...........................................................................................................................................................62.3.1 Iot とは...........................................................................................................................................62.3.2 RFID とは......................................................................................................................................6

2.4 シェルスクリプト................................................................................................................................62..5 カメラモジュール.............................................................................................................................10

2..5.1 crontab を使用したカメラモジュールの運用.......................................................................103.システム設計............................................................................................................................................14

3.1 システム構成図..................................................................................................................................144.環境構築.......................................................................................................................................................15

4.1Apache の導入......................................................................................................................................155.機能...............................................................................................................................................................21

5.1 動作を確認して自動撮影..................................................................................................................215.2 ブラウザで現在の撮影状況を確認..................................................................................................21

5.2.1 ブラウザごとの挙動..................................................................................................................215.3 ブラウザで撮影した画像確認..........................................................................................................23

6. まとめ・考察..............................................................................................................................................247. 謝辞..............................................................................................................................................................248. 参考文献・引用..........................................................................................................................................259.付録(ソースコード・RaspberryPi 設定)...................................................................................................25

9.1 motionImage.cgi...................................................................................................................................25

Page 3: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

1. 研究の背景と目的

 インターネット利用者が日本の人口の80%となっている現在,世代を問わずPCが必要不可欠に

なっている.それに伴いパソコンの値段は下がりインターネットを利用するのであれば5万円あ

れば充分なスペックのものが手に入るようになった.しかし,中高生が自分で購入するには高す

ぎる値段なのには変わりない.RaspberryPiはそういった高すぎて自分専用のPCが手に入らない

といった人でPCでプログラミング制御したい人や,研究などでPCに様々なものをダウロードし

た事で開発環境に悪影響を及ぼしたくない人にはうれしいハードウェアである.その安価なPC

を使って役に立つものはできないかと考えこの研究に取り組んだ.

 今回研究する目的は,教授がゼミ生の出席状況を自分の研究室にいながら把握し,適切な指導

ができるようなシステム構築をしたいと考え出席・活動確認という点に着目した.

1.1 RaspberryPiの概要

 RaspberryPi(ラズベリーパイ)とは,ケンブリッジ大学のエンジニアの人達が制作したもので,

低コストであり,クレジットカードサイズのコンピュータである.スクラッチやPythonのよう

な言語でのプログラミング方法を学ぶためすべての年齢の人が使える小さなデバイスである.

RaspberryPiはインターネット閲覧や高精細ビデオの再生から,表計算,ワープロ,ゲーム作成

まで,デスクトップパソコンができるすべて事が出来る.

  図 1.1.1 RaspberryPi接続前 [5]  図 1.1.2 RaspberryPi接続後[6]

            

 

1電源・2 HDMI・3ランケーブル・4USB・5 SD カード(図1.1.3)

図 1.1.3 接続場所を数字に見立てたもの

1

Page 4: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

1.1.1 RaspberryPiのハードウェア

 RaspberryPiは CPUプロセッサコアとして700 MHzの ARM1176JZF-S、GPUに VideoCore IV、当

初出荷分は256MB、後の出荷分は512MBに増量した DRAMを内蔵した Broadcom BCM2835 SoCを搭

載している[10].Soc(System-on-a-chip)とは,ある装置やシステムの動作に必要な機能のすべて

を、一つの半導体チップに実装する方式[11]のことで,RaspberryPiに搭載されている Socの

BCM2835 の性能はコストを重視したスマートフォン程度である.

1.1.2 RaspberryPiの OS

 RaspberryPiの OSには Linuxを使用して走らせる事を意図しているため,Debianをカスタム

したRaspbianの仕様が推薦されている[10].Raspbianの他の OSとの違いとして,RaspberryPiを

使用している人達が簡単にインストールできるようコンパイルされた 35000以上のパッケージが

付属されているという点がある[7].

1.1.3 RaspberryPiを windowsでリモート操作する

 RaspberryPiを windowsでリモート操作するまでの過程として,

1・RaspberryPiの LXTerminalで「ifconfig」の命令を行うことによってRaspberryPiの IPアド

レスを確認する.

2・先ほどと同じく LXTerminalを使い「sudo apt-get install xrdp」という命令を実行し

RaspberryPiに xrdpをインストールする.xrdpとは,RDP(Remote Desktop Protocol)プロトコ

ルのフリーかつオープンソースのサーバーである.[9]

3・windowsにはじめから搭載されているリモートデスクトップを使い,過程 1で確認した IPア

ドレスを入力する(図1.1.3.1).

図 1.1.3.1 リモートデスクトップ Windowsでの設定画像[8]

4・リモート接続確認の注意が出てくるので,はいを選択する(図1.1.3.2).

図 1.1.3.2 リモート接続許可の確認画面[8]

2

Page 5: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

5・RaspberryPiのアカウント名とパスワード入力画面が出てくるので入力する(図1.1.3.3).

      

図 1.1.3.3 Windowsでリモート接続したRaspberryPiのログイン画面[8]

6・RaspberryPiのホーム画面が確認できれば接続成功である(図1.1.3-4).

 

     

図 1.1.3.4 RaspberryPiをリモート接続した Windowsの画面[8]

1.2 RaspberryPiの実用例

・天気ステーション

 RaspberryPiを使って降雨から風速まですべて記録するようにRaspberryPiにプログラムでき

る.そこからさらに,気象情報を掲載したウェブサイトを自動的に更新するようにRaspberryPi

をプログラムすることも可能である.

・デジタルフォトフレーム

3

Page 6: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

 家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

つ製品をRaspberryPiで作ることができる.機能としては,写真だけでなく動画,音楽,天気予

報なども表示可能である.

2. RaspberryPiを使う上で知っておきたい知識

2.1 sudo

 RaspberryPiを使う上で LXterminalというRaspberryPiにソフトウェアをインストールさせた

り,そのソフトウェアをアップデートする為に必要なコマンドプロンプトがあり,その

LXterminalを使う際,命令の最初にほとんどの場合 sudoを使っていたので気になり調べるに

到った.

2.1.1 sudoのリスクとメリット[3]

 パソコンのセキュリティ上root権限またはrootパスワードを一般ユーザーに与えるのは大変

危険なことである.しかし,正当な理由があってroot権限下での処理を実行する必要に迫られ

た一般ユーザーが出てきた場合はどうすればいいか.そうした問題には非常に簡単に解決できる

方法がある.sudoを使えば,rootパスワードを公開することなくアクセス範囲を最小限化した

上で必要な権限を一般ユーザーに与えることができるのである.

 sudo(superuser doの略)は,管理権限を制限付きでほかのユーザーに与えるためのプログ

ラムで,実際これで許可される権限では事前の指定範囲内のコマンドしか行えないようになって

いる.またsudoで行われる操作はすべてオーディットトレール(追跡記録)に残されるので,

仮にこうしたユーザーが何らかの方法で権限外の処理を行ったとしても,システム管理者がログ

記録を確認すれば問題点の特定と修正が行えるはずである.そのほかにsudo設定を介して複数

のホストに与える権限を中央管理するという使い方も可能である.

 sudoのインストールおよびホストの設定が完了すると,指定されたユーザーは「sudo

aForbiddenCommand」という構文を用いることで,新たに許可された範囲のコマンドを実行でき

るようになる.sudoの実行にはroot用とは別のパスワード入力が必要とされているが,これは

端末から目を離した隙に第三者が不正使用することを防止するための措置である.またsudoに

より本来の権限を越えた操作を許されたユーザーであっても,各自の欲しいままにシステムを自

由に操作できるという訳ではなく,あくまでシステム管理者がsudo設定で許可した範囲内でし

かコマンドを実行できないため,システムがダメージを受けるリスクは最小限化できると考えら

れる.

 sudoの設定で注意すべき点は,想定の範囲外の権限を与えないようにすることである.当然

ながらsuの実行を許してしまうと,実質的にそのユーザーにroot権限を与えたのと同じになる.

ある意味こうしたものは明白な設定ミスと見なせなくもないが,それよりも厄介なのは,ある程

度の経験を積まないと気づきにくい形で小さな罠が隠されていることである.例えば「sudo

less」を実行できるユーザーがコマンドを使うと,そのほかのコマンドをroot権限で実行可能

となってしまう場合がある.いずれにせよコマンドへのアクセス設定に関しては慎重な姿勢で対

処するのが重要であり,SANS Instituteなどのセキュリティ問題を扱ったサイトを参考にして,

この種類のリスクにおいてどのような脆弱性や手口が確認されているかをチェックしておくべき

である.

 そのほかに犯しやすい単純なミスとしてコマンドを相対パスで指定するというものがあり,あ

る程度の知識を有すユーザーであれば,これを糸口にしてすべての権限を取得されかねない.例

えば FOOというエイリアスにbin/fooと設定したとしよう.その状況下においてあるユーザーが

適当な場所にbinディレクトリを作成して,その中に自分が実行したいコマンドを格納しておく

と(ここでの重要なポイントはその名称を fooとしておくこと),これをroot権限下で実行す

ることであらゆる操作が行えるようになってしまう事がある.

4

Page 7: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

 残念ながら,一般のユーザーがいわゆる特権昇格(privilege escalation)を行う手口を見つ

けて不正にroot権限を取得してしまうような事態はあり得ないと保証することはできないのだ

が,特定ユーザーにのみ上位のアクセス権限を必要とする一部の操作だけを許可するという処理

を簡単に実行できる現実的な手法は,sudoのほかに存在していないのである.

 このようにsudoの使用にはある程度のリスクが伴うが(その大部分は設定時のミスで余分な

権限まで与えることに関連している),指定ユーザーに通常以上の権限を与えて特定タスクの実

行を許すといった柔軟なシステム運用を可能にしてくれる存在という点には間違いがないといえ

る.

2.2 パッケージマネージャー

 パッケージマネージャとは、コンピュータに何のソフトウェアがインストールされたかを記録

し、新しいソフトウェアのインストール・新しいバージョンへのソフトウェアの更新・以前イン

ストールしたソフトウェアの削除を容易に行えるようにするプログラムである。名前が示すよう

に、パッケージマネージャはパッケージを取り扱うということである。パッケージとは、ファイ

ル群を一つにし、インストールや削除をまとめてできるようにしたものである。RaspberryPiの

アップデートを行う際に,パッケージマネージャーが使用されているため,調べるに到った.

2.2.1 パッケージマネージャに必要な要素[4]

・パッケージマネージャに必要な要素としてパッケージのバージョン管理

・パッケージをそろえる事で同じ環境が再現できる.

・パッケージのインストール/アンインストール

・パッケージのアップグレード/ダウングレード

・パッケージ間の依存関係の管理

 まず,パッケージのバージョン管理について,パッケージと呼ばれる単位に何らかのバージョ

ン識別子をつけて,中身を細かく比べることなく更新を知ることができるようにする.もしバー

ジョンの概念がないと,gitやsvn(Subversion)のような管理システムなしにソースコードを管

理するようなものでそれはとてもできないことだといえる.

 パッケージをそろえることで同じ環境が再現できることについて,同じ環境を再現するために

は様々なバージョンのパッケージをホスティングされる方法も柔軟に指定できることが必要であ

る.パッケージは大体の場合自分が開発したもの意外を使うわけだが,そのものをどうやって入

手すればいいかということを含めて確保しておかなければ,たとえ入っておかなければならない

パッケージとリストがあったとしても入手できずインストールできなくなってしまう.

 パッケージのインストール/アンインストールについて,通常のパッケージ管理というと,イ

ンストールができることを指すことが多いと思われる.もちろんパッケージとバージョンを指定

したら,その OS上で使うことができる様にインストールしてくれるのは大事な機能である.イ

ンストール時にはコンパイル済みのバイナリを配置するだけのものもあればその場でコンパイル

するものもある.もちろん,先の依存関係に基づいて必要なパッケージも同時にインストールし

てくれる必要もある.難しいのはそれを再起的に解決しなければならないところである.アンイ

ンストールは色々と気をつけなければならない点がある.なので標準では実装していないパッ

ケージ管理もある.気をつけなければならない点として,例えばプロセスが起動するようなパッ

ケージだとプロセスを止めないといけないなど,先の依存関係で自分が誰かに依存されてる場合

は,それらのパッケージもアンストールしないといけない点である.さらに,インストール前に

あるファイルを変更するようなパッケージの場合,完全にアンインストールするためにはその一

行をきれいに消さなければいけないが,一行消すのはかなりの手間が掛かってしまう.

5

Page 8: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

 パッケージのアップグレード/ダウングレードについて,yum updateと打てば一回で最新の

パッケージ群にしてくれるのは一般の人とってはとても頼もしいものである.これができるため

には,バージョン,依存関係,インストールとすべてできる必要がある.ダウングレードはアン

インストール以上に難易度が高い.なぜならほとんどの開発者がアップグレード方法に気は使う

が,ダウングレード方法には普通気を使わないためである.

パッケージマネージャ間の依存関係の管理について,バージョンを持ったパッケージ間に依存

関係を記述できるようにすることである.あるバージョンのパッケージ Aを使うためには,バー

ジョン何とか以上のパッケージ Bが必要になるような感じである.使う側が完全に依存を把握で

きていて順番を定義可能であったら,パッケージ関係において依存関係の記述はいらないと考え

られる.だが,パッケージ管理では色んな人が作ったパッケージを組み合わせることが多いわけ

であり,そうなると他人の作ったパッケージの中に自分が依存するパッケージ記述するほうが効

率が良いと考えられる.

2.3 IoT

2.3.1 Iotとは

IoTとは Internet of Thingsの略で日本語ではモノのインターネットという意味で解釈されて

いる.モノのインターネットとは,世の中に存在するあらゆる(さまざまな)モノ(商品・物

体・設備)がRFID(2.4.2)やセンサーを備えると共に、それらのモノがインターネットに接続

されることにより,モノの個体情報を識別したり,そのモノが置かれた状況を把握したり,その

モノ自体を制御することができる仕組みや概念のことを指し示している[12].

2.3.2 RFIDとは

RFID(Radio Frequency Identification)とは,数ミリから数センチ程度の無線 ICチップによ

りモノや人物を識別・管理するしくみのことである.利用されている例としては,CDや図書な

どに ICタグを付け店舗や施設の出入り口にリーダーを設置し,ICタグのついた商品を不正に持

ち出そうとすると警告を出すようにすることで,不正持ち出しなどを防止するなどが挙げられる[13].

2.4 シェルスクリプト

・シェルスクリプトとは[14]

複数の処理(コマンド)をまとめて行なうことのできるスクリプトである。スクリプトとは、機械

語への変換作業を省略した簡易プログラムのことで、代表的なものにはPerlや

VBScript、JavaScriptなどがある。また、シェルとは与えられた指示を OSの中核部分に伝える

ソフトウェアのことである。

・シェルスクリプトの実行まで

・コマンドを書いたシェルスクリプトを用意する

Terapadや Leafpadなどのテイストエディタを起動し,コマンドを入力し拡張子を.shにし保存

する.

今回は Leafpadを用いて,シェルスクリプトの保存先はデスクトップとする.コマンドは

RaspberryPiに接続してあるカメラを保存したときの大きさを設定して撮影するといったコマン

ドである.

6

Page 9: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 2.4.1 RaspberryPiのスクリーンショット

・シェルスクリプトを実行するため.shのファイルに許可を出す.

./コマンドと打つことによりコマンドを探して実行すると解釈されるため,最終的には

LxTerminalを開き「./camera.sh」と入力すればRaspberryPiのカメラが起動するといった形に

したいためそれまでの仮定を解説する.

図 2.4.2 LxTerminalで camera.shを実行した結果

LxTerminalで camera.shを実行しようとしてもファイルが見つかりませんといわれる.

この時点での問題点は,カレント・ディレクトリがあっていない,ファイルが実行の許可がされ

ていないなどがある.

・問題を解決するため

まずはカレント・ディレクトリがあっていないという問題について,Linuxのコマンドである

「pwd,cd」の2つを使って解決する.

pwd はカレント・ディレクトリを表示させるコマンドでそれによって今実行したいファイルのあ

る Desktopに自分がいるかを確認できる.

7

Page 10: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

cdはカレント・ディレクトリを変更させるコマンドで「cd Desktop」と打つことによりカレン

ト・ディレクトリを DeskTopに移動できる.(cd Desktopとうつ作業はパソコンを起動させるた

びに行わなければならない)

図2.4.3 pwd・cdを使ってカレント・ディレクトリを Desktopにした結果

次にファイルの実行許可がされていないという問題について Linuxコマンドの「ls,chmod」を

使って解決する.

lsはファイル・ディレクトリ情報を確認するためのコマンドで-lは lsを詳細形式で表示すると

いったコマンドリファレンスである.なので「ls-l」と打つことにより今のカレント・ディレク

トリにあるファイルのファイル・ディレクトリ情報を詳細形式で表示することができる.

chmodはファイルやディレクトリのパーミッションを変更させるコマンドで ls -lによって表示

された左側にある-rw-r—r—の部分を変更させるために使う.

図 2.4.4 ls-lを使って詳細形式で表示したファイル・ディレクトリ情報

8

Page 11: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 2.4.5 chmodを使ってファイルのパーミッションを変更して確認のため ls-lで情報を表示

すべての設定が終了後「./camera.sh」を再び打つことによりカメラが実行される

2..5 カメラモジュール

2..5.1 crontabを使用したカメラモジュールの運用

画像保存のフォルダ指定と crontabを使って時間を指定した自動撮影

・フォルダ指定

 以前は図2.5.1.1のようにシェルスクリプトを打ち込むことによりカメラを起動していたが,

その際にこのプログラムでは撮影された画像がデスクトップに保存されていき,撮影された画像を

まとめる際には,手動でフォルダを作ってそこに入れなければならなかった.

図2.5.1.1 カメラを起動させるプログラムを打ち込んだシェルスクリプト

 

 図2.5.1.1でのデスクトップに保存される状態を解消するため図2.5.1.2のように-oのあとを

/home/pi/Desktop/raspistill/フォルダ名.jpgと指定して保存できるようにすることによって,

自動でフォルダに画像を入れることができるようになった.

図2.5.1.2 カメラの画像をフォルダ指定して保存できるシェルスクリプト

次に図2.5.1.2のままではフォルダに画像は保存されるが,次々に上書きされてしまって画像

が残らないという問題があった.それを解消するため図2.5.1.3のようにフォルダ名をpic-$

(date +%Y%m%d%H%M%S).jpgと打ち込むことでフォルダ名をpic-日付.jpgといった形で保存でき

9

Page 12: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

るようになり,画像を残しておけるようになった.

図2.5.1.3 カメラの画像のファイル名を日付で保存できるシェルスクリプト

図2.5.1.4 日付で保存した画像を入れたファイル

・crontabを用いたカメラの自動撮影

crontabを用いて図 3のプログラムを作動させることによりカメラを決まった時間に自動で撮影す

ることが可能になる.

crontabとは

 crontab(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドは Unix系 OSに

おいて、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。標準

入力からコマンド列を読み取り、crontabと呼ばれるファイルにそれを記録する。この記録を元

に定時になると、その命令内容を読み取り、実行が行われる。cronという名称はギリシア語の

クロノス に由来するという説がある。日本ではクーロンという読みが慣習的に広く用いられて

いるが、海外では通常クロンまたはクローンと発音する。

crontabの設定から動作まで

まず Lxterminalで図5のように入力することで図6のような設定画面が開かれる.

図2.5.1.5 crontabの設定画面を開くコマンド

10

Page 13: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 2.5.1.6 crontabの設定画面

 このとき図2.5.1.6の設定画面の上にある GNU nanoと書かれている部分があるが,crontabで

は図2.5.1.8ように 4つのエディタの中から選択できるため今回は vimを選択する.図2.5.1.8

は図2.5.1.7にあるコマンドを打つことによって

開くことができる.

図2.5.1.7 crontabのエディタを開くコマンド

図 2.5.1.8 crontabのエディタの設定画面

11

Page 14: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 2.5.1.9 nanoから vimに変更後のエディタ

 これでエディタの設定は完了したので次に crontabで時間を設定してプログラムを動かせるよう

設定する.図2.5.1.9にの最後の行にある下に左から分,時,日,月,曜日,動作させるファイ

ルの順番で打ち込むことにより図2.5.1.10のように設定できる.

図 2.5.1.10 時間設定後のエディタ

図2.5.1.10のように打ち込むことにより毎日21時に Desktopにある camera.shのシェルスクリ

プトが動作するという命令になる.

*エディタ画面で何かキー入力を行うことにより INSERTモードになりエディタを変更できる

*escキーを押すことにより INSERTモードを解除できる

*エディタの設定変更を保存するためには INSERTモードを解除後ZZ(shift押しながら zz)を入力

することにより保存できる.保存が成功すると図2.5.1.11のように表示される.

図2.5.1.11 設定保存完了後のメッセージ

12

Page 15: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

3.システム設計

3.1 システム構成図

システム構成図として使用されているハードウェアとソフトウェアを明記した.

図 3.1.1 システム構成図

4.環境構築

4.1Apacheの導入

Apacheとは[15]

 Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、世界中でもっとも多く

使われている Webサーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利

用されている。単に Apacheとも称されている。開発は、Apacheソフトウェア財団の Apache

HTTPサーバプロジェクトで行われている。Apache Licenseの下でソースコードが公開および配

布されており、代表的なオープンソースソフトウェアの一つである。

・apacheのインストール

13

Page 16: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

 図 4.1.1のように打ち込むことでインストールが開始される。インストールが完了後ブラウザ

を起動し図 4.1.2の用に urlを打ち込むことにより図 4.1.3と同じ画面が表示されればapacheが

正しくインストールされたことが確認できる。

図 4.1.1 apacheをインストールするコマンドを入力した LxTerminal

図 4.1.2 apacheが正しく動くかを確認するための url

図 4.1.3 apacheの動作確認ができたブラウザ画面

webサーバーのデフォルトのルートは「/var/www/」なので「http://localhost」にアクセスす

ると「/var/www/index.html」の内容つまり図 4.1.3が表示される。デフォルトルートのまま新

しく webページを変えたい場合は、既存のindex.htmlをリネームし新しいページ名を

index.htmlとすればよい。

図 4.1.4 /var/www/のファイルの中身をネットを経由して確認した画面

・apacheの編集するまで

図 4.1.5でファイルが確認できたら図 4.1.6のように Lxtermiで打ち込むことにより管理者権限

で leafpadを開くことができる.管理者権限でひらくことにより編集した内容を保存できるよう

になる.

14

Page 17: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 4.1.5 piの中にあるファイル

図 4.1.6 LxTerminalで cdで場所を移動しsudo(管理者権限)で leafpadを使いindex.htmlを

表示する

図 4.1.7 図27で表示されている It Works!の部分を編集した画面

図 4.1.8 図 4.1.7で編集した内容が反映されたブラウザ画面

これでindex.htmlの中身を好きに編集できる。

編集したindex.htmlを別のパソコンで表示させる(図 4.1.9図 4.1.10).

別のパソコンで確認する際は http://[ラズベリーパイの IPアドレス]と打ち込むことによって表

示させることができる.

15

Page 18: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 4.1.9 RaspberryPiとは別のネットワーク回線で行った結果

図 4.1.10 RaspberryPiと同じ回線で行った結果

結果として回線が同じ場合でないとブラウザを通してindex.htmlを確認できない。

4.2 CGIの導入

4.2.1Apacheの設定

・Apacheの設定

/etc/apache2/mods-available/mime.confの AddHandler cgi-script .cgiのコメントアウトをは

ずすことによりCGIを使えるようにする。

図 4.2.1.1 #AddHandler cgi-script .cgiの#をはずす前

docroot で cgi を利用できるようにする.

16

Page 19: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

/etc/apache2/sites-available/default を編集して /var/www/の設定に「 +ExecCGI」を追記す

る。

図 4.2.1.2 10行目に「+ExecCGI」を追記した後の設定

これで設定完了したので図 4.2.1.3の命令を実行して Apacheを再起動する。

図 4.2.1.4 Apacheを再起動する命令

4.2.2 CGI

図 4.2.2.1のように命令を実行することにより leafpadを開いた後test.cgiの名前でファイル

を作成する

図 4.2.2.1 ディレクトリを指定して leafpadを開く命令

図 4.2.2.2の命令を実行して test.cgiを実行可能にする

この作業をしないとブラウザで確認した際InternetServerErrorがでる。

図 4.2.2.2 chmodを使って test.cgiを実行可能する命令

図 4.2.2.3のように test.cgiにプログラムをかくことによりブラウザ上に図 4.2.2.4のように

HelloWorld!と表示される。

17

Page 20: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 4.2.2.3ブラウザに HelloWorld!を表示させるためのプログラム

図 4.2.4.4 CGIを使ってブラウザ上に HelloWorld!を表示したもの

・CGIを使ってディレクトリ内の画像一覧を表示する

監視カメラとしてやく立てるためには motionを使って撮影できた画像を一覧としてブラウザで

確認できればいいと考えディレクトリ内の画像一覧を取得できるプログラムを作成した。

/var/www/motionImageの中にある画像をブラウザ上に表示する。図 4.2.2.5

図 4.2.4.5 ブラウザに表示するための画像一覧

次に図 4.2.4.7にあるプログラミングを打つことによりブラウザに画像一覧図 4.2.4.6が表示さ

れる。

プログラミング言語はシェルスクリプトを使用する。図 44の画像は同じに見えるが違う画像で

ある。

18

Page 21: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 4.2.4.6 ブラウザにディレクトリ内にある画像を表示するためのプログラム

図 4.2.4.7 ブラウザ上にディレクトリ内の画像を表示

5.機能

5.1 動作を確認して自動撮影

RaspberryPiには motionという名前のパッケージがあり,それをインストールすることにより

USBカメラや純正カメラ(カメラモジュール)を入力装置として使うことができるようになる.

motionとは,カメラからの映像に動き(変化)があったときにのみその映像または画像を記録す

ることができる.

5.2 ブラウザで現在の撮影状況を確認

motionの機能の一つとしてブラウザでリアルタイムに撮影している映像を1秒ごとに表示する

という機能がある.ブラウザで確認するための方法はブラウザを起動後urlに http://

{RaspberryPiの IPアドレス}:{設定したポート番号}を入力するとログイン名とパスワード

を聞かれるのでそこの欄にRaspberryPiのユーザー名とパスワードを入力すればブラウザに表示

される。

5.2.1ブラウザごとの挙動

ブラウザごとに motionでの撮影状況の確認画面が変わるため有名なブラウザの挙動をまとめる.

・Chrome

Chromeでは URLを入力後応答なし.

19

Page 22: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 5.2.1.1 Chromeで motionを確認しようとした結果

・IE

ログイン名・パスワードの確認画面はでるがその後応答なし.

図 5.2.1.2 IEで motionを確認しようとした結果

・Firefox

ログイン名・パスワードを聞かれその後ブラウザで確認できた.

20

Page 23: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 5.2.1.3 Firefoxで motionを確認した結果

確認したのは上記の 3つのブラウザで他のブラウザでの確認は行っていない.

5.3 ブラウザで撮影した画像確認

 撮影された画像は図5.3.1のように保存され,その保存されたものをブラウザで表示できるよ

うにする図5.3.2.

図5.3.2では図5.3.1で表示された画像がスライドショーのような形で表示される.

 図5.3.2の機能として①で画像をスライドする速度を変える100単位で100~1000まで変更可

能.②を押すことによって画像のスライドをスタートすることができる.③で画像のスライドを

とめることができる.④が表示されている画像をスライドさせている部分である.注意点として,

①のスピードを変更する際に一度③のボタンを押して画像のスライドをとめてからでないとス

ピードが変更されない.

図 5.3.1 カメラモジュールを使って撮影された画像保存場所

21

Page 24: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

図 5.3.2 ブラウザを使って画像をスライドさせる

6. まとめ・考察

 今回開発したものは出席確認としては最低限の機能はしっかりと備わったものが開発できた.

しかし,更に機能を追加して精度や機能の充実度を上げることは可能である.たとえば,保存し

た画像を1日ごとに別のフォルダに自動で移しメインのフォルダの中身は1日ごとにリセットさ

れるや日付ごとにブラウザで表示するなどが考えられる.まだまだ可能性はあったので自分の力

不足であまり充実でき無かったことは大変残念である.

 研究を通してかなり時間をかけたのが motionの部分である motionを導入する際インターネッ

トにある情報を頼りにするのだが,人によって環境が全く違うため自分と似た環境の人が探せず

勘違いして検討はずれな情報を採用したりするなどして環境が壊れてしまうなどのトラブルも

あった.環境の壊れるといった問題は OSの再インストールして設定をやり直すことで解決した.

motionについてはカメラモジュールを使用する際は,motionでは無く motion-mmalcamといった

ソフトウェアを用いることにより解決した.

この機能が完成すれば学生は少し窮屈な思いをするかもしれないが,教授にとっては負担削減

にはなると考えられる.

7. 謝辞

研究を行うにあたって知識や実践経験の蓄積のない私に分かりやすく時には時間を非常に多く

割いてご指導して下さった徐丙鉄先生には心から感謝しています.また,テーマは違いましたが

私より経験豊富な物理研究室のメンバーにもたくさん助けていただいて本当に感謝してます.

22

Page 25: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

8. 参考文献・引用

[1]サービスをセキュアにするための利用制限(3)~管理者権限の制限のためのsuとsudoの基

本~

http://www.atmarkit.co.jp/ait/articles/0311/05/news001.html

[2]Sudo in a Nutshell

http://www.sudo.ws/sudo/intro.html

[3]ユーザーの実行権限を柔軟に割り当てるsudoのリスクとメリット

http://www.itmedia.co.jp/enterprise/articles/0802/19/news013.html

[4]若者がパッケージ管理について思うこと

http://blog.riywo.com/2012/03/29/043426

[5]

http://arctica.sakura.ne.jp/cent/wp-content/uploads/2012/12/R7568308-01.jpg

[6]初回起動と初期設定

http://www.hiramine.com/physicalcomputing/raspberrypi/setup_firstbootandconfig.html

[7]Welcome to Raspbian

http://www.raspbian.org/

[8]RaspberryPiで遊ぼう

http://assimane.blog.so-net.ne.jp/2013-05-12

[9]weblio辞書

http://www.weblio.jp/content/xrdp

[10]RaspberryPiウィキペディア

http://ja.wikipedia.org/wiki/Raspberry_Pi#.E3.83.8F.E3.83.BC.E3.83.89.E3.82.A6.E3.82.A

7.E3.82.A2

[11]e-Words

http://e-words.jp/w/SoC.html

[12]IoTとは

http://www.kobelcosys.co.jp/column/itwords/227/

[13]RFIDとは

http://www.kobelcosys.co.jp/column/itwords/63/

[14]シェルスクリプトとは

http://e-words.jp/w/E382B7E382A7E383ABE382B9E382AFE383AAE38397E38388.html

[15]Apacheとは

http://ja.wikipedia.org/wiki/Apache_HTTP_Server

9.付録(ソースコード・RaspberryPi設定)

9.1 motionImage.cgi

#!/bin/bash

echo "Content-type:text/html"

echo ""

echo '<!DOCTYPE html>'

echo '<html>'

echo '<head>'

echo '<meta charset=UTF-8>'

echo '<title>motionImage</title>'

echo '</head>'

echo '<style>

23

Page 26: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

img{ display: block;

position: absolute;

top:50px;

left:30px;

width: 300px;

}

</style>'

echo '<body>'

files="/var/www/motionImage/*"

for filepath in ${files}

do

file=`echo $filepath | cut -c 9-45`

echo "<img src="${file}">"

done

read wait

echo '<div>'

echo '<input id="timeSlider" type="range" min="100" max="1000" step="100"

onchange="showValue()" />'

echo '<span id="showRange">0</span>'

echo '<button onClick="startSlideShow()">slide start</button>'

echo '<button onClick="stopSlideShow()">stop</button>'

echo '</div>'

echo '<script>'

echo 'var intervalTime = 200;'

echo 'document.getElementById("timeSlider").value=intervalTime ;'

echo 'document.getElementById("showRange").innerHTML = intervalTime;'

echo 'function showValue () {

intervalTime = document.getElementById("timeSlider").value;

document.getElementById("showRange").innerHTML = intervalTime;

}'

echo 'var photos = document.getElementsByTagName("img");'

echo 'var timer = null;'

echo 'var N = photos.length; //alert("N="+N);'

echo 'var n = 0;'

echo '//zBase = photos[N].style.zIndex;'

echo 'zBase = 100 ; //alert("zBase="+zBase);'

24

Page 27: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

echo 'topZindex = 0;'

echo 'function nextPhoto(){

++topZindex;

photos[n].style.zIndex = zBase + topZindex;

n++ ; n = n % N;

}'

echo 'function startSlideShow(){

if( timer == null ){

timer = setInterval("nextPhoto()", intervalTime );

}

}'

echo 'function stopSlideShow(){

clearInterval(timer); timer = null;

}'

echo '</script>'

echo '</body>'

echo '</html>'

プログラムメモ書き

echo:引数に与えられた文字列を表示する。

files=”/var/www/motionImage/*”:filesに motionImage下のファイル名を代入する

for filepath in ${files}:${}で{}ないの変数の中身を出力するという命令なので変数fileの

中に入れた                                     

                files=”/var/www/motionImage/*”を filepathの中に入れ

るという命令である。

for

do(正)

done(誤)

``バックコート:バックコートの中にある処理の結果を返すという意味で

cut:文字列を抜き出す命令

cut -c:-cは cutのオプションで指定した文字数をとりだすというものである。

file=`echo $filepath | cut -c 9-45`:fileに filepathに入った画像のファイル名の9~45文

字めまでを入れるという命令になる

cutを利用した理由として<img src=”画像ファイル指定”>といった風にしたいのだが画像ファ

イル指定の部分が「/motionImage/ファイル名」だと表示されるが「/var/www/motionImage/ファ

イル名」うまく表示できなかった。なので cutを使い filesに入れた/var/www/motionImage/

ファイル名の前の/var/wwwの部分以外を抜き出すよう設定した。

・motionmmalcam.conf設定(重要な部分)

25

Page 28: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

############################################################

# Start in daemon (background) mode and release terminal (default: off)

daemon off

# File to store the process ID, also called pid file. (default: not defined)

process_id_file /var/run/motion/motion.pid

############################################################

# Capture device options

############################################################

# Videodevice to be used for capturing (default /dev/video0)

# for FreeBSD default is /dev/bktr0

#videodevice /dev/video0

# v4l2_palette allows to choose preferable palette to be use by motion

# to capture from those supported by your videodevice. (default: 17)

# E.g. if your videodevice supports both V4L2_PIX_FMT_SBGGR8 and

# V4L2_PIX_FMT_MJPEG then motion will by default use V4L2_PIX_FMT_MJPEG.

# Setting v4l2_palette to 2 forces motion to use V4L2_PIX_FMT_SBGGR8

# instead.

#

# Values :

# V4L2_PIX_FMT_SN9C10X : 0 'S910'

# V4L2_PIX_FMT_SBGGR16 : 1 'BYR2'

# V4L2_PIX_FMT_SBGGR8 : 2 'BA81'

# V4L2_PIX_FMT_SPCA561 : 3 'S561'

# V4L2_PIX_FMT_SGBRG8 : 4 'GBRG'

# V4L2_PIX_FMT_SGRBG8 : 5 'GRBG'

# V4L2_PIX_FMT_PAC207 : 6 'P207'

# V4L2_PIX_FMT_PJPG : 7 'PJPG'

# V4L2_PIX_FMT_MJPEG : 8 'MJPEG'

# V4L2_PIX_FMT_JPEG : 9 'JPEG'

# V4L2_PIX_FMT_RGB24 : 10 'RGB3'

# V4L2_PIX_FMT_SPCA501 : 11 'S501'

# V4L2_PIX_FMT_SPCA505 : 12 'S505'

# V4L2_PIX_FMT_SPCA508 : 13 'S508'

# V4L2_PIX_FMT_UYVY : 14 'UYVY'

# V4L2_PIX_FMT_YUYV : 15 'YUYV'

# V4L2_PIX_FMT_YUV422P : 16 '422P'

# V4L2_PIX_FMT_YUV420 : 17 'YU12'

#

v4l2_palette 17

# Tuner device to be used for capturing using tuner as source (default /dev/tuner0)

# This is ONLY used for FreeBSD. Leave it commented out for Linux

; tunerdevice /dev/tuner0

26

Page 29: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# The video input to be used (default: -1)

# Should normally be set to 0 or 1 for video/TV cards, and -1 for USB cameras

input -1

# The video norm to use (only for video capture and TV tuner cards)

# Values: 0 (PAL), 1 (NTSC), 2 (SECAM), 3 (PAL NC no colour). Default: 0 (PAL)

norm 0

# The frequency to set the tuner to (kHz) (only for TV tuner cards) (default: 0)

frequency 0

# Rotate image this number of degrees. The rotation affects all saved images as

# well as movies. Valid values: 0 (default = no rotation), 90, 180 and 270.

rotate 0

# Image width (pixels). Valid range: Camera dependent, default: 352

width 352

# Image height (pixels). Valid range: Camera dependent, default: 288

height 288

# Maximum number of frames to be captured per second.

# Valid range: 2-100. Default: 100 (almost no limit).

framerate 2

# Minimum time in seconds between capturing picture frames from the camera.

# Default: 0 = disabled - the capture rate is given by the camera framerate.

# This option is used when you want to capture images at a rate lower than 2 per

second.

minimum_frame_time 1

# URL to use if you are using a network camera, size will be autodetected (incl

http:// ftp:// mjpg:// or file:///)

# Must be a URL that returns single jpeg pictures or a raw mjpeg stream. Default: Not

defined

;netcam_url http://127.0.0.1/cgi-bin/raspicam.sh

# Username and password for network camera (only if required). Default: not defined

# Syntax is user:password

; netcam_userpass value

# The setting for keep-alive of network socket, should improve performance on

compatible net cameras.

# off: The historical implementation using HTTP/1.0, closing the socket after each

http request.

# force: Use HTTP/1.0 requests with keep alive header to reuse the same connection.

# on: Use HTTP/1.1 requests that support keep alive as default.

# Default: off

netcam_keepalive off

27

Page 30: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# URL to use for a netcam proxy server, if required, e.g. "http://myproxy".

# If a port number other than 80 is needed, use "http://myproxy:1234".

# Default: not defined

; netcam_proxy value

# Set less strict jpeg checks for network cameras with a poor/buggy firmware.

# Default: off

netcam_tolerant_check off

# Let motion regulate the brightness of a video device (default: off).

# The auto_brightness feature uses the brightness option as its target value.

# If brightness is zero auto_brightness will adjust to average brightness value 128.

# Only recommended for cameras without auto brightness

auto_brightness off

# Set the initial brightness of a video device.

# If auto_brightness is enabled, this value defines the average brightness level

# which Motion will try and adjust to.

# Valid range 0-255, default 0 = disabled

brightness 0

# Set the contrast of a video device.

# Valid range 0-255, default 0 = disabled

contrast 0

# Set the saturation of a video device.

# Valid range 0-255, default 0 = disabled

saturation 0

# Set the hue of a video device (NTSC feature).

# Valid range 0-255, default 0 = disabled

hue 0

############################################################

# File "camera" support - read raw YUV data from a file

############################################################

#filecam_path /home/pi/test-cap/motion-mmal.capture

############################################################

# Round Robin (multiple inputs on same video device name)

############################################################

# Number of frames to capture in each roundrobin step (default: 1)

roundrobin_frames 1

# Number of frames to skip before each roundrobin step (default: 1)

roundrobin_skip 1

28

Page 31: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# Try to filter out noise generated by roundrobin (default: off)

switchfilter off

############################################################

# Motion Detection Settings:

############################################################

# Threshold for number of changed pixels in an image that

# triggers motion detection (default: 1500)

threshold 5000

# Automatically tune the threshold down if possible (default: off)

threshold_tune off

# Noise threshold for the motion detection (default: 32)

noise_level 32

# Automatically tune the noise threshold (default: on)

noise_tune on

# Despeckle motion image using (e)rode or (d)ilate or (l)abel (Default: not defined)

# Recommended value is EedDl. Any combination (and number of) of E, e, d, and D is

valid.

# (l)abeling must only be used once and the 'l' must be the last letter.

# Comment out to disable

despeckle_filter EedDl

# Detect motion in predefined areas (1 - 9). Areas are numbered like that: 1 2 3

# A script (on_area_detected) is started immediately when motion is 4 5 6

# detected in one of the given areas, but only once during an event. 7 8 9

# One or more areas can be specified with this option. Take care: This option

# does NOT restrict detection to these areas! (Default: not defined)

; area_detect value

# PGM file to use as a sensitivity mask.

# Full path name to. (Default: not defined)

; mask_file value

# Dynamically create a mask file during operation (default: 0)

# Adjust speed of mask changes from 0 (off) to 10 (fast)

smart_mask_speed 0

# Ignore sudden massive light intensity changes given as a percentage of the picture

# area that changed intensity. Valid range: 0 - 100 , default: 0 = disabled

lightswitch 0

29

Page 32: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# Picture frames must contain motion at least the specified number of frames

# in a row before they are detected as true motion. At the default of 1, all

# motion is detected. Valid range: 1 to thousands, recommended 1-5

minimum_motion_frames 5

# Specifies the number of pre-captured (buffered) pictures from before motion

# was detected that will be output at motion detection.

# Recommended range: 0 to 5 (default: 0)

# Do not use large values! Large values will cause Motion to skip video frames and

# cause unsmooth movies. To smooth movies use larger values of post_capture instead.

pre_capture 0

# Number of frames to capture after motion is no longer detected (default: 0)

post_capture 0

# Event Gap is the seconds of no motion detection that triggers the end of an event.

# An event is defined as a series of motion images taken within a short timeframe.

# Recommended value is 60 seconds (Default). The value -1 is allowed and disables

# events causing all Motion to be written to one single movie file and no pre_capture.

# If set to 0, motion is running in gapless mode. Movies don't have gaps anymore. An

# event ends right after no more motion is detected and post_capture is over.

event_gap 20

# Maximum length in seconds of a movie

# When value is exceeded a new movie file is created. (Default: 0 = infinite)

max_movie_time 0

# Always save images even if there was no motion (default: off)

emulate_motion off

############################################################

# Image File Output

############################################################

# Output 'normal' pictures when motion is detected (default: on)

# Valid values: on, off, first, best, center

# When set to 'first', only the first picture of an event is saved.

# Picture with most motion of an event is saved when set to 'best'.

# Picture with motion nearest center of picture is saved when set to 'center'.

# Can be used as preview shot for the corresponding movie.

output_pictures on

# Output pictures with only the pixels moving object (ghost images) (default: off)

output_debug_pictures off

# The quality (in percent) to be used by the jpeg compression (default: 75)

quality 75

30

Page 33: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# Type of output images

# Valid values: jpeg, ppm (default: jpeg)

picture_type jpeg

############################################################

# FFMPEG related options

# Film (movies) file output, and deinterlacing of the video input

# The options movie_filename and timelapse_filename are also used

# by the ffmpeg feature

############################################################

# Use ffmpeg to encode movies in realtime (default: off)

ffmpeg_output_movies off

# Use ffmpeg to make movies with only the pixels moving

# object (ghost images) (default: off)

ffmpeg_output_debug_movies off

# Use ffmpeg to encode a timelapse movie

# Default value 0 = off - else save frame every Nth second

ffmpeg_timelapse 0

# The file rollover mode of the timelapse video

# Valid values: hourly, daily (default), weekly-sunday, weekly-monday, monthly, manual

ffmpeg_timelapse_mode daily

# Bitrate to be used by the ffmpeg encoder (default: 400000)

# This option is ignored if ffmpeg_variable_bitrate is not 0 (disabled)

ffmpeg_bps 500000

# Enables and defines variable bitrate for the ffmpeg encoder.

# ffmpeg_bps is ignored if variable bitrate is enabled.

# Valid values: 0 (default) = fixed bitrate defined by ffmpeg_bps,

# or the range 2 - 31 where 2 means best quality and 31 is worst.

ffmpeg_variable_bitrate 0

# Codec to used by ffmpeg for the video compression.

# Timelapse mpegs are always made in mpeg1 format independent from this option.

# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.

# mpeg1 - gives you files with extension .mpg

# mpeg4 or msmpeg4 - gives you files with extension .avi

# msmpeg4 is recommended for use with Windows Media Player because

# it requires no installation of codec on the Windows client.

# swf - gives you a flash film with extension .swf

# flv - gives you a flash video with extension .flv

# ffv1 - FF video codec 1 for Lossless Encoding ( experimental )

# mov - QuickTime ( testing )

# ogg - Ogg/Theora ( testing )

31

Page 34: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

ffmpeg_video_codec mpeg4

# Use ffmpeg to deinterlace video. Necessary if you use an analog camera

# and see horizontal combing on moving objects in video or pictures.

# (default: off)

ffmpeg_deinterlace off

############################################################

# Snapshots (Traditional Periodic Webcam File Output)

############################################################

# Make automated snapshot every N seconds (default: 0 = disabled)

snapshot_interval 0

############################################################

# Text Display

# %Y = year, %m = month, %d = date,

# %H = hour, %M = minute, %S = second, %T = HH:MM:SS,

# %v = event, %q = frame number, %t = thread (camera) number,

# %D = changed pixels, %N = noise level, \n = new line,

# %i and %J = width and height of motion area,

# %K and %L = X and Y coordinates of motion center

# %C = value defined by text_event - do not use with text_event!

# You can put quotation marks around the text to allow

# leading spaces

############################################################

# Locate and draw a box around the moving object.

# Valid values: on, off, preview (default: off)

# Set to 'preview' will only draw a box in preview_shot pictures.

locate_motion_mode on

# Set the look and style of the locate box if enabled.

# Valid values: box, redbox, cross, redcross (default: box)

# Set to 'box' will draw the traditional box.

# Set to 'redbox' will draw a red box.

# Set to 'cross' will draw a little cross to mark center.

# Set to 'redcross' will draw a little red cross to mark center.

locate_motion_style box

# Draws the timestamp using same options as C function strftime(3)

# Default: %Y-%m-%d\n%T = date in ISO format and time in 24 hour clock

# Text is placed in lower right corner

text_right %Y-%m-%d\n%T-%q

# Draw a user defined text on the images using same options as C function strftime(3)

# Default: Not defined = no text

32

Page 35: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# Text is placed in lower left corner

; text_left CAMERA %t

# Draw the number of changed pixed on the images (default: off)

# Will normally be set to off except when you setup and adjust the motion settings

# Text is placed in upper right corner

text_changes off

# This option defines the value of the special event conversion specifier %C

# You can use any conversion specifier in this option except %C. Date and time

# values are from the timestamp of the first image in the current event.

# Default: %Y%m%d%H%M%S

# The idea is that %C can be used filenames and text_left/right for creating

# a unique identifier for each event.

text_event %Y%m%d%H%M%S

# Draw characters at twice normal size on images. (default: off)

text_double on

# Text to include in a JPEG EXIF comment

# May be any text, including conversion specifiers.

# The EXIF timestamp is included independent of this text.

;exif_text %i%J/%K%L

############################################################

# Target Directories and filenames For Images And Films

# For the options snapshot_, picture_, movie_ and timelapse_filename

# you can use conversion specifiers

# %Y = year, %m = month, %d = date,

# %H = hour, %M = minute, %S = second,

# %v = event, %q = frame number, %t = thread (camera) number,

# %D = changed pixels, %N = noise level,

# %i and %J = width and height of motion area,

# %K and %L = X and Y coordinates of motion center

# %C = value defined by text_event

# Quotation marks round string are allowed.

############################################################

# Target base directory for pictures and films

# Recommended to use absolute path. (Default: current working directory)

target_dir /var/www/motionImage

# File path for snapshots (jpeg or ppm) relative to target_dir

# Default: %v-%Y%m%d%H%M%S-snapshot

# Default value is equivalent to legacy oldlayout option

# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-snapshot

# File extension .jpg or .ppm is automatically added so do not include this.

# Note: A symbolic link called lastsnap.jpg created in the target_dir will always

33

Page 36: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# point to the latest snapshot, unless snapshot_filename is exactly 'lastsnap'

snapshot_filename %v-%Y%m%d%H%M%S-snapshot

# File path for motion triggered images (jpeg or ppm) relative to target_dir

# Default: %v-%Y%m%d%H%M%S-%q

# Default value is equivalent to legacy oldlayout option

# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-%q

# File extension .jpg or .ppm is automatically added so do not include this

# Set to 'preview' together with best-preview feature enables special naming

# convention for preview shots. See motion guide for details

picture_filename %v-%Y%m%d%H%M%S-%q

# File path for motion triggered ffmpeg films (movies) relative to target_dir

# Default: %v-%Y%m%d%H%M%S

# Default value is equivalent to legacy oldlayout option

# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H%M%S

# File extension .mpg or .avi is automatically added so do not include this

# This option was previously called ffmpeg_filename

movie_filename %v-%Y%m%d%H%M%S

# File path for timelapse movies relative to target_dir

# Default: %Y%m%d-timelapse

# Default value is near equivalent to legacy oldlayout option

# For Motion 3.0 compatible mode choose: %Y/%m/%d-timelapse

# File extension .mpg is automatically added so do not include this

timelapse_filename %Y%m%d-timelapse

############################################################

# Global Network Options

############################################################

# Enable or disable IPV6 for http control and stream (default: off )

ipv6_enabled off

############################################################

# Live Stream Server

############################################################

# The mini-http server listens to this port for requests (default: 0 = disabled)

stream_port 8081

# Quality of the jpeg (in percent) images produced (default: 50)

stream_quality 50

# Output frames at 1 fps when no motion is detected and increase to the

# rate given by stream_maxrate when motion is detected (default: off)

stream_motion off

# Maximum framerate for stream streams (default: 1)

stream_maxrate 1

34

Page 37: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# Restrict stream connections to localhost only (default: on)

stream_localhost off

# Limits the number of images per connection (default: 0 = unlimited)

# Number can be defined by multiplying actual stream rate by desired number of seconds

# Actual stream rate is the smallest of the numbers framerate and stream_maxrate

stream_limit 0

# Set the authentication method (default: 0)

# 0 = disabled

# 1 = Basic authentication

# 2 = MD5 digest (the safer authentication)

stream_auth_method 1

# Authentication for the stream. Syntax username:password

# Default: not defined (Disabled)

; stream_authentication username:password

############################################################

・Apache設定

<IfModule mod_mime.c>

#

# TypesConfig points to the file containing the list of mappings from

# filename extension to MIME-type.

#

TypesConfig /etc/mime.types

#

# AddType allows you to add to or override the MIME configuration

# file mime.types for specific file types.

#

#AddType application/x-gzip .tgz

#

# AddEncoding allows you to have certain browsers uncompress

# information on the fly. Note: Not all browsers support this.

# Despite the name similarity, the following Add* directives have

# nothing to do with the FancyIndexing customization directives above.

#

#AddEncoding x-compress .Z

#AddEncoding x-gzip .gz .tgz

#AddEncoding x-bzip2 .bz2

#

35

Page 38: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# If the AddEncoding directives above are commented-out, then you

# probably should define those extensions to indicate media types:

#

AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz

AddType application/x-bzip2 .bz2

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

#

# DefaultLanguage and AddLanguage allows you to specify the language of

# a document. You can then use content negotiation to give a browser a

# file in a language the user can understand.

#

# Specify a default language. This means that all data

# going out without a specific language tag (see below) will

# be marked with this one. You probably do NOT want to set

# this unless you are sure it is correct for all cases.

#

# * It is generally better to not mark a page as

# * being a certain language than marking it with the wrong

# * language!

#

# DefaultLanguage nl

#

# Note 1: The suffix does not have to be the same as the language

# keyword --- those with documents in Polish (whose net-standard

# language code is pl) may wish to use "AddLanguage pl .po" to

# avoid the ambiguity with the common suffix for perl scripts.

#

# Note 2: The example entries below illustrate that in some cases

# the two character 'Language' abbreviation is not identical to

# the two character 'Country' code for its country,

# E.g. 'Danmark/dk' versus 'Danish/da'.

#

# Note 3: In the case of 'ltz' we violate the RFC by using a three char

# specifier. There is 'work in progress' to fix this and get

# the reference data for rfc1766 cleaned up.

#

# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)

# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)

# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)

# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)

# Norwegian (no) - Polish (pl) - Portugese (pt)

# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)

# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)

#

AddLanguage am .amh

36

Page 39: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

AddLanguage ar .ara

AddLanguage be .be

AddLanguage bg .bg

AddLanguage bn .bn

AddLanguage br .br

AddLanguage bs .bs

AddLanguage ca .ca

AddLanguage cs .cz .cs

AddLanguage cy .cy

AddLanguage da .dk

AddLanguage de .de

AddLanguage dz .dz

AddLanguage el .el

AddLanguage en .en

AddLanguage eo .eo

# es is ecmascript in /etc/mime.types

RemoveType es

AddLanguage es .es

AddLanguage et .et

AddLanguage eu .eu

AddLanguage fa .fa

AddLanguage fi .fi

AddLanguage fr .fr

AddLanguage ga .ga

AddLanguage gl .glg

AddLanguage gu .gu

AddLanguage he .he

AddLanguage hi .hi

AddLanguage hr .hr

AddLanguage hu .hu

AddLanguage hy .hy

AddLanguage id .id

AddLanguage is .is

AddLanguage it .it

AddLanguage ja .ja

AddLanguage ka .ka

AddLanguage kk .kk

AddLanguage km .km

AddLanguage kn .kn

AddLanguage ko .ko

AddLanguage ku .ku

AddLanguage lo .lo

AddLanguage lt .lt

AddLanguage ltz .ltz

AddLanguage lv .lv

AddLanguage mg .mg

AddLanguage mk .mk

AddLanguage ml .ml

AddLanguage mr .mr

37

Page 40: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

AddLanguage ms .msa

AddLanguage nb .nob

AddLanguage ne .ne

AddLanguage nl .nl

AddLanguage nn .nn

AddLanguage no .no

AddLanguage pa .pa

AddLanguage pl .po

AddLanguage pt-BR .pt-br

AddLanguage pt .pt

AddLanguage ro .ro

AddLanguage ru .ru

AddLanguage sa .sa

AddLanguage se .se

AddLanguage si .si

AddLanguage sk .sk

AddLanguage sl .sl

AddLanguage sq .sq

AddLanguage sr .sr

AddLanguage sv .sv

AddLanguage ta .ta

AddLanguage te .te

AddLanguage th .th

AddLanguage tl .tl

RemoveType tr

# tr is troff in /etc/mime.types

AddLanguage tr .tr

AddLanguage uk .uk

AddLanguage ur .ur

AddLanguage vi .vi

AddLanguage wo .wo

AddLanguage xh .xh

AddLanguage zh-CN .zh-cn

AddLanguage zh-TW .zh-tw

#

# Commonly used filename extensions to character sets. You probably

# want to avoid clashes with the language extensions, unless you

# are good at carefully testing your setup after each change.

# See http://www.iana.org/assignments/character-sets for the

# official list of charset names and their respective RFCs.

#

AddCharset us-ascii .ascii .us-ascii

AddCharset ISO-8859-1 .iso8859-1 .latin1

AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen

AddCharset ISO-8859-3 .iso8859-3 .latin3

AddCharset ISO-8859-4 .iso8859-4 .latin4

AddCharset ISO-8859-5 .iso8859-5 .cyr .iso-ru

AddCharset ISO-8859-6 .iso8859-6 .arb .arabic

38

Page 41: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

AddCharset ISO-8859-7 .iso8859-7 .grk .greek

AddCharset ISO-8859-8 .iso8859-8 .heb .hebrew

AddCharset ISO-8859-9 .iso8859-9 .latin5 .trk

AddCharset ISO-8859-10 .iso8859-10 .latin6

AddCharset ISO-8859-13 .iso8859-13

AddCharset ISO-8859-14 .iso8859-14 .latin8

AddCharset ISO-8859-15 .iso8859-15 .latin9

AddCharset ISO-8859-16 .iso8859-16 .latin10

AddCharset ISO-2022-JP .iso2022-jp .jis

AddCharset ISO-2022-KR .iso2022-kr .kis

AddCharset ISO-2022-CN .iso2022-cn .cis

AddCharset Big5 .Big5 .big5 .b5

AddCharset cn-Big5 .cn-big5

# For russian, more than one charset is used (depends on client, mostly):

AddCharset WINDOWS-1251 .cp-1251 .win-1251

AddCharset CP866 .cp866

AddCharset KOI8 .koi8

AddCharset KOI8-E .koi8-e

AddCharset KOI8-r .koi8-r .koi8-ru

AddCharset KOI8-U .koi8-u

AddCharset KOI8-ru .koi8-uk .ua

AddCharset ISO-10646-UCS-2 .ucs2

AddCharset ISO-10646-UCS-4 .ucs4

AddCharset UTF-7 .utf7

AddCharset UTF-8 .utf8

AddCharset UTF-16 .utf16

AddCharset UTF-16BE .utf16be

AddCharset UTF-16LE .utf16le

AddCharset UTF-32 .utf32

AddCharset UTF-32BE .utf32be

AddCharset UTF-32LE .utf32le

AddCharset euc-cn .euc-cn

AddCharset euc-gb .euc-gb

AddCharset euc-jp .euc-jp

AddCharset euc-kr .euc-kr

#Not sure how euc-tw got in - IANA doesn't list it???

AddCharset EUC-TW .euc-tw

AddCharset gb2312 .gb2312 .gb

AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2

AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4

AddCharset shift_jis .shift_jis .sjis

AddCharset BRF .brf

#

# AddHandler allows you to map certain file extensions to "handlers":

# actions unrelated to filetype. These can be either built into the server

# or added with the Action directive (see below)

#

# To use CGI scripts outside of ScriptAliased directories:

39

Page 42: 平成 26 年度卒業研究論文buturi.heteml.jp/student/2014/izumi/ronnbunsaisyuu6.pdf家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで2倍の機能を持

# (You will also need to add "ExecCGI" to the "Options" directive.)

#

AddHandler cgi-script .cgi

#

# For files that include their own HTTP headers:

#

#AddHandler send-as-is asis

#

# For server-parsed imagemap files:

#

#AddHandler imap-file map

#

# For type maps (negotiated resources):

# (This is enabled by default to allow the Apache "It Worked" page

# to be distributed in multiple languages.)

#

AddHandler type-map var

#

# Filters allow you to process content before it is sent to the client.

#

# To parse .shtml files for server-side includes (SSI):

# (You will also need to add "Includes" to the "Options" directive.)

#

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

</IfModule>

40