やりたいと思っていながらしばらく手付かずになっていたことを再開しました。
随分以前にこのあたり
http://ameblo.jp/delphinus1024/entry-12125312766.html
http://ameblo.jp/delphinus1024/entry-12127878827.html
http://ameblo.jp/delphinus1024/entry-12135523008.html
で撮影データのポスト処理にOpenCVの機能を用いていろいろエフェクト的なことをやってみた。 いずれも手前味噌ながら今でも便利に使っているのですが。
今後追求してみたいのは、そこから一歩進んで後処理ではなく撮影時にOpenCVを活用すること。
撮影時に取得できる画像データをOpenCVで解析しながら、その結果をカメラや周辺リグにフィードバックできれば、そしてそれをうまく制御できれば人間の手操作では不可能な映像が作れるかもしれない。(もしくは空振りに終わるかもしれないが)
その際にハードルとなるのがDSLRとOpenCVの相性の悪さだったりする。
DSLR・PC間をUSBで接続するとしても、OpenCVは基本的にWebCamつまりUVC規格での接続が想定されており、一方DSLRはPTPデバイスもしくはストレージとして認識されるため直接はつながらない。裏技があるのかもしれないが。
gphoto2を介してファイル経由で間接的に取得する方法も考えられるが結構かったるい。
そこで少々値段が張るがこんな中華製品を密林で買ってみた。同類の製品の中では安価だしそこそこ定番商品のよう。
Seesii HDV-UH60 USB3.0 / USB2.0 1080P 60FPS HDMI to USB3.0 ビデオキャプチャドングル UUVC/UAC Windows Linux OS X
これは何かというと、HDMI信号をUSB3.0経由でUVCデバイスとしてMotion Jpegでキャプチャできるもの。
最大解像度はFull HDということなので今流行の4Kなどは取れないがとりあえず処理用データの解像度としては十分。
つまりDSLRのHDMI出力->本製品->USBケーブル->PCとつなげれば、DSLRを擬似WebCamとして動作させることができる。つまりOpenCVと直結できるということ。
最近のミドルエンド以上のDSLRならば外部録画用にクリーンHDMI出力をサポートしているものが多く、その信号をありがたく利用するということ。
折角なのでケースを開けてボードの部品構成を見てみる。
(以下本業の分野であり、個人的な備忘録を兼ねているため若干専門用語が並びますがご了承ください。)
当然だが必要最低限の構成。
HDMIからの入力はまずAnalogDevices ADV7611 (HDMI 1.4a Receiver)に入り24bit幅のYCbCrもしくはRGBに変換される。
次にヒートシンクで隠れているためチップ名は分からないがおそらくXilinx Zynq-7000 FPGAあたりではないかと推測される。
ボード上には解析&ROM書き込み用なのかFPGA用のJTAG端子も見えるので、Xilinxプラットフォームケーブルをつなげてみれば分かるのだが、時間も無いので自粛。
FPGAの横には画像を一旦保存するためのMicronのメモリチップがある。
FPGAの内部ではARMコアがADV7611の制御を行い、同時に受信した画像信号をjpeg圧縮して最終段のCypress CYUSB3014(通称FX3)のGPIFに入力される。
FX3は受信したjpgをMotion jpegに整形(これはFPGA内でやっている可能性もあり)してUVCプロトコルでPC側に送る。
以上がボードから想像される内部動作。
実際のところ、FPGAもFX3も無料で開発ツールが使えるしADV7611の仕様も公開されているので、もしこの製品の回路図が公開されていれば非常に安価で面白い画像処理ボードとしても使えるのに…。
そうなれば画像圧縮さえがんばれば、4K画像も送ることができるハードウェア仕様を満たしていると思われる。FX3の制御が気難しいのが難点だが。
閑話休題。
5D3のHDMI出力にとりあえずつなげてみる。キャプチャ機は使用していると結構熱くなる。内部の処理部分はFPGAを使用しているのでそれなりに電力消費が多そう。
あと、両端がAコネクタという変則的な付属のUSBケーブルは45cmほどと短く使いづらい。別途購入したほうがよさそう。
さて、LVをOnにしてWebCamで取得したFull HD画像をそのまま垂れ流すような簡単なOpenCVプログラムで表示させてみる。
cap.set(CV_CAP_PROP_FRAME_WIDTH,1920);
cap.set(CV_CAP_PROP_FRAME_HEIGHT,1080);
を忘れないように。
さすがにAptina(今はオンセミか)あたりのイメージセンサー+安レンズ搭載のWebCamとは格が違う画質と綺麗なボケ。被写体の埃は見なかったことにしてください。
LV On/Off時にはカラーバーのようなノイズのような変な画像がしばらく出るがしばらくすると安定する。
フレームレート計測もして見るとUSB3.0ではほぼ常時30fps、USB2.0でも取得可能だが一桁fpsくらい。
とりあえず問題なくOpenCV上で使えそう。
道具は揃ったので、これを使っていろいろ試行錯誤をしてみます。
またはこのままボツネタになるかもしれません。