yas.muトップ > 展望カメラ totsucam > totsucamはどのように実現されているか

totsucamはどのように実現されているか

問合せ先: totsucam@yas.mu
初版 2005-11-03

1. ネットワークカメラによる撮影とサーバへの転送

カメラとしては、コレガのネットワークカメラ CG-WLNC11MN を使用しています。 これをアクリル板に納め、雨にぬれないようにして屋外に設置。 設置は衛星放送用アンテナ取り付け金具を利用して某所ベランダに設置しました。 このカメラにはftpクライアント機能があります。 毎分、下記サーバに対して320×240の画像を ファイル名に撮影時間を含む形で アップロードするように設定しました。

2. サーバにアップロードされたファイルのピックアップ

サーバとしてはFreeBSD 5.4(設置時)を使用しています。 サーバ側では、随時これを拾って ImageMagickの convertで時刻と著作権表示の文字を入れ、 同時にサムネイル用として160×120の画像も生成します。 この部分はperlで書いたデーモン[daemon1]が常駐して行います。 totsucam.yas.muのトップの一番上のがこの画像です。 このdaemon1は、常に画像アップロードディレクトリのタイムスタンプを監視し、 変化があればディレクトリ一覧を取り、 最新から2番目のファイルを取り出し、 文字入れ、サイズ変換の処理を行います。 このカメラのftpクライアント機能、 サーバ側でファイルの転送の終了を知ることが出来ません。 そのため、最新のファイルを取ってしまうと、タイミングによっては 転送途中ということがあるわけで、一工夫が必要です。 コレガさんには是非とも、一時ファイル名で転送し、 転送完了後、指定の名称にリネームするモードを設けて欲しいものです。 この不具合をカヴァーするのが本当のdaemon1の役割です。 この事情のため、「最新画像」は実は1〜2分の遅れがあります。 このようにしてピックアップ&名入れした画像は、 ナマ画像一時ディレクトリに保存されます。 このナマ画像も、ファイル名に撮影時刻を分の単位まで含んでいます。

3. 日の出、南中、日没時の動画の生成

このようにして保存されたナマ画像(jpeg、320×240)を元に、 一日3回毎日、日の出、南中、日没の時刻の前後1時間の動画を mpeg形式で作成(prog1)します。 prog1もperlで書いてあります。 日の出、南中、日没の時刻の計算は、 「日月出没計算 by 菊池さん http://kikuchisan.net/」 をperlに書き換えたものを使用しています。 元となった菊池さんのJavaScriptのプログラムは 「日の出・日の入りの計算」(長沢 工著 地人書館)の 計算式および定数を利用しているとのことです。 日付が変わるころ、この日月出没計算プログラムで計算した時間を もとに、prog1を起動すべき時間に起動するようatコマンドを3回仕込みます。 prog1では、指定時刻(の出、南中、日没)の前後60分の120枚のナマ画像jpegを 結合し、4秒のmpeg(30フレーム/秒)を生成します。 この変換もImageMagickの convertで行います。 なお、同時に静止画の選択保存も行います。 日の出の15分前、南中時刻ちょうど、日没の20分後の3枚を保存します。

4. 終日=24時間の動画の生成

日付が変わり、サーバも暇になる(?)夜中1時頃、 prog2によって最後の大仕事を行います。 prog2はcronによって毎日この時刻に起動されます。 prog2の役割は、一時ディレクトリの前日分のナマ画像 60×24 = 1440枚の画像から convertで 48秒のmpeg動画を生成することです。 これにはCeleron 900MHz、メモリ512MBのハードで約1時間かかります。 一時ディレクトリのナマ画像は二日を経過するとprog2によって削除されます。 prog2はシェルスクリプトです。

5. totsucamページ表示用CGI

これまで述べてきたようにして作成された、jpeg、mpegの画像を見やすく表示するのが totsucamのページを表示しているCGIです。 データが存在する日について、初めの7日間については、サムネイル付きで表示します。 それ以前については、サムネイルなしの一覧で表示します。 スタートの日付を指定することで、そこから7日間をサムネイル付きで表示することが できるようにしました。 このCGIもperlで書いています。 なお、このCGIで作成されるHTMLは Another HTML-lint gateway - HTML文書の文法をチェックし、採点します で100点を頂いています。

6. ダウンロードカウンタ

もうひとつ、バックで動いているデーモン(daemon2)があります。 それは、totsucam.yas.muのアクセスログをtail -fで拾い続け、 mpegファイルのダウンロードを検知し、 ダウンロードカウンタをカウントアップする役割のデーモンです。 ダウンロードカウンタは、CGIで実現する方法もありますが、 ここではHTTPサーバのログファイルから求める方法を使っています。

[totsucam.yas.muトップへ]

#4674, last modified: Monday, 31-Dec-2007 22:27:17 JST, totsucam@yas.mu