Vision artificielle,
simplifiée.
Détection de visages en direct, suivi AprilTag, lecture QR et YOLO. Tout sur l'appareil, en MicroPython pur. Pas d'ordinateur hôte, pas de cloud.
Ouvrir l'IDE
Téléchargez et installez OpenMV IDE pour Windows, macOS ou Linux, puis lancez l'IDE.
Connecter votre caméra
Branchez la caméra OpenMV à votre ordinateur via USB. Une LED bleue clignote en rythme lorsqu'elle est prête.
Exécuter votre premier script
Cliquez sur le bouton de connexion (icône prise) dans l'IDE, puis appuyez sur la flèche de lecture verte pour exécuter votre premier script.
Hello world
Exemplesimport 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")
Suivi de personnes en temps réel
Le modèle YOLOv8 embarqué est un détecteur de personnes à classe unique — quantifié en int8 et fourni en ROM.
/rom/yolov8n_192.tflite — aucune carte SD ni téléchargement requis.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")
Localiser et identifier des AprilTags
Les AprilTags sont des marqueurs fiduciaires 2D — robustes au flou de mouvement et à l'occultation partielle, et ils fournissent la pose 3D complète.
x/y/z et rotation x/y/z.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")
Détecter des visages avec BlazeFace
BlazeFace de Google est un détecteur de visages TensorFlow Lite léger qui retourne des boîtes englobantes et six points de repère par visage.
/rom/blazeface_front_128.tflite — pré-quantifié, aucun téléchargement requis.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")
Scanner des codes QR depuis un flux en direct
Le décodeur QR intégré prend en charge les codes inclinés, déformés et partiellement occultés.
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")
Détecter des zones de couleur
find_blobs retourne des régions de pixels connectées correspondant à un ou plusieurs seuils LAB.
pixels_threshold filtre les petites détections ; merge=True fusionne les zones qui se chevauchent.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")
Lire des codes-barres 1D
Trouvez des codes-barres 1D n'importe où dans l'image et décodez leur contenu.
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")
Suivre 21 points clés de la main
Le modèle MediaPipe Hand Landmarks de Google place 21 articulations sur chaque main détectée — poignet, jointures et bouts des doigts.
/rom/hand_landmarks_full_224.tflite — fonctionne de manière autonome ici, sans détection de paume en amont.ml.utils.draw_skeleton dessine les 21 articulations et connexions en un seul appel.Nouveau sur OpenMV ?
Commencez par le tutoriel pas à pas — il couvre la configuration du matériel, l'IDE, les scripts de base et des conseils pour votre premier vrai projet.
Bibliothèques principales
APIMatériel, caméras, traitement d'image, ndarrays, ML, multitâche, réseau, serveurs web et Bluetooth — tout depuis MicroPython.
machine
Matériel bas niveau : GPIO, SPI, I²C, UART, PWM, ADC et minuteries.
Explorer →csi
Contrôle de la caméra : formats de pixels, tailles d'image, exposition, gain et balance des blancs.
Explorer →image
Vision artificielle : zones, contours, lignes, cercles, caractéristiques et dessin.
Explorer →ulab
Calcul numérique embarqué — ndarrays, FFT et algèbre linéaire.
Explorer →ml
Inférence de réseau de neurones embarquée — classification, détection et segmentation.
Explorer →asyncio
Multitâche coopératif — exécutez caméra, réseau et E/S en parallèle.
Explorer →network
Wi-Fi, Ethernet et sockets pour l'IoT et la communication à distance.
Explorer →microdot
Serveur HTTP minimal — routes, sessions, connexion, SSE et WebSockets.
Explorer →aioble
Bluetooth Low Energy asynchrone — périphériques, publicité et GATT.
Explorer →Explorer par carte
MatérielSélectionnez votre caméra OpenMV pour voir son brochage, ses caractéristiques et son aide-mémoire spécifique à la carte.

