OpenMV GENX320 Event Camera Module makes Prophesee GenX320 sensor compatible and ready to be used with compact, Python-powered, machine vision embedded platforms such as OpenMV Cam H7 Plus (recommended) and OpenMV Cam RT1062.
Data are transmitted from the sensor via a low-power and low latency CMOS Parallel Interface (CPI).
Cameras based on STM32 H7 Plus and NXP RT1062 micro-controllers
Max event histogram rate on STM32 H7 Plus is 375 fps
Max event histogram rate on NXP RT1062 is 180 fps
Streams CD events or event histograms natively from GenX320 sensor
Includes a set of machine learning and image processing algorithms and examples
Small form factor camera expandable via shield add-ons
OpenMV IDE allowing an easy application development in micro-Python using machine vision library
Not supported by Metavision SDK
GenX320 sensor can be configured to stream one of the following data formats:
Sensor biases
Individual sensor biases can be set via sensor.IOCTL_GENX320_SET_BIAS setting
Biases presets can be set via IOCTL_GENX320_SET_BIASES setting
Event Signal Processing (ESP) filters
AntiFlicker Filter can be configured using IOCTL_GENX320_SET_AFK setting
Low Power Mode (PM2) allowing to reduce consumption whilst maintaining quick wake-up based on scene dynamics can be activated by sensor.sleep function
Further sensor features can be configured by writing/reading
registers (note that the read/write command accepts 16-bit values only)
Plug the OpenMV Cam to USB port on your PC
Start OpenMV IDE, connect to the camera and “Install the latest development release”
Run ready-to-use examples for GenX320
import sensor import time sensor.reset() # Initializes the sensor. sensor.set_pixformat(sensor.GRAYSCALE) # Must always be grayscale. sensor.set_framesize(sensor.B320X320) # Must always be 320x320. sensor.set_framerate(100) clock = time.clock() while True: clock.tick() img = sensor.snapshot() print(clock.fps())
import sensor import time sensor.reset() sensor.set_pixformat(sensor.GRAYSCALE) # Must always be grayscale. sensor.set_framesize(sensor.B320X320) # Must always be 320x320. sensor.set_framerate(200) sensor.ioctl(sensor.IOCTL_GENX320_SET_BIASES, sensor.GENX320_BIASES_ACTIVE_MARKER) # Applies sensor biases for seeing LEDs only clock = time.clock() while True: clock.tick() img = sensor.snapshot() blobs = img.find_blobs( [(120, 140)], invert=True, pixels_threshold=2, area_threshold=4, merge=True ) for blob in blobs: img.draw_rectangle(blob.rect(), color=(255, 255, 255)) img.draw_cross(blob.cx(), blob.cy(), color=(0, 0, 0)) print(clock.fps())
import sensor
import time
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE) # Must always be grayscale.
sensor.set_framesize(sensor.B320X320) # Must always be 320x320.
sensor.set_framerate(400)
sensor.ioctl(sensor.IOCTL_GENX320_SET_BIAS, sensor.GENX320_BIAS_DIFF_OFF, 28)
sensor.ioctl(sensor.IOCTL_GENX320_SET_BIAS, sensor.GENX320_BIAS_DIFF_ON, 25)
sensor.ioctl(sensor.IOCTL_GENX320_SET_BIAS, sensor.GENX320_BIAS_FO, 34)
sensor.ioctl(sensor.IOCTL_GENX320_SET_BIAS, sensor.GENX320_BIAS_HPF, 40)
sensor.ioctl(sensor.IOCTL_GENX320_SET_BIAS, sensor.GENX320_BIAS_REFR, 10)
clock = time.clock()
while True:
clock.tick()
img = sensor.snapshot()
print(clock.fps())