1. 概要

通常、Javaはコンピュータハードウェアへの簡単なアクセスを提供しません。 そのため、Javaを使用してWebカメラにアクセスするのは難しいかもしれません。

このチュートリアルでは、Webカメラにアクセスして画像をキャプチャできるいくつかのJavaライブラリについて説明します。

2. JavaCV

まず、javacvライブラリを調べます。 これは、BytedecoによるOpenCVコンピュータービジョンライブラリのJava実装です。

最新のjavacv-platformMaven依存関係をpom.xmlに追加しましょう。

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.5</version>
</dependency>

同様に、Gradleを使用する場合、javacv-platform依存関係をbuild.gradleファイルに追加できます。

compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5.5'

セットアップの準備ができたので、 OpenCVFrameGrabberクラスを使用してWebカメラにアクセスし、フレームをキャプチャします

FrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start();
Frame frame = grabber.grab();

ここでは、デバイス番号を0として渡し、システムのデフォルトのWebカメラを指しています。 ただし、複数のカメラを使用できる場合は、2番目のカメラに1でアクセスでき、3番目のカメラに2でアクセスできます。

次に、 OpenCVFrameConverter を使用して、キャプチャされたフレームを画像に変換できます。 また、opencv_imgcodecsクラスのcvSaveImageメソッドを使用して画像を保存します。

OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
IplImage img = converter.convert(frame);
opencv_imgcodecs.cvSaveImage("selfie.jpg", img);

最後に、 CanvasFrame クラスを使用して、キャプチャされたフレームを表示できます。

CanvasFrame canvas = new CanvasFrame("Web Cam");
canvas.showImage(frame);

Webカメラにアクセスし、画像をキャプチャし、画像をフレームに表示し、2秒後にフレームを自動的に閉じる完全なソリューションを調べてみましょう。

CanvasFrame canvas = new CanvasFrame("Web Cam");
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

FrameGrabber grabber = new OpenCVFrameGrabber(0);
OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();

grabber.start();
Frame frame = grabber.grab();

IplImage img = converter.convert(frame);
cvSaveImage("selfie.jpg", img);

canvas.showImage(frame);

Thread.sleep(2000);

canvas.dispatchEvent(new WindowEvent(canvas, WindowEvent.WINDOW_CLOSING));

3. ウェブカメラキャプチャ

次に、複数のキャプチャフレームワークをサポートすることでWebカメラを使用できるwebsite-captureライブラリを調べます。

まず、最新の webcam-captureMaven依存関係をpom.xmlに追加しましょう。

<dependency>
    <groupId>com.github.sarxos</groupId>
    <artifactId>webcam-capture</artifactId>
    <version>0.3.12</version>
</dependency>

または、Gradleプロジェクトのbuild.gradlewebcam-captureを追加できます。

compile group: 'com.github.sarxos', name: 'webcam-capture', version: '0.3.12'

次に、Webcamクラスを使用して画像をキャプチャする簡単な例を書いてみましょう。

Webcam webcam = Webcam.getDefault();
webcam.open();

BufferedImage image = webcam.getImage();

ImageIO.write(image, ImageUtils.FORMAT_JPG, new File("selfie.jpg"));

ここでは、デフォルトのWebカメラにアクセスして画像をキャプチャしてから、画像をファイルに保存しました。

または、WebcamUtilsクラスを使用して画像をキャプチャすることもできます。

WebcamUtils.capture(webcam, "selfie.jpg");

また、 WebcamPanelクラスを使用して、キャプチャした画像をフレームに表示することもできます

Webcam webcam = Webcam.getDefault();
webcam.setViewSize(WebcamResolution.VGA.getSize());

WebcamPanel panel = new WebcamPanel(webcam);
panel.setImageSizeDisplayed(true);

JFrame window = new JFrame("Webcam");
window.add(panel);
window.setResizable(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setVisible(true);

ここでは、Webカメラのビューサイズとして VGAを設定し、JFrameオブジェクトを作成し、WebcamPanelコンポーネントをフレームに追加しました。

4. マーヴィンフレームワーク

最後に、Marvinフレームワークを調べて、Webカメラにアクセスして画像をキャプチャします。

いつものように、最新のmarvin依存関係をpom.xmlに追加します。

<dependency>
    <groupId>com.github.downgoon</groupId>
    <artifactId>marvin</artifactId>
    <version>1.5.5</version>
</dependency>

または、Gradleプロジェクトの場合、marvin依存関係をbuild.gradleファイルに追加します。

compile group: 'com.github.downgoon', name: 'marvin', version: '1.5.5'

セットアップの準備ができたので、 MarvinJavaCVAdapterクラスを使用して、デバイス番号に0を指定してデフォルトのWebカメラに接続しましょう。

MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter();
videoAdapter.connect(0);

次に、 getFrame メソッドを使用してフレームをキャプチャし、MarvinImageIOクラスのsaveImageメソッドを使用して画像を保存します。

MarvinImage image = videoAdapter.getFrame();
MarvinImageIO.saveImage(image, "selfie.jpg");

また、 MarvinImagePanel クラスを使用して、フレームに画像を表示することもできます。

MarvinImagePanel imagePanel = new MarvinImagePanel();
imagePanel.setImage(image);

imagePanel.setSize(800, 600);
imagePanel.setVisible(true);

5. 結論

この短い記事では、Webカメラへの簡単なアクセスを提供するいくつかのJavaライブラリを調べました。

最初に、OpenCVプロジェクトのJava実装を提供するjavacv-platformライブラリを調べました。 次に、 webcam-capture ライブラリの実装例を見て、Webカメラを使用して画像をキャプチャしました。 最後に、Marvinフレームワークを使用して画像をキャプチャする簡単な例を見てみました。

いつものように、すべてのコード実装はGitHub利用できます。