Best way to access web camera in Java

2019-01-12 21:44发布

问题:

I need to access web camera using Java. This is what I want to do

  1. Access web cam

  2. Now the user can see web cam working because his face is visible on screen (have heard some libs are there which doesn't show the video output of webcam)

  3. when user click save button, take a snapshot and save it

I have tried number of ways to do this, from a long time.

  1. JMF - Now it is dead
  2. FMJ - Now it is dead too
  3. VLCJ - too much because I am not creating a music/video player and it expect VLC to be installed
  4. Xuggler - too much and hard work
  5. JMyron - didn't work
  6. JavaFX - I thought it could do it, but seems like it can't

I am even satisfied if the library is just ONLY doing the above mentioned, because that's enough for me. But I expect it to be simple too. Really great if it is not using DLLs, because it is not platform independent if it does. Really appreciate if it can DETECT the camera, without manually passing the camera name and other info as have do in VLCJ (because there might be thousands of camera brands, so I can't create a list of thousand elements in it). And, I am creating a desktop application, not web app.

If you know a library like this, please be kind enough to let me know. Other libraries (which might not suit to all of my requirements, but suits to the basic requirement) also welcome. Please help

回答1:

This has been discussed on SO multiple times. Here are a few links to get you started:

SO: Capturing image from webcam in java?

SO: What is the best method to capture images from a live video device for use by a Java-based application?

openCVF applet: http://www.colorfulwolf.com/blog/2011/07/05/accessing-the-webcam-from-inside-a-java-applet/

config: http://ganeshtiwaridotcomdotnp.blogspot.in/2011/12/opencv-javacv-eclipse-project.html



回答2:

I think the project you are looking for is: https://github.com/sarxos/webcam-capture (I'm the author)

There is an example working exactly as you've described - after it's run, the window appear where, after you press "Start" button, you can see live image from webcam device and save it to file after you click on "Snapshot" (source code available, please note that FPS counter in the corner can be disabled):

The project is portable (WinXP, Win7, Win8, Linux, Mac, Raspberry Pi) and does not require any additional software to be installed on the PC.

API is really nice and easy to learn. Example how to capture single image and save it to PNG file:

Webcam webcam = Webcam.getDefault();
webcam.open();
ImageIO.write(webcam.getImage(), "PNG", new File("test.png"));