none
IPネットワークカメラの画像取得方法について。。。。(言語 C#) RRS feed

  • 質問

  • ネットワークカメラは Panasonic の DG-SW316L です。 CGI コマンド対応しています。

    アプリがカメラから画像を取得し、そして画像を解析し、表示することをしています。 アプリ言語はC#、開発環境はVS2013です。

    今は、1Shot画像の入力ができています。下記は画像入力のソースです。 VGAサイズの画像を取得できます。

    WebRequest wr; 
    WebResponse res;
    Bitmap Bmp;
    
    wr = System.Net.WebRequest.Create(”http://192.168.100.10:80/cgi-bin/camera?resolution=640”);
    wr.Timeout = 1000;
    res = wr.GetResponse();
    Bmp = new Bitmap(res.GetResponseStream());

    これで、1秒約10フレームの画像を撮れますが、少し遅いですので、Jpegのストリーム配信機能を使いたいです。 カメラの取説では、括弧内のCGIコマンドを送ることでJpegのストリーム配信ができますと書いています。

    /cgi-bin/jpeg?connect=start&framerate=15&resolution=640&UID=****&page=****<o:p></o:p>

    しかし、上のプログラムの風にコマンドを送ったら、 プログラムは  res=wr.GetResponse(); の所で止まって、画像データがこないです。 でも、カメラとつながっているハブのライトがすごく点滅するようになり、一所懸命画像データを配信しているようです。  カメラが配信した画像はどうやって読み取れるのか分からなくて、困っています。<o:p></o:p>

    教えていただきたいです。 よろしくお願いします。

    • 編集済み CardAddr 2015年1月28日 5:25
    2015年1月28日 4:29

回答

  • 最近、IPカメラから画像を取得できるフリーのライブラリを見つかりました。 その情報を載せておきます。

    フリーライブラリの名前は「MjpegProcessor.dll」です。 ネットで検索したら出てきます。

    かなり使いやすいです。  使い方はこんな感じです。

    ’Imports MjpegProcessor

    Private WithEvents _Mjpeg As MjpegDecoder

    Me._Mjpeg = New MjpegDecoder()

    Me._Mjpeg.ParseStream(New Uri("http://192.168.100.10:80/cgi-bin/mjpeg?framerate=10&resolution=640x480"))

    '画像取得イベント

    Private Sub _Mjpeg_FrameReady(sender As Object, e As FrameReadyEventArgs) Handles _Mjpeg.FrameReady

    Dim p As String = "C:\img_1.jpg"
            e.Bitmap.Save(p)

    End Sub

    • 回答としてマーク CardAddr 2015年4月3日 8:49
    2015年4月3日 8:49

すべての返信

  • そのカメラを持っていないので直接的な助言はできませんが……。

    とりあえず、Wiresharkなどのパケットキャプチャソフトを使って、どんなパケットが流れているかを観察してみてはいかがでしょうか。

    2015年1月28日 4:58
  • 併せて、というかパケットキャプチャを使わなくても、

    .NET Framework のネットワークのトレースを使うとどのような通信をしているのか確認できます。直前までの通信内容を確認すれば、wr.GetSeponse()が何を待っているのかも分かるかもしれません。

    CGIはGETリクエストなのでしょうか? POSTならServicePointManager.Expect100Continue = falseで解決することもありますが…。

    2015年1月28日 5:46
  • ご返事ありがとうございます。 以前、PCと設備間のTCP/IP、UDPなどの通信ソフトを作ったことがありますが、今回のカメラに全く無効です。カメラの取説には HTTPプロトコル をサポートしていると記述しています。

    たとえば、カメラがネットに配信したパケットを受け取りたかったら、どういう風にプログラムしますか? 基本知識になりますが、ちょっとだけでも教えていただきたいです。 よろしく~~~

    2015年1月30日 5:34
  • 最近、IPカメラから画像を取得できるフリーのライブラリを見つかりました。 その情報を載せておきます。

    フリーライブラリの名前は「MjpegProcessor.dll」です。 ネットで検索したら出てきます。

    かなり使いやすいです。  使い方はこんな感じです。

    ’Imports MjpegProcessor

    Private WithEvents _Mjpeg As MjpegDecoder

    Me._Mjpeg = New MjpegDecoder()

    Me._Mjpeg.ParseStream(New Uri("http://192.168.100.10:80/cgi-bin/mjpeg?framerate=10&resolution=640x480"))

    '画像取得イベント

    Private Sub _Mjpeg_FrameReady(sender As Object, e As FrameReadyEventArgs) Handles _Mjpeg.FrameReady

    Dim p As String = "C:\img_1.jpg"
            e.Bitmap.Save(p)

    End Sub

    • 回答としてマーク CardAddr 2015年4月3日 8:49
    2015年4月3日 8:49