Home / News

Blog - News

More Speed

Hi folks,

Lots of work got done last month. But first:

GitHub Sponsorship

Do you like how much our firmware has improved since the start of the year? Would you like it to continue to improve rapidly? Well, now you can directly support OpenMV on GitHub.

By signing up as a monthly sponsor of OpenMV you can help pay for continuous software optimization. Your funds will help us retain the skills of professionals like Larry Bank who's been doubling and quadrupling the speed of our code.

Like all other businesses... the economic downturn has affected our revenue - greatly, and every extra dollar helps. Please consider sponsoring us on GitHub.

Firmware v3.6.4 Released

We've been working hard on our sensor driver code to make it a lot faster. Once you download and install v3.6.4 on your OpenMV Cam H7 you should notice the default frame rate jump from 75 FPS to 150 FPS, and on the OpenMV Cam H7 Plus the default frame rate should increase from 25 FPS to 50 FPS.

We were able to 2X the frame rate by rewriting our sensor driver to be able to capture every frame from the camera. Additionally, we're working on double buffering support now to lock in this 2X speed gain for more processing loads.

On the OV5640 driver development side of things we've finally got the camera running at maximum speed. We're able to push:

  • 2592x1944 - GRAYSCALE (1 BPP) @ 15 FPS == ‭~76MB/s
  • 2592x1944 - RGB565 (2 BPP) @ 7.5 FPS == ‭~76MB/s
  • 2592x1944 - BAYER (1 BPP) @ 15 FPS == ‭~76MB/s
  • 2592x1944 - JPEG @ 15 FPS == ~10MB/s

Which is right at the limit of 80 MB/s that the STM32H7 DCMI bus can handle. Also, note that with the new SET_READOUT_WINDOW IOCTL you can reduce the OV5640's field-of-view to massively increase the frame rate to 240 FPS.

Finally, the new firmware updates our TensorFlow code with floating point layer input/output support. Most networks seems to actually run on the OpenMV Cam H7 and OpenMV Cam H7 Plus now. Please try running a model onboard now and let us know if things are still broken.

Anyway, firmware v3.6.4 has been released to OpenMV IDE and you should be able to download and install it easily.

RTSP Support

New in firmware v3.6.4 is RTSP support. If you have an OpenMV Cam H7 Plus with a WiFi shield you can now turn your OpenMV Cam into an IP Cam. RTSP support is implemented through a frozen MicroPython library compiled into your OpenMV Cam's firmware image.

With firmware v3.6.4 I was able to stream 1920x1080 video at 10 FPS to VLC on my computer. Once we get double buffering support working we should be able to increase that to 20 FPS (and maybe higher by setting the readout window).

Also, I haven't gotten a haircut in months.

Anyway, that's all folks! We'll have more updates next month. In particular, a new release of OpenMV IDE with a lot of improvements.

Shipping Update

Hi Folks, shipping has been slow out of China lately. I asked the our logistics company about this and they replied with this image.

COVID Shipping

Enough said I guess.

Shipping is so overloaded coming out of China that they are using passenger aircraft for cargo.

So, we will do out best to get OpenMV Cams out to folks... but, we are not the priority right now. Personal Protective Equipment is.

Sate safe out there,

Kwabena

OpenMV Cam RPC Interface Library Released

Hi Everyone,

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!