SimpleCV – Computer Vision platform using Python
simplecv.org
simplecv.org
The principles of computer vision are not too difficult to grok, requiring only knowledge of geometry and basic linear algebra. Two popular (dated, but still relevant) introductory texts are referenced to below [1] [2]. However, papers describing techniques that work in practice are often dense reads involving concepts from signal processing, control theory, and probability (e.g., [3]).
I personally enjoy learning about simple techniques that are also very effective in practice (e.g. Viola-Jones detection [4], SIFT points [5], RANSAC [6]), and I hope that simplecv.org might go over these in detail too.
[1]: http://www.robots.ox.ac.uk:5000/~vgg/hzbook/
[2]: http://dl.acm.org/citation.cfm?id=551277
[3]: http://robots.stanford.edu/papers/montemerlo.fastslam-tr.pdf
[4]: http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_dete...
[5]: http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...
This is kind of a pattern with CV: it's still far more "art" than "science" at this point.
http://szeliski.org/Book/ http://www.cse.usf.edu/~r1k/MachineVisionBook/
OpenCV, simpleCV etc are very useful libraries for toying around with images. You can get interesting results without a lot of effort. But the more serious you get about image recognition, the more you find that you can't use them globally across the image. Finding the yellow car in the parking spot is a good example of the usefulness of the library and also its simplistic capabilities. It recognized a yellow patch in the image and it doesn't recognize a car in a general way. When you're ready to write code to recognize a car, you'll probably find you can't use openCV libraries.
What has worked amazingly well for me, is to create a model of the image areas and then apply transformations based on the model. If you have a sharp foreground and a blurry background, don't run the recognition algorithms that rely on sharp edges on the blurry background.
It's pretty clear that it's only trying to look for a specific car, in a specific spot. And it's obvious that they're taking advantage of the car's bright color to do this, which isn't generally applicable.
It's a toy algorithm, but it's approachable for somebody with no CV experience.
Clearly.
> Most real-life problems are going to be addressable using similar techniques.
Nope.
True object recognition would require strong AI. Every real life vision system is a compromise that makes many assumptions about its input. You'd be foolish to reach for something like SIFT if you really know that the car is always yellow and it always parks in the same 200x200px square.
What is the unit of measure for line.length()?
On top of that, you will have to be able to identify the object you are trying to measure (unless it is a manually driven process).
Very clear, well written, for a complete CV novice.
http://shop.oreilly.com/product/0636920024057.do?code=WK5STA...
If you want to play with CV, just get a Raspberry pi, the camera module, and have fun. The Rpi makes it easy to move it around without much trouble. You can even add CV to many different appliances with the Rpi.
This was posted on HN some time ago and remains one of my favorite creative uses of OpenCV: "So I Suck At 24: Automating Card Games Using OpenCV and Python"
http://arnab.org/blog/so-i-suck-24-automating-card-games-usi...
But, that said, after reading all the OpenCV posts on Stack Overflow and also going through a ton of OpenCV tutorials, I found that the library couldn't meet my needs, in a lot of ways. (Apparently, processing text documents from camera images is a lot harder than I thought!) So, now I'm off reading research papers on image processing, like I don't have anything better to do.
This library seems to be great for fast exploration of new concepts. So I installed it and tested. I went through a small tutorial and tried to load an image from internet and display, unfortunately it didn't work. Connection failed, and image window showed up but no content... This is rather disappointing, and I was really expecting from this library that it will work out of box.
Anybody else with the same experience?
In the robotics courses we often build robots that pick up balls etc. So far we used either openCV or Matlab for image processing but generallly turned out to be pathetic solutions given the steep learning curve with openCV.
I will surely give a try to SimpleCV.
did a pretty good job of explaining everything for opencv proper.