Computer vision is seriously cool technology but it takes a lot of processing power, it'd be nice to give your next microprocessor project the power to identify motion and color, but something like an Arduino would struggle to keep up. What you can do is have a dedicated processor do the heavy-lifting and then pipe that data to the Arduino, and that's exactly what the Pixy - CMUcam5 does. The Pixy is a fully programmable embedded computer vision sensor. The main processor is the NXP LPC4330 32bit dual core ARM processor connected to an OmniVision 9715 image sensor.
Pixy uses a hue-based color filtering algorithm to detect objects. Most of us are familiar with RGB (red, green, and blue) to represent colors. Pixy calculates the hue and saturation of each RGB pixel from the image sensor and uses these as the primary filtering parameters. The hue of an object remains largely unchanged with changes in lighting and exposure. Changes in lighting and exposure can have a frustrating effect on color filtering algorithms, causing them to break. Pixy's filtering algorithm is robust when it comes to lighting and exposure changes and significantly better than previous versions of the CMUcam.
Pixy remembers up to 7 different color signatures, which means that if you have 7 different objects with unique colors, Pixy's color filtering algorithm will have no problem identifying them. Pixy can find literally hundreds of objects at a time. It uses a connected components algorithm to determine where one object begins and another ends. Pixy then compiles the sizes and locations of each object and reports them through one of its interfaces (e.g. SPI).
Pixy is fast. The dual core ARM processor is able to process an entire 640x400 image frame every 1/50th of a second (20 ms). This means that you get a complete update of all detected objects' positions every 20 ms. At this rate, tracking the path of falling/bouncing ball is possible. (A ball traveling at 30 mph moves less than a foot in 20ms)
Pixy supports mutliple interfaces. The output data is available through one of serval interfaces: UART, SPI, I2C, digtial out or analog out. So your Arduino or other microcontroller can talk easily with Pixy and still have plenty of CPU available for other tasks.
It's possible to hook up multiple Pixys to your microcontroller -- for example, a robot with 4 Pixys and 360 degrees of sensing. Or use Pixy without a microcontroller and use the digital or analog outputs to trigger events, switches, servos, etc.
PixyMon is an application that runs on your PC or Mac. It allows you to see what Pixy sees, either as raw or processed video. It also allows you to configure your Pixy, set the output port and manage color signatures. PixyMon communicates with Pixy over a standard mini USB cable.
PixyMon is great for debugging your application. You can plug a USB cable into the back of Pixy and run PixyMon and then see what Pixy sees while it is hooked to your Arduino or other microcontroller -- no need to unplug anything. PixyMon is open source, like everything else. It's written using the Qt framework.
Note: Mini-B USB cable is not included. You can get one here.
- Fully open source and re-programmable
- Pixy supports mutliple interfaces:
- Digital ouput
- Analog output
- 720p HD resolution (1280 x 800) OV9715 CMOS WXGA HD image sensor
- NXP LPC4330, 204 MHz, dual core CPU, 264K bytes RAM, 1M bytes flash
- Image processing rate of 50 frames per second (640x400)
- Lens field-of-view: 75 degrees horizontal, 47 degrees vertical
- Lens type: standard M12 (several different types available)
- PixyMon for viewing images on the PC, configure the Pixy, set the output port and manage color signatures.
- Power consumption: 140 mA typical
- Power input: USB input (5V) or unregulated input (6V to 10V)
- 2.1" x 2.0" x 1.4" (54 x 51 x 35mm)
- Weight: 27 grams
- Pixy CMUcam5 Board
- Screws and brackets (Pan/Tilt Mechanism NOT included)
- Arduino interface cable