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)