HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0109
E.THSPDSCで監視カメラ5解決


E.T

リンク

2014/1/9(Thu) 17:54:00|NO.59253

こんにちは。E.Tです。
HSPDSCで監視カメラをつくろうと思います。
それでWebカメラの映像がなにか動いたら処理を実行したいのですが
どうも検索しても出てきません。
出てきてもHSPCVようだったりキャッシュから見たり...
HSPDSCで監視カメラ的なことは可能なのでしょうか
方法を知っている方、教えていただけるとうれしいです。



この記事に返信する


MillkeyStars

リンク

2014/1/9(Thu) 21:33:59|NO.59257

静止画を取得できれば、ほぼすべての物については監視カメラに転用できます。
監視カメラは、前回取得した画像での比較をし、違いがどのくらいかで、動いた・動かないを判断してるためです。

やり方としては、hspdsc にて、キャプチャデバイスから静止画を取り出し、画像を比較し、違いがあった場合
キャプチャする間隔を 16ms など連続画像として取得すれば動画形式に変換できます。

[動作フロー]
1.キャプチャデバイスで、比較元の画像を撮影
2.一定の間隔 例えば 200ms などの間隔で比較先画像を比較
3.比較元画像と比較先画像の違いを判断。違いがない場合、1に戻る。
4.違いがあった場合、画像を取得する間隔を短くして、取得。
5.違いがなくなるまで続けて、なくなったと判断したらまた 1からはじめる。

尚、上記の場合、静止画を動画などに変換する作業は考慮していません。
また、キャプチャデバイスについては、ご自身で管理しているもので行ってください。

MillkeyStars は、上記の書き込みについての事後の責任は負えません。
(最近、他人のPCのキャプチャデバイスを取得するという問題が発生している為、一応)



GENKI

リンク

2014/1/9(Thu) 22:08:26|NO.59259

動体検知というようで、こちらのサイトがわかりやすです。
http://www.robotsfx.com/robot/robohow/RoboHow128/RoboHow128.html

サンプルはvcですが、解説だけ読めばおおよそわかると思います。
dsc_GetImageMem命令とか使えば出来そうですね。



E.T

リンク

2014/1/10(Fri) 17:19:42|NO.59274

モノクロ化にしてそこから判定の仕方がよくわかりません
>(最近、他人のPCのキャプチャデバイスを取得するという問題が発生している為、一応)
そんなことがあったんですか。僕は個人的に作ってるだけなので...



暇人

リンク

2014/1/11(Sat) 23:25:41|NO.59299

一応動体検知サンプル
どの程度変化があったら動いた事にするかとか
色を捨ててるから暗い所も同じしきい値を使うと変化を検知しにくいとか
これから考える事は多いだろう・・・

#include "hspdsc.as" screen 0,ginfo_dispx,ginfo_dispy,2 title "DirectShow キャプチャデバイス表示 サンプル(1つのみ) " width 320,240 dsc_Init // 初期化を必ずする! gsel 0,1 // バッファのサイズ取得し sdim で 確保 sdim devlist, dsc_GetDeviceListSize() dsc_GetDeviceList devlist // 利用可能なデバイス一覧取得 if stat = 0 : dialog "デバイスが見つかりません" : end objsize 300, 20 combox id, 100, devlist objsize 150,20 button "デバイスを再生",*play Threshold=30 //しきい値 input Threshold,32,20 onexit *exit stop *play // 操作ID 0 指定(デフォルトでは0が指定されているため書かなくてもOK) dsc_SetActiveSel 0 dsc_Stop dsc_Close // デバイスのオープン dsc_Open id, 6, 0, 0, 0 //表示なしでオープン if stat < 0 : dialog "エラーが発生しました\nstat = " + stat, 1, "DEVICE-ERROR" : stop gsel 0, 1 width dsc_CapX, dsc_CapY wx2=ginfo_wx2 wy1=ginfo_wy1 dsc_Play hwnd if stat < 0 : dialog "エラーが発生しました\nstat = " + stat,1,"CAPTURE-ERROR" : stop //比較用にパレットモードのウインドウを用意 screen 10,dsc_CapX/4,dsc_CapY/4,1+4+8,wx2,wy1 //動体検知用の表示ウィンドウに実サイズの4分の1 mref vramA,66 winx=ginfo_winx winym=ginfo_winy-1//一番上のライン winx2=((winx+3)&-4) //VRAM横1ラインのサイズ //パレットを黒から白にグラデーションセット repeat 256 palette cnt,cnt,cnt,cnt,(cnt=255) loop //このウィンドウにコピーすれば勝手にグレースケールになる //完全に黒なのにパレット0にならなかったりするが・・・ buffer 11,dsc_CapX/4, dsc_CapY/4,1 //比較する前回のフレーム用 mref vramB,66 repeat 256 palette cnt,cnt,cnt,cnt,(cnt=255) loop gsel 0, 1 color boxf repeat//キャプチャして画像が更新されるまでループ wait 10 dsc_GetImage hdc, 0, 0, dsc_CapX, dsc_CapY redraw 1 pget dsc_CapX/2,dsc_CapY/2 //中心部分の色を取得して、黒い外ならキャプチャ開始されとしてループを抜ける if (ginfo_r+ginfo_g+ginfo_b) {break} loop gsel 11 //比較用前回のフレームとして縮小コピー gmode 0 pos 0,0 gzoom dsc_CapX/4,dsc_CapY/4,0,0,0,dsc_CapX, dsc_CapY,0 repeat gsel 0 redraw 0 dsc_GetImage hdc, 0, 0, dsc_CapX, dsc_CapY gsel 10 //比較用今回のフレームとして縮小コピー redraw 0 pos 0,0 gzoom dsc_CapX/4,dsc_CapY/4,0,0,0,dsc_CapX, dsc_CapY,0 redraw 1 md=0 py=0 gsel 0 color 255 repeat winym //縦 loopy=(winym-cnt)*winx2 repeat winx //横 if abs(peek(vramA,loopy+cnt)-peek(vramB,loopy+cnt)) > Threshold {//ウィンドウバッファを直接参照してパレットナンバーを比較してThresholdより差があれば変化したと判定 boxf cnt*4,py,cnt*4+2,py+2 //ちゃんと検知出来てるか確認用に表示(検知用のウィンドウは4分の1のサイズなので座標を4倍してる) md++ } loop py+4 loop title "変化したドット数="+md redraw 1 await 100 gsel 11 //今回のフレームを次回比較用のフレームとしてコピー gmode 0 pos 0,0 gcopy 10,0,0,dsc_CapX/4,dsc_CapY/4 loop stop *exit // クローズ dsc_Stop dsc_Close end



E.T

リンク

2014/1/12(Sun) 10:47:27|NO.59305

とりあえずこのサンプルをF1やgoogleで調べて意味を自分で調べてみます。
皆さんありがとうございました



ONION software Copyright 1997-2023(c) All rights reserved.