Why should I use an OpenMV Cam and not the Raspberry PI?
Our goal with the OpenMV Cam is to provide you with an Arduino like experience when dealing with computer vision. So, we made the OpenMV Cam a low power module so you could run it from your computer's USB port. We made it require no configuration so you could get up and running in minutes. And, we made it small so you could put it anywhere.
If you're just looking for raw performance, where power consumption, ease-of-use, and size are not a factor, then Single Board Computers (SBCs) like the Raspberry PI are what you want to buy. We're not trying to win the performance race. But, when power consumption, simplicity, and size matter then you want an OpenMV Cam.
When you buy an OpenMV Cam you're helping to support the development of easy-to-use machine vision for the masses. Ultimately we want to offer super-small ultra-low cost OpenMV Cams that can easily be embedded in products like you'd do with PIR motion detector sensors. We're trying to make the future where you can easily put a camera in everything possible.
How low power is the OpenMV Cam?
The OpenMV Cam consumes about 100 mA while idle and 140 mA when processing images. This means your OpenMV Cam can easily run off of your USB port. No power brick needed.
In future, we'll be able to lower the idle and active power consumption as we optimize the firmware to put the processor into low power modes when it has nothing to do. For example, we'll be able to save 20 mA off of the idle power consumption by turning the camera module off automatically when the OpenMV Cam is doing nothing. Additionally, the STM32 line of microcontrollers we use all support tons of features to optimize power consumption that we just need to take advantage of.
Because we're using a MicroPython you have total control over power consumption so you can deploy OpenMV Cams easily in power sensitive applications. Need to draw less than 1mA? Once we enable sleep modes we'll be able to bring the power consumption below the 100 uA threshold while waiting on an external I/O pin interrupt.
How is the OpenMV Cam easy to use?
How long does it take to blink an LED on a brand new Arduino? Well, you install the Arduino IDE on your computer, plug in your Arduino, open an example script, and you're done. So, less than 5 minutes.
How long does it take to track a colored object on a brand new OpenMV Cam? Well, you install the OpenMV IDE on your computer, plug in your OpenMV Cam, open an example script, and you're done. So, less than 5 minutes.
How long does it take to track a colored object on a brand new single board computer (SBC)? Well, first you need to install your OS on an SD card. Then boot up and login to your SBC which may be difficult if you don't have a screen for it. Then you need to connect it to the internet and install OpenCV... and ... and ... and ... etc.
I might have left out some steps above, but, the point is that with an OpenMV Cam you're getting an Arduino like experience for working with machine vision. That is, we're focused on making it super simple for you to get machine vision applications up and running that can easily interact with the real-world.
Why program in Python and not C/C++?
That's a good question. If MicroPython didn't exist before OpenMV was started it may have been developed so you'd have to program it in C/C++. If you programmed your OpenMV Cam in C/C++ we would have been able to use the Arduino Core, unused library calls would have been optimized out, and your code would run faster.
However, one problem, one big problem would remain - dynamic memory management. In C/C++ this has to be done explicitly. So, deleting complex data structures would not be as easy as in Python. Of course, we could have created complex classes to get around these issues. But, MicroPython was available and solves this problem so we built upon it instead.
It's important to understand that most machine vision functions/methods return a list of data structures. Some of these data structures may be lists too themselves. Iterating through lists, sorting, filtering, etc. are all taken care of by MicroPython somewhat magically whereas in C/C++, without tons of Qt like magic, the user must get very involved in making sure their code is right and that they don't leak memory, dereference a bad pointer, or etc. As we've said previously we have a goal of making the system easy-to-use and C/C++ definitely would not be easy for beginner programmers.
Isn't Python slow compared to C/C++?
Yes, Python is slow compared to C/C++, but, all of our algorithms are written in C. Python is just used as the top level interface to make coding easy. Additionally, all peripheral control is written in C too. Python again is just used as the top level interface to make coding easy.
Note that the MicroPython operating system compiles your Python script into byte code before executing it (like on your PC). So your OpenMV Cam isn't wasting tons of time parsing the script over and over.
Anyway, if you want to access memory directly or if you need more speed for a custom algorithm then MicroPython has you covered. First, MicroPython allows you to directly access any memory location in the OpenMV Cam at any time if you need to play with register settings. Second, MicroPython allows you to write native ARM assembly code that can be executed in your Python script like a function call. Third, the OpenMV Cam's firmware is Open Source and you can freely modify and extend it with new custom functionality in C and then flash the new firmware onto your OpenMV Cam.
Are you using OpenCV?
No, we wrote all of our machine vision algorithms ourselves. While powerful, OpenCV is designed for a computer running Windows/OSX/Linux. But, your OpenMV Cam isn't running any OS and instead gives you bare-metal control with MicroPython - so, OpenCV isn't compatible in various ways.
Anyway, we're fine with this situation. Implementing machine vision algorithms is fun and interesting. Moreover, we can optimize them for the for the STM32 line of microcontrollers so that we can do things like Face Detection with only ~80 KB of RAM.
One final note, if you're looking to write your own custom algorithms in C on the OpenMV Cam you'll find our code is very easy to modify and extend. And, if you want to share your work you can send us a pull request with your changes and we may incorporate it into the main firmware.
Is the OpenMV Cam open-source?
Yes, open is in our name. All of our source code is published online along with our schematics and board files on our GitHub Project. So we're an open-source software and hardware project. As for re-programming your OpenMV Cam's firmware you'll find the instructions for how to do that on our GitHub Wiki.
Additionally, all of our code is MIT licensed. So, do whatever you feel like with it. We'd love for a community to build up around the OpenMV code base to help make it better than it currently is.
Now for the big question - will we remain open source if we become popular and knock offs start to appear? Well, we hope to discourage that kind of activity as much as possible by continually reducing the price of the OpenMV Cam and shrinking it in the future versions. We want to make the system small enough that it becomes more like a staple part that companies can embed in products verus just a dev board like it is right now (of course we'll always have a dev board version too).
Why isn't the resolution Ultra Uber HD++?
Our goal is to make cheap, low-power, and easy-to-use machine vision modules. And... surprisingly enough, for most machine vision applications more resolution doesn't actually help but in fact hurts. A 640x480 image takes 4X more processing power to work on at the same frame rate than a 320x240 image. So, unless there's a specific reason you need the increased resolution then you're just slowing your frame rate down. For example, Face Detection is implemented using an algorithm that will generate multiple matches for the location of a face in an image that all overlap each other like a person repeatedly drawing a box many times around someone's face. We then average all the detected overlapping boxes together before returning the result. So in this case additional resolution is more or less worthless for precision since the algorithm outputs a noisy result that has to be filtered. Thus, after you have enough resolution more doesn't really help unless you need to resolve additional detail at farther distances which can easily be accomplished by just using a zoom lens.
Anyway, for the TL;DR folks more resolution would have meant using a more expensive camera module and a more expensive power hungry processor without actually giving you substantially better machine vision results. Now, you could take higher quality pictures and video though, but, as stated previously our goal is to make cheap, low-power, and easy-to-use machine vision modules.
All the above said, your OpenMV Cam can take decent enough pictures and video for security camera purposes. Ultra high definition video is nice but not a necessity if you just need to quickly record something happening. Best of all, with the OpenMV Cam you have total control over taking pictures and recording video so you can easily run machine vision algorithms on snapshots and then markup the snapshots before saving them.
Can you make the OpenMV Cam cheaper?
As we sell more and more units and grow the company we will be able to do this. We're not venture funded right now so we're selling our products at prices that allow the company to function without anyone taking a salary. All capital is re-invested back in the company. Getting the board costs down to insanely cheap prices will happen as OpenMV grows. Please buy some of our products today to make that a reality.