USB 接続された複数のカメラを同時制御するプログラムの開発
東海大学

総合科学技術研究所

横山直樹

１ ． ま え が き
実験結果としての静止画像あるいは動画をデジタル一眼レフカメラ等で記録することが行われることも多いが、実験のコントローラーとして PC が中心に据えられる場合には、これらの画像記録も PC に接続されたカメラにより PC による制御でキャプチャーすることが望ましい。こうした目的のために、カメラメーカーから提供される SDK(Software Development Kit)をベースとしてアプリケーションを開発することがある。
この時当然ながらカメラメーカーが違えば、SDK で提供される API(Application Program Interface)も違ってくることになり、広範囲のカメラに対応することは簡単ではない。しかし複数の SDK を包括するような、抽象的な Wrapper を用意することにより、個々の SDK に囚われずに、一般化、抽象化した形で API を呼び出すことができ、プログラム開発が簡単になる。こうした Wrapper は C++では多用されるが、本論文では Nikon
が提供する Nikon SDK および Canon が提供する EDSDK を包括するような Wrapper をまず作成し、それを用いてアプリケーションプログラムを開発したので、その経緯ないし内容について報告する。

２ ． プ ロ グ ラ ム 概 要
このプログラムは、Canon の EOS と PowerShot sx70hs および Nikon SDK でサポートされている
Nikon のカメラに対して、USB 接続された PC からリモート撮影する基本的な機能を提供するものである。それぞれ Camera API Package 内の EDSDK 13.10.00 および Nikon SDK の対応するバージョンでコントロール可能なカメラが対象である。 EDSDK は Canon の許諾を受けて同梱しているが、NikonSDK は対象カメラによって、モジュールが異なるので、所有している Nikon のカメラに対応しているものを 下記のようにダウンロードする必要がある。
Nikon 対象モジュールの⽤意
1． https://sdk.nikonimaging.com/apply/へアクセス。
機種名に対象のカメラがあれば、対応可能のはずである。
2.

利⽤規約を読んで、“同意して次へ”をクリック。

3.

SDK 申請⼿順のご説明が表⽰されるので、メールアドレス⽤意して、”次へ“をクリック。

4.

メールアドレスを⼊⼒して、“送信する”をクリック。

5.

メール送信完了 のメッセージが出るので、“ニコン SDK 提供⼿続き⽤URL のご連絡”というタイトルで届いたメールに記載された URL をクリック。
6.

カテゴリー（⼀番上）を選んで“次へ”をクリック。

7.

“対象機種“を選んで、次の画⾯で必要事項を選んでダウンロード。

ダウンロードしたファイルを解凍して、D7500 の場合ならば、
S-SDKD7500-002BF-ALLIN¥Module¥Win¥Binary Files¥x86 にある、この⼆つのファイルを Camera Remote Control と同じ階層に置く。これは D7500 の場合なので、機種が異なる場合は、適宜読み替える必要がある。Type00??.md3 の??の番号が機種によって変わる。

３ ． 基 本 的 使 用 方 法
メインの操作フォームを以下に⽰す。下図は開発中のもので最終的なものとは異なる可能性がある。

上の例では3台のカメラ（Canon PowerShot SX70 HS, Nikon D7500, Canon EOS 5D Mark III）が認識されており、プルダウンメニューから選択したPowersShotを対象に各種の操作が可能である。

