Adventurer3の内蔵カメラの映像を自前のプログラムに表示できないかやってみた。
初めに
内蔵カメラの映像は、あるURLのページにアクセスすると見れるのは、色々なサイトで紹介されている。具体的には以下のようにする。
http://マシンのIPアドレス:8080/
ここは、内蔵カメラからの出力を取り出すためのサンプルページのようで、いくつかのやり方がここで紹介されている。
このページには、「M-JPEG streamer」と記述があった。
プログラム中での取り出し
利用するパッケージ
M-JPEG streamerとあるので、それで検索したところ、MJPEG-Decoderというのがドンピシャであった。これをNuGetし、まずプロジェクトにインストールした。
WPFとの連携
利用するクラスはMjpegDecoderで、これにURLとイベントハンドラーを渡すと、イメージを受け取った時に、イベントハンドラーが呼び出される。
C#側の実装
// 宣言
private MjpegDecoder decoder_ = new MjpegDecoder();
private BitmapImage image_;
public BitmapImage imageSource { get => image_; }
// イベントハンドラー
private void frameReady(object sender, FrameReadyEventArgs e) {
image_ = e.BitmapImage;
RiseProperty(nameof(imageSource));
}
// 機器との接続開始
void startup() {
var url = new System.Uri("http://IPアドレス:8080");
decoder_.ParseStream(url);
decoder_.FrameReady += frameReady;
}
イメージを表示するxaml側の記述
<Image Source="{Binding imageSource}"/>
これで、Imageにビットマップが表示されていく。
結果
まだ、開発途中の制御プログラムに実装したところ、プログラム上で、状況確認ができるようになった。
イメージの転送自体は、大体500kbps位なので、ローカルLANなら許容範囲かな。
コメント