OpenMV N6 Nouveau
STM32N6 avec NPU intégré — premier MCU accéléré par IA de STMicro.
Explorer →
OpenMV AE3 Nouveau
Alif Ensemble E3 — Cortex-M55 de classe fusion avec NPU Ethos-U55.
Explorer →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 à 600 MHz avec 32 Mo de SDRAM externe.
Explorer →
OpenMV H7 Plus
STM32H743 avec 32 Mo de SDRAM externe et un capteur OV5640 5 MP.
Explorer →
OpenMV H7
STM32H743 Cortex-M7 avec un module capteur d'image amovible.
Explorer →
Arduino Nicla Vision
Carte STM32H747 compacte de 23 × 23 mm avec capteur embarqué.
Explorer →
Arduino Portenta
STM32H747 avec 8 Mo de SDRAM et prise en charge du Vision Shield.
Explorer →
Arduino Giga
STM32H747 avec 8 Mo de SDRAM, prise en charge du Vision Shield et du Display Shield.
Explorer →Shields
ExtensionsCartes d'extension qui se branchent sur la caméra OpenMV — réseau, commande moteur, afficheurs et plus encore.

Gigabit PoE Shield
Ethernet Gigabit avec PoE pour un streaming à plus haute bande passante.
Explorer →
Servo Shield
Pilotez jusqu'à 4 servos consommant jusqu'à 5 A tout en alimentant la caméra, entrée 6–36 V.
Explorer →
Battery Shield
Entrée batterie 1,8–5,5 V via un connecteur barrel DC.
Explorer →
Touch LCD Shield
LCD SPI 2,3" avec multipoint capacitif et Qwiic.
Explorer →
PoE Shield
Ethernet 10/100 avec alimentation par Ethernet (PoE).
Explorer →
PIR Shield
Déclencheur de mouvement en veille 6 µA plus illumination blanche et IR 850 nm.
Explorer →
CAN/RS232 Shield
CAN-FD 8 Mb/s plus RS-232 1 Mb/s en un seul shield.
Explorer →
RS422/RS485 Shield
Série différentielle 10 Mb/s pour bus industriels.
Explorer →Capteurs
Modules caméraModules caméra et adaptateurs de capteurs qui se branchent sur le connecteur carte-à-carte — vision couleur, monochrome, thermique et événementielle.

PS5520 5MP HDR Camera
Capteur HDR 5 MP — haute plage dynamique pour des conditions d'éclairage difficiles.
Explorer →
Multispectral Thermal (PAG7936)
Couleur obturateur global 1 MP + thermique FLIR Lepton sur un seul module.
Explorer →
Multispectral Thermal (OV5640)
Couleur obturateur à défilement 5 MP + thermique FLIR Lepton sur un seul module.
Explorer →
Multispectral Event Camera
Capteur événementiel GENX320 + couleur PAG7936 sur un seul module.
Explorer →
GENX320 Event Camera
Vision événementielle Prophesee — précision temporelle à la microseconde.
Explorer →
FLIR Boson Adapter
Adaptateur pour FLIR Boson / Boson+ — thermique haute résolution.
Explorer →
FLIR Lepton Adapter
Adaptateur pour les cœurs thermiques FLIR Lepton 1.x / 2.x / 3.x.
Explorer →
Global Shutter Camera Module
Capteur monochrome à obturateur global pour la capture de mouvements rapides.
Explorer →Ressources supplémentaires
MicroPythonLangage MicroPython OpenMV
Référence du langage, syntaxe et sémantique du moteur d'exécution.
Différences par rapport à CPython
Là où MicroPython s'écarte de Python standard — modules, fonctions intégrées et syntaxe.
Internals de MicroPython OpenMV
Compilateur, moteur d'exécution, modules natifs et portage de MicroPython vers de nouveaux MCU.
Communauté & liens
ExternePage d'accueil OpenMV
Produits, applications, téléchargements et actualités.
Forums
Discussions communautaires, aide et partage de projets.
OpenMV sur GitHub
Sources du firmware, de l'IDE et des exemples — issues et pull requests bienvenus.
MicroPython sur GitHub
Sources du firmware MicroPython upstream — sur lesquelles OpenMV est construit.