Tutorial Videos and Webcams
Videos and Webcams in BoofCV
BoofCV focuses on image processing and computer vision algorithms and for the most part relies on other libraries for input and output. For example, BoofCV does not define image widgets but uses Swing instead. The same philosophy applies to capturing images from videos and webcams. Unfortunately the built in support that Java provides for reading videos and webcams is very limited.
The limited support that BoofCV provides itself for reading videos directly comes in the form of MJPEG videos and image sequence. MJPEG is a very simple video format that encapsulates a sequence of video images. MJPEG is not the most efficient format, but it is very easy to read and write. Its inclusion into BoofCV is primarily to provide video support to applets. An image sequence contained in a directly can also be read as if it was a video.
Third party libraries are required for reading webcams. Better support for integrating 3rd party libraries is still being worked on. There are currently no plans for providing support out of the box. The reason for this is that these 3rd party libraries often require compiling native code and configuring Java to reference the native libraries. Integrating such libraries into BoofCV by default would greatly increase its complexity.
Quick and Dirty
As previously mentioned BoofCV has only very limited support for videos. Let's say that you want to play your own video in one of BoofCV's examples. Because BoofCV by default only support MJPEG you need to convert your file into an MJPEG. This can be done by converting it into a sequence of jpeg images and then using the CreateMJpeg in BoofCV to create the MJPEG or using ffmpeg.
The easiest way in Linux to create an MJPEG from some other video format is using ffmpeg. Below is a command line example.
ffmpeg -i FILENAME -sameq example.mjpeg
Other flags can be added to resize the image or adjust image quality. There are a few videos where ffmpeg will produce an MJPEG which BoofCV cannot read, but this is not comon.
Third Party Options
The easiest way to integrate a 3rd party library with BoofCV is to read in a frame as a BufferedImage then convert it into a native BoofCV image format using ConvertBufferedImage. An alternative is to write a wrapper that implements SimpleImageSequence, which is used by several examples.
Video Libraries
- Java Media Framework (JMF)
- http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html
- Provided by Oracle and supports a few formats. Known for being old and poorly supported.
- Xuggler
- http://www.xuggle.com/xuggler/
- Wrapper around several native libraries.
- Not as well supported as it used to be.
- Ignore the ancient stable release and checkout the SVN code.
- SVN code is occasionally broken from my experience.
Webcams
- Video for Linux for Java (V4L4J)
- http://code.google.com/p/v4l4j/
- I have had good success with it in the past
- Xuggler
- http://www.xuggle.com/xuggler/
- Never used its webcam capabilities, but I believe it says it supports them.
If you know of some other options please post a message to BoofCV's message board (see sidebar link) letting us know about it! Especially if you have suggestions for Windows and MacOS.