2011-62
無線ネットワークカメラの最新画像を選択するCGIプログラム
無 線ネットワークカメラ(Planex CS-W04G)からFTPでホームページサーバへ送られる動態検知データ(ファイル名に時間を利用)をそのままにしておくと,上書きされないのであっと いう間に大量のデータが蓄積されてしまう.表示したいのは最新画像であるので,アクセスする際にソートし,最新画像を表示するCGIプログラムをネット上 で探してみたがPlanex社用のCGIプログラムは見当たらなかった.そこで,類似のプログラムを参考に作ってみた.意外に簡単に目的を達成することが できた.
画像ファイルは,"motion-2011-02-08-13-34-29.jpg"の形式で保存されているので,sortした後時間的に最も新しいものを選択し,表示させればよい.その際.最新画像以外は削除するように設定する.
注意すべきことは漢字の空白が行末に入らない様にすること,またjpgの場合,コ ンテンツタイプをjpegにしないとブラウザによっては正常に表示しない.Corega社製ネットワークカメラの場合は日付の付いたフォルダが作成され, その中に画像ファイルが保存されるので,前段階としてフォルダのソートと選択が必要である.
--------------------------------------------------------------------------------------------------------
#! /usr/bin/perl
########## Selection of New Photo for Planex CS-W04G ##########
#画像ファイルは,motion-2011-02-08-13-34-29.jpgの形式で保存されている.
#pop関数を用いて配列の最後の値を取り出す.
$namedir = "camera"; #ネットワークカメラからFTPサーバへ送り込むフォルダ名を指定
my(@fileL) = glob("$namedir/*"); #フォルダ内のファイル名一覧を取得
$newestF = pop (@fileL); #最新ファイル名を選択
#location使用不能のため修正 コンテンツタイプを指定→以下5行 ###### 必ずjpegと指定 ######
print "Content-type: image/jpeg\n\n";
open IMG,"$newestF"; #ファイルハンドル IMGに画像ファイルを読込
binmode (IMG); #画像の場合バイナリモードに設定
print <IMG>; #ファイルハンドルを画面に書出
close (IMG); #ファイルハンドルを閉じる
#print "Location: $newestF\n\n"; #画像を表示→Location使用可能の場合
foreach (@fileL) {unlink "$_";} #最新以外のファイルを消去
exit;
--------------------------------------------------------------------------------------------------------
(2011/2/8)