Coregaのカメラを動かすメモ
研究室の後輩の卒研で「CG-WLNCPTG (CG-WLNCPTG) | コレガ」を自作のソフトで動かすという要件があったのでメモ。
付属のソフトで動かせますが、それだとダメなので調べてみたメモ。
今回はPDA上のWindows mobileで開発したので、ソースはそれように。
このカメラってWEBの管理画面から動かせるのかな?
なんか、もろもろめんどかったのでWiresharkでパケットの中身を見た。
結果、凄く簡単だった。
動かし方
HTTPでアクセスして、パラメータをPOSTしてるだけだけ。
送るパラメータ
PanSingleMoveDegree=1&TiltSingleMoveDegree=1&PanTiltSingleMove=方向
でも実際はPanTiltSingleMoveだけでいいみたい。
前の2つのパラメータ変えても特に何も起こんない。
これをBASIC認証のヘッダつけて送るだけ。
方向は
- 上 1
- 右 3
- 下 7
- 左 5
こんな感じ。
C#だと
TcpClient client = new TcpClient(Address, Port); string message = "POST /pantiltcontrol.cgi HTTP/1.0\r\n"; message += "Content-Type: text/plain\r\n"; message += "Authorization: Basic BASIC認証のあれ\r\n"; message += "Content-Length: 68\r\n\r\n"; message += "PanSingleMoveDegree=1&TiltSingleMoveDegree=1&PanTiltSingleMove=" + cmd + "\r\n\r\n"; Byte[] data = System.Text.Encoding.UTF8.GetBytes(message); NetworkStream stream = client.GetStream(); stream.Write(data, 0, data.Length); stream.Flush();
こんな感じです。
ついでに画像も表示させてみる。
画像も取得してみます。
付属ソフトや管理画面で見れますが、リアルタイムに取得する方法がわからなかったので力技。
WEBの管理画面だとアプレット使っていて、あるメッセージをトリガーにストリームで画像をとってきてるだけな感じがしたけど、違うのかな?
今回は、管理画面の画像を取得する。
Windows mobile上で動くもの初めて作ったので、もっといい方法ありそう。
抜粋で。
private void showImage_Click(object sender, EventArgs e) { Thread th = new Thread(new ThreadStart(getImage)); th.IsBackground = true; th.Start(); } delegate void getImageDelegate(Bitmap image); private void getImage() { Stream stream = null; while (true) { try { WebRequest wreq = WebRequest.Create("http://Address/IMAGE.JPG"); wreq.Credentials = new NetworkCredential("ID", "PASS"); wreq.Timeout = 2000; WebResponse wres = wreq.GetResponse(); stream = wres.GetResponseStream(); Invoke(new getImageDelegate(imagePanelt), new Bitmap(stream)); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } finally { if (stream != null) stream.Close(); Thread.Sleep(500); } } } private void imagePanel(Bitmap image) { cameraImage.Image = image; }
こんな感じで思いっきり力技。
WEB管理画面の画像を定期的に取得する、カメラに負荷がかかる方法。
でも、結構安定してた。
あと、ごにょごにょしててWindows Mobile上ではMemoryStream使えなんですね。
うん。意外と簡単だった。
ん?なぜ俺がこんな事やってるんだ???