Last week, José Alvarez of Xilinx (whose recently published tutorial video I hope many of you have already auditioned) emailed me a heads-up on an online article titled "Make Computers See with SimpleCV — The Open Source Framework for Vision". Authored by Anthony Oliver, Chief Technology Officer at Ingenuitas, the writeup definitely piqued my interest. First off, here are a few choice quotes from the H+ Magazine piece:
What is SimpleCV?” It is an open source computer vision framework that lowers the barriers to entry for people to learn, develop, and use it across the globe. Currently there are a few open source vision system libraries in existence, but the downside to these is you have to be quite the domain expert and knowledgeable with vision systems as well as know cryptic programming languages like C. Where SimpleCV is different, is it is “simple”. It has been designed with a web browser interface, which is familiar to Internet users everywhere. It will talk to your webcam (which most computers and smart phones have built in) automatically. It works cross platform (Windows, Mac, Linux, etc). It uses the programming language Python rather than C to greatly lower the learning curve of the software. It sacrifices some complexity for simplicity, which is needed for mass adoption of any type of new technology.
The applications for vision systems are almost limitless. We’ve included many type of examples included with the framework. A good example that comes with the software is a face detection demo. With SimpleCV it is only 15 lines of code and runs in a web browser. Other open source libraries may take 100’s of lines of code to accomplish the same thing and may require it’s own interface (though SimpleCV has that advanced functionality as well for those that want it). Another example is using a quarter for scale, where you can put a quarter in front the camera with something else, take the picture, the quarter is then used as a reference to measure other objects in the scene. Another example is motion detection for security. There are plenty more included as well.
Another topic to bring up that I haven’t seen any other vision libraries do is talk “over the cloud”. We decoupled the image acquisition from the image processing. We are able to use low cost ($30) webcam’s that are basically dumb terminals that sit on a network and push data up to the Internet. Since this technology can work in the the cloud, it means that you can start getting “zero installation” type of systems. Some of our demos showcase this, like our simple animation station. You can open a web page, start taking pictures and processing. And at the time of this article, we are working on a web based security camera that also works in your browser and will e-mail you the picture if motion is detected, and all you have to do is visit a web page.
A subsequent visit the SimpleCV website uncovered more clues. Specifically, the blog post associated with the v1.1 release indicates "we wrote our own blob detection library. So cvBlob is no longer a dependency. It seemed like it was running into too many issues so it was best we just integrated our own now." Fundamentally, as it turns out, SimpleCV is a Python "wrapper" around not only OpenCV but also "Freenect, PIL, Numpy & Scipy, ZXing, and libSDL". I was also reassured to see the following comment left by Anthony Oliver on the H+ Magazine article, in response to earlier criticism by a reader:
We in fact do wrapper OpenCV. We aren’t trying to replace OpenCV by any means. We are well aware of what the Willow Garage guys are doing, in fact our founder was out the a couple weeks ago, and I was chatting with them at NY Maker Faire this past weekend. They are doing some awesome things. We are only looking to make some of the awesome things they are doing easier to use.
And to that point, I also appreciated another comment Oliver made in that same post, "We have 1-click installs for all platforms. OpenCV you do not." But when I asked BDTI Senior Software Engineer and Embedded Vision Specialist Eric Gregori to give me his thoughts on SimpleCV, Eric wasn't as upbeat, noting "OpenCV already ships with Python bindings. In fact, there are a ton of Python/OpenCV examples available. I don't understand the benefit of SimpleCV."
So what do you say, readers? Is SimpleCV necessary to dramatically expand and accelerate the implementation of embedded vision technology, or does it replicate capabilities that already exist in OpenCV and other embedded vision APIs?