Machine vision,
eenvoudig gemaakt.
Live gezichtsdetectie, AprilTag-tracking, QR-scannen en YOLO. Alles op het apparaat zelf in pure MicroPython. Geen hostcomputer, geen cloud.
Open de IDE
Download en installeer OpenMV IDE voor Windows, macOS of Linux en start de IDE.
Sluit uw camera aan
Plug the OpenMV Cam into your computer via USB. A blue heartbeat LED blinks when it's ready.
Voer uw eerste script uit
Klik op de verbindingsknop (stekker-icoon) in de IDE en druk vervolgens op de groene afspeelpijl om uw eerste script uit te voeren.
Hallo wereld
Voorbeeldenimport csi
import time
import ml
from ml.postprocessing.ultralytics import YoloV8
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.snapshot(time=2000) # let AWB/AGC stabilize
# Built-in single-class person detector model.
model = ml.Model("/rom/yolov8n_192.tflite",
postprocess=YoloV8(threshold=0.4))
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
# predict returns a list per class of ((x, y, w, h), score) tuples.
for class_dets in model.predict([img]):
for rect, score in class_dets:
img.draw_rectangle(rect, color=(0, 255, 0))
print(clock.fps(), "fps")
Realtime persoonsdetectie
Het ingebouwde YOLOv8-model is een eenklasse-persoonsdetector — int8-gekwantiseerd en meegeleverd in ROM.
/rom/yolov8n_192.tflite — geen SD-kaart of download nodig.import csi
import math
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # let AWB/AGC stabilize
csi0.auto_gain(False)
csi0.auto_whitebal(False)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
for tag in img.find_apriltags():
img.draw_detection(tag, color1=(255, 0, 0), color2=(0, 255, 0))
deg = math.degrees(tag.rotation)
print("ID %d rotation %.1f deg" % (tag.id, deg))
print(clock.fps(), "fps")
AprilTags lokaliseren en identificeren
AprilTags zijn 2D-fiduciaire markeringen — robuust tegen bewegingsonscherpte en gedeeltelijke occlusie, en ze geven volledige 3D-positiebepaling.
x/y/z-translatie en x/y/z-rotatie.import csi
import time
import ml
from ml.postprocessing.mediapipe import BlazeFace
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400)) # square window for best results
csi0.snapshot(time=2000) # let AWB/AGC stabilize
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace(threshold=0.4))
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
for rect, score, keypoints in model.predict([img]):
img.draw_rectangle(rect, color=(0, 0, 255))
ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))
print(clock.fps(), "fps")
Gezichten detecteren met BlazeFace
Google's BlazeFace is a lightweight TensorFlow Lite face detector that returns bounding boxes plus six landmarks per face.
/rom/blazeface_front_128.tflite — vooraf gekwantiseerd, geen download nodig.import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # let AWB/AGC stabilize
csi0.auto_gain(False)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
for code in img.find_qrcodes():
img.draw_rectangle(code.rect, color=(255, 0, 0))
print(code.payload)
print(clock.fps(), "fps")
QR-codes scannen vanuit een live beeld
De ingebouwde QR-decoder verwerkt gekantelde, vervormde en gedeeltelijk bedekte codes.
import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # let AWB/AGC stabilize
csi0.auto_gain(False)
csi0.auto_whitebal(False)
# LAB thresholds: (L_min, L_max, A_min, A_max, B_min, B_max)
thresholds = [
(30, 100, 15, 127, 15, 127), # red
(30, 100, -64, -8, -32, 32), # green
]
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
for blob in img.find_blobs(thresholds, pixels_threshold=200):
img.draw_rectangle(blob.rect, color=(255, 0, 0))
img.draw_cross((blob.cx, blob.cy))
print(clock.fps(), "fps")
Kleurvlekken vinden
find_blobs retourneert aaneengesloten pixelgebieden die overeenkomen met een of meer LAB-drempelwaarden.
pixels_threshold filtert kleine detecties; merge=True voegt overlappende vlekken samen.import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.VGA)
csi0.window((640, 80)) # narrow strip for fast linear scanning
csi0.snapshot(time=2000) # let AWB/AGC stabilize
csi0.auto_gain(False)
csi0.auto_whitebal(False)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
for code in img.find_barcodes():
img.draw_rectangle(code.rect, color=(0, 255, 0))
print(code.payload, "(quality %d)" % code.quality)
print(clock.fps(), "fps")
1D-barcodes lezen
Vind 1D-barcodes overal in het beeld en decodeer hun inhoud.
import csi
import time
import ml
from ml.postprocessing.mediapipe import HandLandmarks
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400)) # square window for the model
csi0.snapshot(time=2000) # let AWB/AGC stabilize
# Connections between the 21 keypoints — palm + 5 fingers.
hand_lines = ((0, 1), (1, 2), (2, 3), (3, 4), (0, 5), (5, 6),
(6, 7), (7, 8), (5, 9), (9, 10), (10, 11), (11, 12),
(9, 13), (13, 14), (14, 15), (15, 16), (13, 17), (17, 18),
(18, 19), (19, 20), (0, 17))
model = ml.Model("/rom/hand_landmarks_full_224.tflite",
postprocess=HandLandmarks(threshold=0.4))
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
# predict returns a list per hand: index 0 = left, index 1 = right.
for detections in model.predict([img]):
for rect, score, keypoints in detections:
ml.utils.draw_skeleton(img, keypoints, hand_lines,
kp_color=(255, 0, 0),
line_color=(0, 255, 0))
print(clock.fps(), "fps")
21 handknooppunten volgen
Google's MediaPipe Hand Landmarks model places 21 joints on each detected hand — wrist, knuckles, and fingertips.
/rom/hand_landmarks_full_224.tflite — hier zelfstandig uitgevoerd, zonder palmdetectie vooraf.ml.utils.draw_skeleton tekent alle 21 gewrichten en verbindingen in één aanroep.Nieuw bij OpenMV?
Begin met de stapsgewijze tutorial — hierin komen hardwareopstelling, de IDE, basisscripts en tips voor uw eerste echte project aan bod.
Kernbibliotheken
APIHardware, camera’s, beeldverwerking, ndarrays, ML, multitasking, netwerken, webservers en Bluetooth — allemaal vanuit MicroPython.
machine
Low-level hardware: GPIO, SPI, I²C, UART, PWM, ADC en timers.
Verkennen →csi
Camerabeheer: pixelformaten, beeldformaten, belichting, versterking en witbalans.
Verkennen →image
Machine vision: vlekken, randen, lijnen, cirkels, kenmerken en tekenen.
Verkennen →ulab
Numeriek rekenen op het apparaat — ndarrays, FFT’s en lineaire algebra.
Verkennen →ml
Neurale netwerkinferentie op het apparaat — classificeren, detecteren en segmenteren.
Verkennen →asyncio
Coöperatieve multitasking — voer camera, netwerk en I/O parallel uit.
Verkennen →network
Wi-Fi, Ethernet en sockets voor IoT en communicatie op afstand.
Verkennen →microdot
Minimale HTTP-server — routes, sessies, inloggen, SSE en WebSockets.
Verkennen →aioble
Asynchrone Bluetooth Low Energy — randapparatuur, adverteren en GATT.
Verkennen →Verkennen per board
HardwareSelecteer uw OpenMV Cam om de pinout, specificaties en boardspecifieke snelreferentie te bekijken.

