OpenMV Cam RPC Interface Library Released
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.
New OpenMV Cam Interface Library
As there's been nothing to do but stay at home and work we've been getting a lot of coding done lately. In particular, there's now an Interface Library for the OpenMV Cam!
The new OpenMV Cam Interface Library lets you control your OpenMV Cam over:
- Async Serial (UART) - at up 7.5 Mb/s on the OpenMV Cam H7.
- I2C Bus - at up to 1 Mb/s on the OpenMV Cam H7.
- SPI Bus - at up to 20 Mb/s (40/80 Mb/s possible too) on the OpenMV Cam H7.
- CAN Bus - at up to 1 Mb/s on the OpenMV Cam H7.
- USB Virtual COM Port (VCP) - at up to 12 Mb/s on the OpenMV Cam M4/M7/H7.
- WiFi using the WiFi Shield - at over 12 Mb/s on 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!