...

卒業論文

by user

on
Category: Documents
10

views

Report

Comments

Transcript

卒業論文
平成 26 年度卒業研究論文
RaspberryPi 監視カメラの可能性:
出席確認
近畿大学工学部
情報システム工学科 情報メディアコース
和泉大介
学籍番号:1110960070
目次
1. 研究の背景と目的........................................................................................................................................1
1.1 RaspberryPi の概要................................................................................................................................1
1.1.1 RaspberryPi のハードウェア.......................................................................................................2
1.1.2 RaspberryPi の OS.........................................................................................................................2
1.1.3 RaspberryPi を windows でリモート操作する...........................................................................2
1.2 RaspberryPi の実用例............................................................................................................................3
2. RaspberryPi を使う上で知っておきたい知識...........................................................................................4
2. RaspberryPi を使う上で知っておきたい知識...........................................................................................4
2.1 sudo.........................................................................................................................................................4
2.1.1 sudo のリスクとメリット...........................................................................................................4
2.2 パッケージマネージャー....................................................................................................................5
2.2.1 パッケージマネージャに必要な要素.......................................................................................5
2.3 IoT...........................................................................................................................................................6
2.3.1 Iot とは...........................................................................................................................................6
2.3.2 RFID とは......................................................................................................................................6
2.4 シェルスクリプト................................................................................................................................6
2..5 カメラモジュール.............................................................................................................................10
2..5.1 crontab を使用したカメラモジュールの運用.......................................................................10
3.システム設計............................................................................................................................................14
3.1 システム構成図..................................................................................................................................14
4.環境構築.......................................................................................................................................................15
4.1Apache の導入......................................................................................................................................15
5.機能...............................................................................................................................................................21
5.1 動作を確認して自動撮影..................................................................................................................21
5.2 ブラウザで現在の撮影状況を確認..................................................................................................21
5.2.1 ブラウザごとの挙動..................................................................................................................21
5.3 ブラウザで撮影した画像確認..........................................................................................................23
6. まとめ・考察..............................................................................................................................................24
7. 謝辞..............................................................................................................................................................24
8. 参考文献・引用..........................................................................................................................................25
9.付録(ソースコード・RaspberryPi 設定)...................................................................................................25
9.1 motionImage.cgi...................................................................................................................................25
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
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
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
家電量販店で高価なデジタルフォトフレームを買う代わりに,半分のコストで 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
残念ながら,一般のユーザーがいわゆる特権昇格(privilege escalation)を行う手口を見つ
けて不正に root 権限を取得してしまうような事態はあり得ないと保証することはできないのだ
が,特定ユーザーにのみ上位のアクセス権限を必要とする一部の操作だけを許可するという処理
を簡単に実行できる現実的な手法は,sudo のほかに存在していないのである.
このように sudo の使用にはある程度のリスクが伴うが(その大部分は設定時のミスで余分な
権限まで与えることに関連している),指定ユーザーに通常以上の権限を与えて特定タスクの実
行を許すといった柔軟なシステム運用を可能にしてくれる存在という点には間違いがないといえ
る.
2.2 パッケージマネージャー
パッケージマネージャとは、コンピュータに何のソフトウェアがインストールされたかを記録
し、新しいソフトウェアのインストール・新しいバージョンへのソフトウェアの更新・以前イン
ストールしたソフトウェアの削除を容易に行えるようにするプログラムである。名前が示すよう
に、パッケージマネージャはパッケージを取り扱うということである。パッケージとは、ファイ
ル群を一つにし、インストールや削除をまとめてできるようにしたものである。RaspberryPi の
アップデートを行う際に,パッケージマネージャーが使用されているため,調べるに到った.
2.2.1 パッケージマネージャに必要な要素[4]
・パッケージマネージャに必要な要素としてパッケージのバージョン管理
・パッケージをそろえる事で同じ環境が再現できる.
・パッケージのインストール/アンインストール
・パッケージのアップグレード/ダウングレード
・パッケージ間の依存関係の管理
まず,パッケージのバージョン管理について,パッケージと呼ばれる単位に何らかのバージョ
ン識別子をつけて,中身を細かく比べることなく更新を知ることができるようにする.もしバー
ジョンの概念がないと,git や svn(Subversion)のような管理システムなしにソースコードを管
理するようなものでそれはとてもできないことだといえる.
パッケージをそろえることで同じ環境が再現できることについて,同じ環境を再現するために
は様々なバージョンのパッケージをホスティングされる方法も柔軟に指定できることが必要であ
る.パッケージは大体の場合自分が開発したもの意外を使うわけだが,そのものをどうやって入
手すればいいかということを含めて確保しておかなければ,たとえ入っておかなければならない
パッケージとリストがあったとしても入手できずインストールできなくなってしまう.
パッケージのインストール/アンインストールについて,通常のパッケージ管理というと,イ
ンストールができることを指すことが多いと思われる.もちろんパッケージとバージョンを指定
したら,その OS 上で使うことができる様にインストールしてくれるのは大事な機能である.イ
ンストール時にはコンパイル済みのバイナリを配置するだけのものもあればその場でコンパイル
するものもある.もちろん,先の依存関係に基づいて必要なパッケージも同時にインストールし
てくれる必要もある.難しいのはそれを再起的に解決しなければならないところである.アンイ
ンストールは色々と気をつけなければならない点がある.なので標準では実装していないパッ
ケージ管理もある.気をつけなければならない点として,例えばプロセスが起動するようなパッ
ケージだとプロセスを止めないといけないなど,先の依存関係で自分が誰かに依存されてる場合
は,それらのパッケージもアンストールしないといけない点である.さらに,インストール前に
あるファイルを変更するようなパッケージの場合,完全にアンインストールするためにはその一
行をきれいに消さなければいけないが,一行消すのはかなりの手間が掛かってしまう.
5
パッケージのアップグレード/ダウングレードについて,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
図 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
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
図 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
るようになり,画像を残しておけるようになった.
図 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
図 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
図 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
3.システム設計
3.1 システム構成図
システム構成図として使用されているハードウェアとソフトウェアを明記した.
図 3.1.1 システム構成図
4.環境構築
4.1Apache の導入
Apache とは[15]
Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、世界中でもっとも多く
使われている Web サーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利
用されている。単に Apache とも称されている。開発は、Apache ソフトウェア財団の Apache
HTTP サーバプロジェクトで行われている。Apache License の下でソースコードが公開および配
布されており、代表的なオープンソースソフトウェアの一つである。
・apache のインストール
13
図 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
図 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
図 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
/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
図 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
図 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
図 5.2.1.1 Chrome で motion を確認しようとした結果
・IE
ログイン名・パスワードの確認画面はでるがその後応答なし.
図 5.2.1.2 IE で motion を確認しようとした結果
・Firefox
ログイン名・パスワードを聞かれその後ブラウザで確認できた.
20
図 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
図 5.3.2 ブラウザを使って画像をスライドさせる
6. まとめ・考察
今回開発したものは出席確認としては最低限の機能はしっかりと備わったものが開発できた.
しかし,更に機能を追加して精度や機能の充実度を上げることは可能である.たとえば,保存し
た画像を1日ごとに別のフォルダに自動で移しメインのフォルダの中身は1日ごとにリセットさ
れるや日付ごとにブラウザで表示するなどが考えられる.まだまだ可能性はあったので自分の力
不足であまり充実でき無かったことは大変残念である.
研究を通してかなり時間をかけたのが motion の部分である motion を導入する際インターネッ
トにある情報を頼りにするのだが,人によって環境が全く違うため自分と似た環境の人が探せず
勘違いして検討はずれな情報を採用したりするなどして環境が壊れてしまうなどのトラブルも
あった.環境の壊れるといった問題は OS の再インストールして設定をやり直すことで解決した.
motion についてはカメラモジュールを使用する際は,motion では無く motion-mmalcam といった
ソフトウェアを用いることにより解決した.
この機能が完成すれば学生は少し窮屈な思いをするかもしれないが,教授にとっては負担削減
にはなると考えられる.
7. 謝辞
研究を行うにあたって知識や実践経験の蓄積のない私に分かりやすく時には時間を非常に多く
割いてご指導して下さった徐丙鉄先生には心から感謝しています.また,テーマは違いましたが
私より経験豊富な物理研究室のメンバーにもたくさん助けていただいて本当に感謝してます.
22
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
echo
echo
echo
echo
echo
'<!DOCTYPE html>'
'<html>'
'<head>'
'<meta charset=UTF-8>'
'<title>motionImage</title>'
'</head>'
echo '<style>
23
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
echo
echo
echo
'<script>'
'var intervalTime = 200;'
'document.getElementById("timeSlider").value=intervalTime ;'
'document.getElementById("showRange").innerHTML = intervalTime;'
echo 'function showValue () {
intervalTime = document.getElementById("timeSlider").value;
document.getElementById("showRange").innerHTML = intervalTime;
}'
echo
echo
echo
echo
echo
echo
'var photos = document.getElementsByTagName("img");'
'var timer = null;'
'var N = photos.length;
//alert("N="+N);'
'var n = 0;'
'//zBase = photos[N].style.zIndex;'
'zBase = 100 ;
//alert("zBase="+zBase);'
24
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
############################################################
# 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
# 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
#
#
#
;
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
# 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
# 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
# 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
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
# 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
# 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
# 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
# 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
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
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
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
# (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
Fly UP