OpenMV N6 Nieuw
STM32N6 with built-in NPU — STMicro's first AI-accelerated MCU.
Verkennen →
OpenMV AE3 Nieuw
Alif Ensemble E3 — fusion-class Cortex-M55 met Ethos-U55 NPU.
Verkennen →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 op 600 MHz met 32 MB extern SDRAM.
Verkennen →
OpenMV H7 Plus
STM32H743 met 32 MB extern SDRAM en een 5MP OV5640-sensor.
Verkennen →
OpenMV H7
STM32H743 Cortex-M7 met een verwisselbare beeldsensormodule.
Verkennen →
Arduino Nicla Vision
Compact 23 × 23 mm STM32H747-board met ingebouwde sensor.
Verkennen →
Arduino Portenta
STM32H747 met 8 MB SDRAM en Vision Shield-ondersteuning.
Verkennen →
Arduino Giga
STM32H747 met 8 MB SDRAM, Vision en Display Shield-ondersteuning.
Verkennen →Shields
Add-onsAdd-onboards die op de OpenMV Cam worden aangesloten — netwerken, motorbesturing, beeldschermen en meer.

Gigabit PoE Shield
Gigabit Ethernet met PoE voor streaming met hogere bandbreedte.
Verkennen →
Servo Shield
Aandrijving van maximaal 4 servo’s met een stroomverbruik van maximaal 5A terwijl de camera gevoed wordt, 6–36V ingang.
Verkennen →
Battery Shield
1,8–5,5V batterij-ingang via een DC-cilinderconnector.
Verkennen →
Touch LCD Shield
2,3″ SPI-LCD met capacitief multitouch en Qwiic.
Verkennen →
PoE Shield
10/100 Ethernet met Power-over-Ethernet.
Verkennen →
PIR Shield
6µA stand-by bewegingsdetector plus wit en 850 nm infrarood.
Verkennen →
CAN/RS232 Shield
8 Mb/s CAN-FD plus 1 Mb/s RS-232 in één shield.
Verkennen →
RS422/RS485 Shield
10 Mb/s differentiële seriële verbinding voor industriële bussen.
Verkennen →Sensoren
CameramodulesCameramodules en sensoradapters die worden aangesloten op de board-to-board-connector — kleur, monochroom, thermisch en op gebeurtenissen gebaseerde beeldverwerking.

PS5520 5MP HDR Camera
5MP HDR-sensor — hoog dynamisch bereik voor moeilijke verlichtingsomstandigheden.
Verkennen →
Multispectral Thermal (PAG7936)
1MP global-shutter kleur + FLIR Lepton thermisch op één module.
Verkennen →
Multispectral Thermal (OV5640)
5MP rolling-shutter kleur + FLIR Lepton thermisch op één module.
Verkennen →
Multispectral Event Camera
GENX320-eventsensor + PAG7936-kleur op één module.
Verkennen →
GENX320 Event Camera
Prophesee op gebeurtenissen gebaseerde beeldverwerking — microseconde tijdsprecisie.
Verkennen →
FLIR Boson Adapter
Adapter voor FLIR Boson / Boson+ — thermisch met hogere resolutie.
Verkennen →
FLIR Lepton Adapter
Adapter voor FLIR Lepton 1.x / 2.x / 3.x thermische kernen.
Verkennen →
Global Shutter Camera Module
Monochrome global-shutter-sensor voor het vastleggen van snelle bewegingen.
Verkennen →Meer bronnen
MicroPythonOpenMV MicroPython-taal
Taalreferentie, syntaxis en semantiek van de kernruntime.
Verschillen ten opzichte van CPython
Waar MicroPython afwijkt van standaard Python — modules, ingebouwde functies en syntaxis.
OpenMV MicroPython interne werking
Compiler, runtime, native modules en het porten van MicroPython naar nieuwe MCU’s.