We hope you are safe during this challenging time.
OpenMV Company Status
Our warehouse in Shenzhen has resumed shipping and we're fulfilling orders again. We completed an OpenMV Cam H7 production run and the OpenMV Cam H7 Plus production run which we have been using to fulfill orders.
However, 80% of our inventory is still inside of our Hong Kong warehouse which is inaccessible to our shipping staff who have to drive from Shenzhen to Hong Kong as the border is restricted right now.
That said, we expect to survive the economic downturn and hope to continue delivering and iterating on the OpenMV Cam long into the future.
The new OpenMV Cam Interface Library lets you control your OpenMV Cam over:
Async Serial (UART) - at up7.5 Mb/son the OpenMV Cam H7.
I2C Bus - at up to1 Mb/son the OpenMV Cam H7.
SPI Bus - at up to20 Mb/s (40/80 Mb/s possible too)on the OpenMV Cam H7.
CAN Bus - at up to1 Mb/son the OpenMV Cam H7.
USB Virtual COM Port (VCP) - at up to12 Mb/son the OpenMV Cam M4/M7/H7.
WiFi using theWiFi Shield- at over12 Mb/son the OpenMV Cam M4/M7/H7.
In particular, I sat down and debugged CAN, I2C using DMA in both master and slave mode, SPI using DMA in both master and slave mode, USB VCP, and WiFi.
Previously, we had discouraged folks from using I2C or SPI to control the OpenMV Cam, but, that is now a thing of the past. All interfaces on the OpenMV Cam are usable now with firmware v3.6.2 (which has been released to OpenMV IDE). I'd like to apologize for all the horrible bugs on these interfaces that were making them unusable before. If you are interested in how to use all the interfaces on your OpenMV Cam effectively please see the interface library code. There's even code in there showing off how to use the STM32 CRC hardware in Python.
Moving on, we've got code right now for one OpenMV Cam controlling another OpenMV Cam over Async Serial, I2C, SPI, and CAN. Code for controlling an OpenMV Cam from the computer over USB VCP and WiFi. And we'll have an Arduino and Raspberry Pi Interface Library out soon for controlling the OpenMV Cam over I2C, SPI, and Async Serial.
Here's a video of me using the library to stream images over WiFi:
The examples scripts for the interface library show off how to:
Use the OpenMV Cam as a Machine Vision co-processor for doing things like Finding Faces, People, April Tag Detection, QR Code Detection, Barcode Detection, Data Matrix Detection, Color Tracking, and more over SPI, UART, I2C, and CAN.
Transferring the uncompressed frame buffer from one OpenMV Cam to another OpenMV Cam over SPI, UART, I2C, and CAN.
Streaming JPG images to a PC over USB or WiFi.
Faster OpenMV Cam H7 Plus FPS
While not yet released in firmware v3.6.1 we've got readout control for the OV5640 working which allows you to achieve over 100 FPS on the OpenMV Cam H7 Plus for things like high resolution object tracking:
Using this feature above you can easily make a 2592x1944 IR object tracker that runs at 120 FPS. Additionally, we designed the read out control ioctl so that we can backport this functionality into other camera modules we have to allow you to massively increase your FPS on them too.
But, we're not done with the OV5640 driver yet. There are a few more knobs we can turn to increase the FPS performance and JPEG image quality output at higher resolutions which we will implement soon.
1000% Median Filter Speed Up
Firmware v3.6.1 has more software optimizations from Larry Bank, we had him work on our image filters last month and he speed up our Median Filter by 1000%. In particular, you can now do 7x7 Median Filters on the OpenMV Cam and instead of running at < 1 FPS it runs at 16 FPS on QVGA.
We had Larry optimize Mean, Median, Mode, Midpoint, Morph, Bilateral, Erode, and Dilate making all these images filters much more usable for your applications.
Please let us know if you are looking for a particular algorithm to be speed up and we'll try get him working on it next.
WiFi Programming Is Coming Again
We originally were going to release WiFi programming support for the OpenMV Cam during the OpenMV Cam H7 Kickstarter. However, after implementing all the hooks in OpenMV IDE and testing the feature out we decided to shelve it as the WiFi shield was only able to move about 250Kb/s which is not fast enough to stream images.
However, during development of the OpenMV Cam Interface Library I discovered why the performance was so bad. Using WireShark I saw that our WINC1500 driver code would only send 1 TCP packet before waiting for an ACK resulting in a 35ms+ transmit time per 1400 bytes. After re-working the code to not wait for the ACK anymore we were able to increase the speed from about 250Kb/s to 15Mb/s.
This gives us enough bandwidth to get our debug protocol OpenMV IDE uses working over WiFi. We'll try to get this out in the next firmware release.
In the mean-time. Buy a WiFi Shield with your next OpenMV Cam! Also, assuming this makes the WiFi shield become even more popular we will start manufacturing them at at higher quantity which will allow us to lower the price.
Anyway, that's all folks. More updates coming soon!
We're still hard at work trying to get the OpenMV Cam H7 Plus into production even though the Coronavirus has definitely slowed things down... Anyway, we'd like to share status updates:
OpenMV Cam H7 Plus Status
Assembly for the OpenMV Cam H7 Plus main board finished last week! Here are some pics:
We expect to finish production of the OV5640 sensor board in about 2 weeks which will put us in April to begin shipping... assuming China is operational in April.
Geometric Image Transform Improvements
Continuing on performance improvements this year we've speed up all of our geometric image transform algorithms! linear_polar(), log_polar(), lens_correction(), and rotation_correction() are now 2X or more faster! Additionally, we've cleaned up the image quality outputs on all the algorithms and introduced a new feature to rotation_correction() which lets you do general purpose perspective correction using 4 point correspondences.
4 point correspondence perspective correction allows you to do things like birds-eye-view transforms on images using your OpenMV Cam so you can make better line-following robots and etc. Our code takes care of all the linear algebra required for this - all you need to do is specify 4 points (x/y pairs) in clock-wise order (top left, top right, bottom right, bottom left).
Checkout the video below for more information:
During the Chinese New Year the Coronavirus hit which resulted in the border between Hong Kong and Shenzhen being closed. This has resulted in OpenMV not being able to ship for 6 weeks now from our Hong Kong warehouse where the majority of our products are stored because the shipping staff live in Shenzhen.
That said, on the bright side, our shipper expects the border between Hong Kong and Shenzhen to re-open within 2 weeks and we might be able to get back to being fully operational soon... hopefully.
Find Circles Performance Improvement
Finally, I'd like to give a shout out to Chris Wagner for helping to pay for improving the speed of find_circles(). We were able to give Larry, our performance optimizer, more work thanks to Chris's help and speed the find_circles() algorithm up by 2X.
If you'd like to see a particular algorithm's performance improved please let us know at [email protected].