What is it ?
VideoPipe is an application that allows a user to visually connect and manipulate videoprocessing modules to create a realtime procedural and configurable processing pipeline for video streams. It allows the user to experiment in an intuitive way with processing modules and tweak their parameters while the system is running, making the development and prototyping of video processing pipelines faster and easier.
Who is it for ?
After having used the OpenCV library extensively for the various image processing applications that I have been involved in (robot stuff, exhibition stuff, fun stuff) I realized that a lot of my time was being spent in visualizing the various steps of my processing “pipeline” and often bugs and errors would elude me for the longest time because my process wasn’t as transparent and configurable as it could have been. That is part of my inspiration to make this software, to make prototyping videoprocessing applications easier.
Another motivation was to open up the very powerful library of OpenCV (and possibly others) to people that are curious and enthusiastic about playing with real-time video processing but might not have access to it for any reason or other. Hopefully it will help people get started what I think is one of the more rewarding programming tasks because of its visual nature and the quick feedback cycle you can experience from playing with it.
Where do I get it ?
The application itself is hosted on SourceForge and you can download it from there:
If you experience any trouble with the application or have feature requests, please post them in the discussions on the sourceforge page.
Remember to check out the credits at the bottom of the page to learn about the awesome libraries that make this application possible.
How does it work ?
Because of the highly visual nature of this application I think video tutorials are by far the best way to describe and showcase it’s functionality, enjoy!
A quick tutorial that goes through the basics of the application, how to add modules, connect them, remove them, save a configuration and load a previously saved configuration. It also describes the visual features of the application as well as showcasing just a few of the modules.
In this tutorial I simply demonstrate the functionality of various modules that have already been implemented and are included in the application.
Connect to Processing
This tutorial shows how to easily connect VideoPipe with the Processing programming language and editor so that users of Processing can enjoy the powerful videoprocessing capabilities of VideoPipe with the flexibility of the Pocessing/Java language to further manipulate the video.
Using Python scripts
This tutorial demonstrates how to use Python scripts to quickly prototype processing modules and even edit them with the application running and see the results of changing lines of code instantly in the application.
Writing your own modules
This tutorial shows how you can make your own modules and import them into the VideoPipe application by simply making a Java class that extends a basic Module class, compile and jar the bytecode up and drop the jar in a certain folder.
Currently working on this one…
This application mostly provides a framework to work with images but relies heavily on external libraries and projects for its functionality.
- My friend Julián Hernández Muñoz for working with me on the underlying image processing library
- The actual underlying image processing is done by a library called OpenCV (http://opencv.willowgarage.com/wiki/)
- The graphics in the user interface are created with the Processing core library (http://processing.org/)
- The backend of the graphics relies on OpenGL bindings for Java provided by the JOGL project (http://jogamp.org/jogl/www/)
- The UI widgets that are used for the parameter modules are provided by the controlP5 library (http://www.sojamo.de/libraries/controlP5/)
- The networking is handled by an OSC library called NetUtil (http://www.sciss.de/netutil/)
- The blob-tracking function was provided by the Hypermedia OpenCv project (http://ubaa.net/shared/processing/opencv/)
- The Python scripting functionality depends on the Jython library that integrates Python with Java (http://www.jython.org/)