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

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

問合せ先: totsucam@yas.mu
初版 2005-11-03; 改訂版 2014-01-12

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

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

2014年1月12日に Panasonic DG-SW314 に交換して運用しています。 このカメラでは1280×720のの画像をftpで転送しています。

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

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

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

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

動画生成コマンド:
ffmpeg -y -i "%d.jpg" -f mp4 -vb 1000k -vcodec libx264 -an totsucamYYYYMMDDxxxx.mp4

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

日付が変わり,サーバも暇になる(?)夜中1時頃, prog2によって最後の大仕事を行います。 prog2はcronによって毎日この時刻に起動されます。 prog2の役割は,一時ディレクトリの前日分のナマ画像 60×24 = 1440枚の画像から convertで 57.6秒のmpeg動画を生成することです。 これにはCeleron 900MHz,メモリ512MBのハードで約1時間かかります。 (当初。その後前出のffmpegを利用してmpeg4に変換するように変更。この処理はPentium Dual-Core E2220で約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トップへ]

#12701, last modified: Sunday, 12-Jan-2014 21:36:27 JST, totsucam@yas.mu