2015年11月5日木曜日

「ブラウザで遠隔設置の一眼レフカメラをコントロールしよう」

と言うことで、ブログを開始しました。

◆使用するカメラは、ニコン一眼レフです。(※)

※今回利用するのは、D5300ですが、ニコンのSDKが利用できるカメラであれば何でもOKと思います。

※キャノンもSDKを一部公開しているようなのですが、日本向けには非公開のようです。

※SDKのAPI呼び出しに利用する言語は、C#で行いますす。このため、Thomas Dideriksenさんが公開されているNikon SDKのC#ラッパーを利用させて頂いています。トーマスさん有難く利用させていただきます。

◆Webサーバー側はIISで構築

・Webクライアントは、カメラを直接コントロールするPC(PCクライアント)と、そのPCへWebサーバーを通じて、シャッター押下指令を出すスマホなどのブラウザ側クライアントの2種類になります。

最新のブラウザが利用できれば何でもOKと思います。(スマホやiphoneでも大丈夫だと思います。)

・サーバーとクライアント(PC&スマホ)の交信は、IISのSignalRを使ったソケット通信で行います。
 (LInax系のサーバーだと、Node.Js+Socket.ioを利用することとになります。ここでは、SignalRを利用して構築します。)

・従って、サーバーはC#、クライアント(スマホ側)はHTML+JavaScript(JQuery)、PCクライアントはC#でコーティングします。

◆スマホ ⇔ サーバ ⇔ PC ⇔ カメラ

 (⇔は、すべて無線(WiFi)接続でも可能と思います。)

1.スマホから、画像公開用のWebサーバにブラウザを通じてSignalRのHubを呼び出すことでシャッター押下依頼を出す。 

2.サーバーは、スマホからの依頼を受けて、PCクライアント側のシャッター押下メソッドをHubを通じて呼び出す。

3.PCは、サーバに呼び出されたシャッター押下メソッドにより、カメラにシャッター押下指令を出す。

4.カメラはシャッターを押し、撮影画像をPCに転送する。

5.PC側のAPIは、画像がメモリバッファに準備ができれば、画像準備完了イベントを発火させ、FTPでサーバーへ画像を転送する。

6.FTP画像転送が終われば、PCはサーバーのHubメソッド呼び出しにて、ファイル名を通知する。

7.サーバーは、ブラウザ(スマホ側)に新しい画像のファイル名をHubを通じて通知する。

8.スマホ側は、ブラウザのImageタグで表示しているファイル名を通知されたものに変更し、ブラウザの画像をリロードすることで、撮影画像を表示する。

といった流れになります。

以下、サーバーの構築から、Webアプリやクライアントアプリ、ニコンSDKを使用するためのPC側のC#ソースなどを、順番に公開していきます。

非同期処理やソケット通信が感覚的に理解できるブログにしたいと思っています。

先は長いので、途中で息切れしないか心配ですが、頑張ってブログを更新していくつもりです。
お付き合いのほどよろしくおねがいします。


ご意見、ご質問何でも気軽に投稿ください。お待ちしています。

0 件のコメント:

コメントを投稿