画像RSS

2016年9月4日日曜日

JavaでWebカメラを制御する便利なAPI

 JavaでWebカメラを制御するためのAPIが存在し、「Webcam Capture in Java」で配布されている。 私がこのAPIの存在を知ったのは「Webcam Capture を使って Java から Webカメラ を簡単制御(キャプチャ・動体検知)する」という記事のおかげだが、使ってみると本当に簡単で便利だった。

 このAPIはJava6以降で動作し、当然ながら使用するにはWebカメラが必要である。ネットワークカメラも使えるらしい。「Webcam Capture in Java」によると、このAPIには次のような特徴があるという (下記の部分は前述のページを私が要約したものであり、参考にする際は自己責任でお願いします) 。

  • シンプルでスレッドセーフでノンブロッキングなAPI。
  • 他にソフトウェアを追加する必要なし。
  • マルチプラットフォーム。WindowsやLinux、Mac OSなどで動作する。また、様々なアーキテクチャをサポート。32ビット、64ビット、ARMで動作する。
  • 画像を備え付けのWebカメラから取得できる。USBで接続されたWebカメラも使える。ネットワークカメラも使用可能。
  • JMFやOpenCVなどの複数のキャプチャ用のフレームワークをサポート。
  • 一度コードを書いた後に別のドライバを使っても、そのドライバはWebcamDriverクラスによってラップされるため、コードを書き換える必要はない。
  • カメラ映像を表示するSwingコンポーネントが用意されている。複数のカメラから特定のカメラの映像を選んで表示できる。
なお、上記のサイトは全部英語で書かれている。正確な情報が欲しい方は頑張って和訳していただきたい。

 このAPIの使い方は「Webcam Capture を使って Java から Webカメラ を簡単制御(キャプチャ・動体検知)する」を読めばだいたい分かるはずである。 ここではその補足をする。詳細はAPI付属の仕様書を読んで把握してほしい。

 リアルタイムのカメラの映像を表示させたいときにはcom.github.sarxos.webcam.WebcamPanelクラスまたはcom.github.sarxos.webcam.WebcamViewerクラスのインスタンスを用いればいい。 WebcamPanelはjavax.swing.JPanelのサブクラスであり、WebcamViewerはjavax.swing.JFrameのサブクラスである。使い方はスーパークラスに準じる。 WebcamViewerではカメラの切り替えが可能である。 WebcamPanelは指定したWebカメラだけを対象にする。必要に応じて使い分けるといいだろう。

 また、Webカメラが取得できる画像の大きさはデバイスに依存するようである。com.github.sarxos.webcam.WebcamクラスのgetDeviceメソッドで com.github.sarxos.webcam.WebcamDeviceインターフェースというデバイスを抽象化したインターフェースが取得できる。 そのインターフェースのgetResolutionsメソッドで利用できる画像の大きさのリストを取得できる。 それから適当なものを選んで、WebcamクラスのsetViewSizeメソッドで取得したい画像のサイズを指定すればいい。 getResolutionsメソッドの返り値にないものを指定するとエラーが発生するため注意が必要である。

0 件のコメント:

コメントを投稿