Global Shutter Camera Module ============================ The Global Shutter Camera Module is a monochrome sensor that captures fast motion without rolling-shutter artifacts. Suited to high-speed tracking, drones, and machine-vision snapshots. The module ships with either the MT9V024 or MT9V034 sensor. .. image:: ../mt9v024-hero.jpg :alt: Global Shutter Camera Module :width: 400px :align: center For full datasheet, photos, and ordering see the `Global Shutter Camera Module product page `_. Highlights ---------- * 752x480 global-shutter monochrome sensor * 80 FPS at QVGA, 200 FPS at QQVGA, 400 FPS at QQQVGA * 55 dB dynamic range * Compatible with all modular OpenMV Cam base boards Usage ----- Stream grayscale video at 320x240 (QVGA):: import csi import time csi0 = csi.CSI() csi0.reset() csi0.pixformat(csi.GRAYSCALE) csi0.framesize(csi.QVGA) clock = time.clock() while True: clock.tick() img = csi0.snapshot() print(clock.fps()) The sensor automatically activates pixel binning at lower resolutions — 2x at QVGA (320x240) or smaller, 4x at QQVGA (160x120) or smaller — which cuts readout time proportionally and pushes the frame rate up. The camera still has to integrate light for the requested exposure window though, so pair the framesize drop with a shorter exposure cap via `csi.CSI.auto_exposure` to actually hit the higher rates (the image will be darker — plan on extra lighting):: import csi import time csi0 = csi.CSI() csi0.reset() csi0.pixformat(csi.GRAYSCALE) csi0.framesize(csi.QQVGA) csi0.snapshot(time=2000) # let auto-exposure settle csi0.auto_exposure(True, exposure_us=5000) # cap exposure clock = time.clock() while True: clock.tick() img = csi0.snapshot() print(clock.fps()) Triggered mode lines pixel integration up exactly with each `csi.CSI.snapshot` call, so captures synchronize to the snapshot rather than the camera's free-running frame clock — useful for syncing to an external event or another sensor. Enable it through `csi.CSI.ioctl` with `csi.IOCTL_SET_TRIGGERED_MODE` — frame rate drops to roughly half of free-running mode because the readout no longer pipelines with the next frame's integration:: import csi import time csi0 = csi.CSI() csi0.reset() csi0.pixformat(csi.GRAYSCALE) csi0.framesize(csi.VGA) csi0.snapshot(time=2000) csi0.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True) clock = time.clock() while True: clock.tick() img = csi0.snapshot() print(clock.fps())