
SimpleCV – Computer Vision platform using Python - atilev
http://simplecv.org/
======
wyc
It's difficult to effectively use cv libraries (such as opencv) because in
order to approach new problems, understanding of the underlying theory and
methodology is often necessary. Example code can only go so far to teach the
user how to evaluate and adapt to new constraints. simplecv.org is down for me
right now, but I hope that it addresses this concern!

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/](http://www.robots.ox.ac.uk:5000/~vgg/hzbook/)

[2]:
[http://dl.acm.org/citation.cfm?id=551277](http://dl.acm.org/citation.cfm?id=551277)

[3]: [http://robots.stanford.edu/papers/montemerlo.fastslam-
tr.pdf](http://robots.stanford.edu/papers/montemerlo.fastslam-tr.pdf)

[4]:
[http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_dete...](http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_framework)

[5]: [http://en.wikipedia.org/wiki/Scale-
invariant_feature_transfo...](http://en.wikipedia.org/wiki/Scale-
invariant_feature_transform)

[6]:
[http://en.wikipedia.org/wiki/RANSAC](http://en.wikipedia.org/wiki/RANSAC)

~~~
swframe
I've worked on image recognition and find OpenCV too simple. I don't like
algorithms that work on the entire image without taking into account what is
being recognized. For example, if you have a combination of thick and thin
edges, you only want to erode the thick ones and you only want to erode the
thick edges until they are thin and smooth. If you posterize an image, you
don't want to cross regions separated by long smooth edges. You don't want to
blur away noise in the image because when the noise is localized, you can use
it to identify what the object is (similar to the way shazam uses high
frequencies to identify songs).

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.

------
therobot24
Unfortunately computer vision libraries and toolsets are the worst offenders
of making each algorithm a 'hammer' when traditional problems are not a
'nail'. A good example is "Detecting a Car"
([http://tutorial.simplecv.org/en/latest/examples/parking.html](http://tutorial.simplecv.org/en/latest/examples/parking.html)),
where the mean color is used to determine if a car is in the image. A nice
little exercise, but it oversimplifies the process. Each allows the user to
step in a few puddles and then advertises that you'll be able to swim in the
ocean.

~~~
anoncv
This statement is an oversimplification. Computer Vision libraries are
essentially Swiss army knives. If the person without reasonable understanding
of Computer Vision research thinks that he can solve the problem, that is the
person's problem. Again I wouldn't blame the naive software engineer who
thinks he can solve these problems, because our (extremely complex) visual
process makes it all seem very simple. Even Marvin Minsky thought he could get
his undergrad Gerry Sussman to “spend the summer linking a camera to a
computer and getting the computer to describe what it saw”. After almost 60
years we aren't very to close that. Sure, we can solve certain problems in
most scenarios (like face detection) or many relatively more complex problem
in limited variance situations (like machine vision problems). This is the
equivalent of a person who have learned C++ recently, using
iteration/recursion/design patterns for everything he sees.

~~~
therobot24
I honestly can't tell if you agree or disagree. My sentiment on the subject
was that CV libraries are good swiss army knives, but to continue the analogy
- you wouldn't tell someone that all you need to survive in the wilderness is
said swiss army knife.

------
gourneau
Check out this beard length detector I wrote in 22 lines of Python with
SimpleCV

[http://labs.radiantmachines.com/beard/](http://labs.radiantmachines.com/beard/)

~~~
pramalin
I'm looking to measure dimensions of objects using computer vision libraries.
I think it is impossible to do this without a reference scale in the same
image.

What is the unit of measure for line.length()?

~~~
gourneau
For my use it is just arbitrary. SimpleCV does have the ability to calibrate
cameras, which should give you what you want.

~~~
nightski
You can calibrate the camera, estimating the intrinsic params such as focal
length. But for size you would need two images and to know the location each
were taken relative to each other (extrinsic params). This is not impossible,
just more difficult than a simple calibration and photo snap.

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).

------
pchristensen
I'll put in a plug for the accompanying book:
[http://simplecv.org/book](http://simplecv.org/book)

Very clear, well written, for a complete CV novice.

~~~
kqr2
O'Reilly is currently having a 50% off sale on this ebook:

[http://shop.oreilly.com/product/0636920024057.do?code=WK5STA...](http://shop.oreilly.com/product/0636920024057.do?code=WK5STARS)

------
bliti
I have been working on CV with an emphasis on mobile phones/robotics. The big
issue is the lack of consistent documentation. It is either scattered all over
the web, or outdated. Been writing a document to address this, but it is still
not done.

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.

------
danso
I love OpenCV. Even with the slightly outdated and incomplete wrapper in Ruby,
you can still have a lot of fun with it.

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...](http://arnab.org/blog/so-i-suck-24-automating-card-games-using-opencv-
and-python)

~~~
ap22213
I agree. I recently used OpenCV to process some photos of some documents, and
it was very awesome. I particularly liked the python 'cv2' bindings. Not bad.
It was my first time really using NumPy, in a deep way, and it actually
performed decently.

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.

------
ahojnnes
For everyone interested in computer vision / image processing in Python,
[http://scikit-image.org/](http://scikit-image.org/) in combination with
[http://scikit-learn.org/](http://scikit-learn.org/) are also worth a look.

------
zk00006
Nice marketing but not much behind?

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?

------
tn13
Those who are giving brickbats to SimpleCV might be right but this seems an
extremely useful thing to me.

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.

------
bulte-rs
I'm not well versed in the usage of OpenCV; but I just can't get the fact that
most CV applications will require a more thorough understanding of the subject
(both mathematically and software-technically) in order to create something
more than a 'nice toy' (I'm waiting to be corrected here)

------
KaiserPro
I have to say that this book:
[http://shop.oreilly.com/product/9780596516130.do](http://shop.oreilly.com/product/9780596516130.do)

did a pretty good job of explaining everything for opencv proper.

~~~
boyaka
This was the text in my Computer Vision course. I agree it did a good job and
OpenCV was a lot of fun to work with. I would definitely pick it up again if I
had interest in this field.

------
captaincrowbar
The site seems to have been thoroughly slashdotted ... er, fireballed ... er,
hackernewsificated ... honestly, hasn't someone come up with a word yet for
when HN does this?

~~~
pbhjpbhj
Well, slashdotted is generic. It's got the "have you googled it on Bing" issue
but, good enough.

------
boyaka
Looks like this is to OpenCV as jQuery was to JavaScript.

------
kimonos
I like this!

------
anoncv
that site is HNed.