Take Picture ボタン カメラのシャッターを切り、得られた画像をボックスに表⽰
To File ボタン カメラのシャッターを切り、得られた画像を PC 側にファイルセーブ
上記は、カメラのレンズ本体の設定が AF の場合、合焦するまでシャッターが切れない。なんらかの理由でシャッターが切れない時は、capture error となる。
Compression and/or Qualityは、画像圧縮の⽅式と画質を⽰す。Canon か Nikon かで内容が異なり、カメラ本体のダイアルでの設定で変更できる範囲が変わる。 Nikon の場合は、すぐ下の ImageSize も変更できる。このドロップダウンメニューで、 Loss less ???+Jpeg”というような場合は、⼆つのファイルを扱う。画⾯に表⽰されるのは、2番⽬に指定した形式であるが、ここで OS 側が RAW（canon だと CR2 とか CR3,Nikon だとNEF）ファイルに対応しており、デスクトップでサムネイル画像が表⽰されたり、イメージビューワーで画像が表⽰できるような環境(例えば Windows 10 1903 や Nikon Codec がインストールされている場合には)このアプリケーションでも表⽰可能である。サポートされていない画像形式を表⽰しようとすると、その旨の画像が表⽰される。To File の場合は、 PC 側に⼆つの画像がセーブされる。特に RAW 形式の画像はファイルサイズが⼤きいので、右側下のプログレスバーが右側に伸びきってから次の動作を⾏うことを推奨する。動画の場合でも同様である。基本的には、表⽰する場合も、ファイルセーブする場合も、カメラ側には画像は残らない。ただしNikon の動画だけは SDK 経由の削除ができないので放置となる。
LiveView ボタンでライブビューを開始できる。ライブビューを表⽰しながら、シャッターを切ることももちろん可能で動画も撮影できる。またメインのフォームの⼤きさは⾃由に拡⼤縮⼩可能なので、⼤画⾯でフォーカスの確認ができる。ライブビュー時のオートフォーカス⽅式はドロップダウンメニューから選択できる。Nikon の場合、AF-F で常にフォーカスを合わせることもできる。その際のフォーカスエリアも選択できる。
Movie ボタンで、動画撮影の on/off ができる。カメラ本体のダイアルやスイッチの設定で動画撮影ができないことがある。詳細はカメラのマニュアルを参照のこと。
Cap_ALL ボタンで、認識されている全てのカメラで TakePictureToFile 動作ができる。撮影タイミングはほぼ同時であるが、Nikon->Canon の順でシャッターが切れる。複数台のカメラ配置やら構図で⾊々と応⽤ができるかと思われる。
Capm_....ボタンで、認識されている全てのカメラで同時に動画記録が可能である。こちらもカメラ配置やら構図で⾊々と応⽤ができるかと思われる。

４ ． 作 成 動 機
もともと EDSDK で EOS カメラをコントロールするプログラムを⻑年書いていたが、アプリケーションを迅速に作るために、EDSDK ⽤の Wrapper を書き、その上にアプリケーションの“ガワ”(UI)を被せる形の開発⽅法へシフトしている。同機能の Wrapper を Nikon のカメラに対しても書くことにより、両カメラに対応可能なアプリケーションの開発が可能である。UI 部分も Windows 上であれば、MFC で書いてもいいし、C++builder の Firemonkey で書いても同じ Wrapper がそのまま使える。実際の開発には後者を⽤いた。例えば、カメラのシャッターを切り、得られた jpeg 画像を Form1 に表⽰するには、 実際のコードをそのまま引⽤すると、Firemonkey での例になるが、TMemoryStream* ImageStream = new TMemoryStream;
TBitmap *jpg = new TBitmap(); ＊下記注
ImageStream->WriteBuffer(data, size); ImageStream->Position = 0;
try {jpg->LoadFromStream(ImageStream);} catch (Exception &E) {エラー画像の表⽰}Form1->Image1->Bitmap->Assign(jpg); delete ImageStream;delete jpg; free(data);＊元々のソースの変更が⾯倒なので、jpg という変数であるが、実際は TBitmap 型であり、扱えるのは前述のように、jpeg だけではない。
で可能である。ま、MFC でも少しだけ⼿間が余計にかかるが、同様に⽐較的簡単に表⽰できるので、EDSDKの細かい⼿順や、Nikon の capability 云々に全く触れずに開発できる。表⽰部分を OpenCV で⾏い、種々の画像処理を⾏うことも可能である。御興味のある⽅には、ソースコードの提供も可能であるから、御連絡願いたい。

５ ． 結 論
Nikon SDKとCanonのEDSDKを包括するようなWrapperを書き、それをさらに統括するControllerを記述したことにより、複数台のカメラをリモート制御するプログラムが⽐較的簡単に書けるようになった。これらのクラスを利⽤することで独⾃のアプリケーションが⽐較的短時間に作成可能となった。
参考⽂献[1] Camera Remote Control Vector ライブラリ https://www.vector.co.jp/soft/winnt/hardware/se520243.html＊本論⽂で紹介しているプログラムからcap_all,capm機能を省いたプログラム