The OpenMV Cam is a small, low power, microcontroller board which allows you to easily implement applications using machine vision in the real-world. You program the OpenMV Cam in high level Python scripts (courtesy of the MicroPython Operating System) instead of C/C++. This makes it easier to deal with the complex outputs of machine vision algorithms and working with high level data structures. But, you still have total control over your OpenMV Cam and its I/O pins in Python. You can easily trigger taking pictures and video on external events or execute machine vision algorithms to figure out how to control your I/O pins.
The OpenMV Cam H7 is 2X more powerful than OpenMV Cam M7 and features removable camera modules for global shutter and thermal vision support in addition to a standard rolling-shutter color camera sensor.
**The header pins are provided and will need to be soldered to the PCB yourself.
The OpenMV Cam features:
- The STM32H743VI ARM Cortex M7 processor running at 400 MHz with 1MB of RAM and 2 MB of flash. All I/O pins output 3.3V and are 5V tolerant. The processor has the following I/O interfaces:
- A full speed USB (12Mbs) interface to your computer. Your OpenMV Cam will appear as a Virtual COM Port and a USB Flash Drive when plugged in.
- A μSD Card socket capable of 100Mbs reads/writes which allows your OpenMV Cam to record video and easy pull machine vision assets off of the μSD card.
- A SPI bus that can run up to 100Mbs allowing you to easily stream image data off the system to either the LCD Shield, the WiFi Shield, or another microcontroller.
- An I2C Bus, CAN Bus, and an Asynchronous Serial Bus (TX/RX) for interfacing with other microcontrollers and sensors.
- A 12-bit ADC and a 12-bit DAC.
- Three I/O pins for servo control.
- Interrupts and PWM on all I/O pins (there are 10 I/O pins on the board).
- And, an RGB LED and two high power 850nm IR LEDs.
- A removable camera module system allowing the OpenMV Cam H7 to interface with different sensors:
- The OpenMV Cam H7 comes with a OV7725image sensor is capable of taking 640×480 8-bit Grayscale images or 640×480 16-bit RGB565 images at 60 FPS when the resolution is above 320×240 and 120 FPS when it is below. Most simple algorithms will run at above 60 FPS. Your image sensor comes with a 2.8mm lens on a standard M12 lens mount. If you want to use more specialized lenses with your image sensor you can easily buy and attach them yourself.
- For professional machine vision applications you can buy our Global Shutter Camera Module.
- For thermal machine vision applications you can buy our FLIR Lepton Adapter Module.
- A LiPo battery connector compatible with 3.7V LiPo batteries commonly sold online for hobbyist robotic applications.
For more information about the OpenMV Cam please see our documentation.
Applications
The OpenMV Cam can be used for the following things currently (more in the future):
- Frame Differencing
- You can use Frame Differencing on your OpenMV Cam to detect motion in a scene by looking at what’s changed. Frame Differencing allows you to use your OpenMV Cam for security applications. Checkout the video of the feature here.
- Color Tracking
- You can use your OpenMV Cam to detect up to 16 colors at a time in an image (realistically you’d never want to find more than 4) and each color can have any number of distinct blobs. Your OpenMV Cam will then tell you the position, size, centroid, and orientation of each blob. Using color tracking your OpenMV Cam can be programmed to do things like tracking the sun, line following, target tracking, and much, much, more. Video demo here.
- Marker Tracking
- You can use your OpenMV Cam to detect groups of colors instead of independent colors. This allows you to create color makers (2 or more color tags) which can be put on objects allowing your OpenMV Cam to understand what the tagged objects are. Video demo here.
- Face Detection
- You can detect Faces with your OpenMV Cam (or any generic object). Your OpenMV Cam can process Haar Cascades to do generic object detection and comes with a built-in Frontal Face Cascade and Eye Haar Cascade to detect faces and eyes.
- Eye Tracking
- You can use Eye Tracking with your OpenMV Cam to detect someone’s gaze. You can then, for example, use that to control a robot. Eye Tracking detects where the pupil is looking versus detecting if there’s an eye in the image.
- Optical Flow
- You can use Optical Flow to detect translation of what your OpenMV Cam is looking at. For example, you can use Optical Flow on a quad-copter to determine how stable it is in the air. See the video of the feature here.
- QR Code Detection/Decoding
- You can use the OpenMV Cam to read QR Codes in it’s field of view. With QR Code Detection/Decoding you can make smart robots which can read labels in the environment. You can see our video on this feature here.
- Data Matrix Detection/Decoding
- The OpenMV Cam H7 can also detect and decode data matrix 2D barcodes too. You can see our video on this feature here.
- Linear Barcode Decoding
- The OpenMV Cam H7 can also decode 1D linear bar codes. In particular, it can decode EAN2, EAN5, EAN8, UPCE, ISBN10, UPCA, EAN13, ISBN13, I25, DATABAR, DARABAR_EXP, CODABAR, CODE39, CODE93, and CODE128 barcodes. You can see our video on this feature here.
- AprilTag Tracking
- Even better than QR Codes above, the OpenMV Cam H7 can also track AprilTags at 160×120 at up to about 12 FPS. AprilTags are rotation, scale, shear, and lighting invariant state-of-the-art fidicual markers. We have a video on this feature here.
- Line Detection
- Infinite line detection can be done speedily on your OpenMV Cam at near max FPS. And, you can also find non-infinite length line segments too. You can see our video of this feature here.Additionally, we support running linear regressions on the image for use in line following applications like this DIYRobocar.
- Circle Detection
- You can use the OpenMV Cam H7 to easily detect circles in the image. See for yourself in this video.
- Rectangle Detection
- The OpenMV Cam H7 can also detect rectangles using our AprilTag library’s quad detector code. Checkout the video here.
- Template Matching
- You can use template matching with your OpenMV Cam to detect when a translated pre-saved image is in view. For example, template matching can be used to find fiducials on a PCB or read known digits on a display.
- Image Capture
- You can use the OpenMV Cam to capture up to 640×480 Grayscale/RGB565 BMP/JPG/PPM/PGM images. You directly control how images are captured in your Python script. Best of all, you can preform machine vision functions and/or draw on frames before saving them.
- Video Recording
- You can use the OpenMV Cam to record up to 640×480 Grayscale/RGB565 MJPEG video or GIF images (or RAW video). You directly control how each frame of video is recorded in your Python script and have total control on how video recording starts and finishes. And, like capturing images, you can preform machine vision functions and/or draw on video frames before saving them.
Finally, all the above features can be mixed and matched in your own custom application along with I/O pin control to talk to the real world.
Schematic & Datasheets
- OpenMV Cam H7 Datasheet (.pdf)
- OpenMV Cam Schematic (.pdf)
- Eagle Schematic (.sch)
- Eagle Board (.brd)
- Processor Datasheet: STM32H743VI (.pdf)
- Camera Datasheet: OV7725 (.pdf)
- Regulator Datasheet: PAM2305AAB330 (.pdf)
What can I do with an OpenMV Cam?
You can build a color tracking robot that’s capable of tracking colored objects in the field of view!
Or build a line following robot for competitions!
Or build your own DIY Microscope.
Major Features
Multi-Blob Color Tracking – OpenMV Cam’s have a lot of features. But, folks mainly buy them for color tracking. The OpenMV Cam H7 blows away the OpenMV Cam M7 in this regard easily hitting 80 FPS or more making it perfect for building your own DIY Robocar.
In particular, the OpenMV Cam H7 can detect an unlimited number of blobs per frame found by segmenting the image using up to 16 color thresholds so you can do things like color code tracking. After detecting all the color blobs in the frame the OpenMV Cam H7 will then merge overlapping blobs. Our algorithm returns the bounding box size, centroid, orientation, and more for each blob in the frame. Best of all, picking color thresholds is easy using our Threshold Editor tool in OpenMV IDE.
April Tag, QR Code, Bar Code, and Data Matrix Decoding Support – The OpenMV Cam H7 can track April Tags, decode QR Codes, read every type of Bar Code, and can also parse data matrices too just like the OpenMV M7 – but at 2X faster!
Our embedded 1D/2D barcode support is the easiest way for you to add 1D/2D barcode support to your next microcontroller project. We’re actually running desktop libraries such as AprilTag2, ZBar, and libdmtx under-the-hood.Twitter Ads info and privacy
Thermal Vision (optional purchase)- The OpenMV Cam H7 brings FLIR Lepton 1/2/3 thermal camera sensor support allowing you to run all of our algorithms on thermal images using our FLIR Lepton adapter exclusively for the OpenMV Cam H7.
Want to detect people entering a room? Thermal Vision + Multi-Blob Color Tracking makes this trivial. With the OpenMV Cam H7 using thermal vision has never been easier!
Finally, you have complete control over all lower level FLIR Lepton features on the OpenMV Cam H7 exposed as a python module built-into the firmware. Getting the absolute temperature of any pixels in the image is no problem.
Global Shutter Sensor Support (optional purchase) – And… for folks needing precision machine vision support we offer the MT9V034 camera sensor moduleproviding global shutter sensor support.
The MT9V034 is a gray-scale only global-shutter sensor with on-demand trigger support. It’s capable of running at 80 FPS at VGA/QVGA, 200 FPS at QQVGA, and 400 FPS at QQQVGA.
In particular, if you’re trying to build an application where you need to perfectly control the sensor exposure with exact triggering the global shutter module will meet your needs. Additionally, if you need more processing power for your application you can hook the OpenMV Cam H7 up to a Raspberry Pi and use the OpenMV Cam H7 with the global shutter sensor module as a low-cost global shutter camera.
CNN Support – Finally, the OpenMV Cam H7 supports loadable neural networks and is capable of running simple CNNs like LENET-6 for number detection. Neural network support is provided by ARM’s new CMSIS-NN library.
A lot of new functionality about to come out in the next firmware update for OpenMV. Here’s the list:
* ZBar Integration – We’ve got the ZBar 1D barcode library working on the OpenMV Cam M7. It can decode bar codes oriented in any direction in 640×480 grayscale image at about 3 FPS and decode vertically aligned bar codes in a 640×40 grayscale image at about 20 FPS. So, if you don’t mind a slow frame rate it can basically find and decode barcodes in an image generally. Or, you can turn the camera into a linear barcode scanner (640×40 res) for a higher FPS.
ZBar supports for the following types of 1D bar codes:
* EAN2
* EAN5
* EAN8
* UPCE
* ISBN10
* UPCA
* EAN13
* I25
* DATABAR
* DATABAR_EXP
* CODABAR
* CODE39
* CODE93
* CODE128
… so, basically every 1D bar code you’ll run into. 🙂
Best of all, finding barcodes is super easy to do. Just call the “find_barcodes()” method on an image and you’ll get a list of all 1D barcodes. The method works just like “find_qrcodes()”.
Normally, I’d do a demo with ZBar support… but, there’s really not that much to look at when you set the resolution to 640×40. Just a lot of black and white lines that look the same.
Note that this feature only works on the OpenMV Cam M7 because we’ve exhausted the flash space for major new features on the OpenMV Cam M4.
* Wireless Frame Buffer Support – As demoed previously with the “Open Terminal” functionality in OpenMV IDE we’ve now added methods to the firmware for transmitting images to OpenMV IDE over any serial link. The new “compress_for_ide()” and “compressed_for_ide()” methods on images allow you to jpeg compress an image in place or create a jpeg compressed copy. Every 6-bits of the jpeg compressed images are then encoded to a byte valued between 128-191 for transmission to OpenMV IDE.
By encoding the image binary data in this way we’re able to transmit images over any serial link without risk of corrupting normal printable text data. This allows you to connect to an OpenMV Cam sending image data in the middle of transmission without issues.
So… wirelessly programming and debugging your OpenMV Cam using REPL now works! However, you’ll want to use fast wireless links for sending image data (above 1 mega baud).
* WiFi Access Point Mode – With firmware v2.3.0 you’ll now be able to setup your WiFi shield to run in Access Point mode so it acts like a WiFi router.
* 640×480 RGB565 Images/Video – Grayscale 640×480 image/video recording works on your OpenMV Cam M7. However, RGB565 640×480 image/video recording doesn’t work because we don’t have the RAM.
That said, we’ve figured out a way around this problem for just image and video recording by storing Bayer images in RAM instead of RGB565 images. This cuts the required space in half. Using a Bayer image does incur an overhead of linear interpolation per pixel access so we don’t plan to build this feature out for image processing functions. But, we’ll make it so you can take 640×480 RGB565 images and 640×480 color MJPEG video/gifs. Note that we don’t expect the frame rate to be impressive for video but it will be great for taking snapshots.
* CMUcam5 Pixy Emulation – We’ve received quite a few requests from folks looking to replace their CMUcam5 Pixy with the OpenMV Cam so that they can use AprilTags in their application versus color tracking without having to change their Arduino code. So… we’ve now got example scripts for this:
* AprilTags using Pixy Protocol over I2C
* AprilTags using Pixy Protocol over SPI
* AprilTags using Pixy Protocol over UART
* Color Tracking using Pixy Protocol over I2C
* Color Tracking using Pixy Protocol over SPI
* Color Tracking using Pixy Protocol over UART
These examples scripts also really show you how to use the OpenMV Cam’s I/O with computer vision support. Being able to control the filtering of results on your OpenMV Cam before transmitting them is very powerful.
* MAVLink Support – The same folks asking for Pixy Emulation also wanted MAVLink support for integration with ArduCopter and the Pixhawk. So, we added an example script for sending out AprilTag detection data for automatic landing support and optical flow data for use in GPS denied environments: