Machine vision,
resa semplice.
Rilevamento volti in tempo reale, tracciamento AprilTag, scansione QR e YOLO. Tutto sul dispositivo in puro MicroPython. Nessun computer host, nessun cloud.
Apri l'IDE
Scarica e installa OpenMV IDE per Windows, macOS o Linux e avvia l'IDE.
Collega la cam
Plug the OpenMV Cam into your computer via USB. A blue heartbeat LED blinks when it's ready.
Esegui il primo script
Clicca il pulsante di connessione con l'icona a spina nell'IDE, poi premi la freccia verde di avvio per eseguire il primo script.
Hello world
Esempiimport 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")
Tracciamento persone in tempo reale
Il modello YOLOv8 integrato è un rilevatore di persone a singola classe — quantizzato int8 e incluso in ROM.
/rom/yolov8n_192.tflite — nessuna scheda SD o download necessario.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")
Localizza e identifica gli AprilTag
Gli AprilTag sono marcatori fiduciali 2D — robusti alla sfocatura da movimento e all'occlusione parziale, e forniscono la posa 3D completa.
x/y/z e rotazione 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")
Rileva volti con 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 — pre-quantizzato, nessun download necessario.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")
Scansiona codici QR da un feed live
Il decoder QR integrato gestisce codici inclinati, distorsi e parzialmente occlusi.
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")
Trova blob di colore
find_blobs restituisce regioni di pixel connesse che corrispondono a una o più soglie LAB.
pixels_threshold filtra le piccole rilevazioni; merge=True unisce i blob sovrapposti.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")
Leggi codici a barre 1D
Trova codici a barre 1D ovunque nel frame e decodifica i loro payload.
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")
Traccia 21 keypoint della mano
Google's MediaPipe Hand Landmarks model places 21 joints on each detected hand — wrist, knuckles, and fingertips.
/rom/hand_landmarks_full_224.tflite — eseguito in modo standalone, senza rilevamento del palmo a monte.ml.utils.draw_skeleton disegna tutti i 21 giunti e le connessioni in una sola chiamata.Nuovo su OpenMV?
Inizia con il tutorial passo-passo — copre la configurazione hardware, l'IDE, gli script di base e i suggerimenti per il tuo primo progetto reale.
Librerie principali
APIHardware, fotocamere, elaborazione immagini, ndarray, ML, multitasking, networking, server web e Bluetooth — tutto da MicroPython.
machine
Hardware di basso livello: GPIO, SPI, I²C, UART, PWM, ADC e timer.
Esplora →csi
Controllo fotocamera: formati pixel, dimensioni frame, esposizione, guadagno e bilanciamento del bianco.
Esplora →image
Machine vision: blob, bordi, linee, cerchi, feature e disegno.
Esplora →ulab
Calcolo numerico sul dispositivo — ndarray, FFT e algebra lineare.
Esplora →ml
Inferenza di reti neurali sul dispositivo — classifica, rileva e segmenta.
Esplora →asyncio
Multitasking cooperativo — esegui fotocamera, rete e I/O in parallelo.
Esplora →network
Wi-Fi, Ethernet e socket per IoT e comunicazione remota.
Esplora →microdot
Server HTTP minimale — route, sessioni, login, SSE e WebSocket.
Esplora →aioble
Bluetooth Low Energy asincrono — periferiche, advertising e GATT.
Esplora →Esplora per scheda
HardwareSeleziona la tua OpenMV Cam per vedere la piedinatura, le specifiche e il riferimento rapido specifico della scheda.

OpenMV N6 Nuovo
STM32N6 with built-in NPU — STMicro's first AI-accelerated MCU.
Esplora →
OpenMV AE3 Nuovo
Alif Ensemble E3 — Cortex-M55 classe fusion con NPU Ethos-U55.
Esplora →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 a 600 MHz con 32 MB di SDRAM esterna.
Esplora →
OpenMV H7 Plus
STM32H743 con 32 MB di SDRAM esterna e sensore OV5640 da 5MP.
Esplora →
OpenMV H7
STM32H743 Cortex-M7 con modulo sensore immagine rimovibile.
Esplora →
Arduino Nicla Vision
Scheda STM32H747 compatta 23 × 23 mm con sensore integrato.
Esplora →
Arduino Portenta
STM32H747 con 8 MB di SDRAM e supporto Vision Shield.
Esplora →
Arduino Giga
STM32H747 con 8 MB di SDRAM, supporto Vision e Display Shield.
Esplora →Shield
Componenti aggiuntiviSchede aggiuntive che si collegano alla OpenMV Cam — rete, controllo motori, display e altro.

Gigabit PoE Shield
Gigabit Ethernet con PoE per streaming ad alta larghezza di banda.
Esplora →
Servo Shield
Gestisci fino a 4 servomotori che assorbono fino a 5A alimentando la fotocamera, ingresso 6–36V.
Esplora →
Battery Shield
Ingresso batteria 1,8–5,5V tramite jack DC barrel.
Esplora →
Touch LCD Shield
LCD SPI 2,3" con multi-touch capacitivo e Qwiic.
Esplora →
PoE Shield
Ethernet 10/100 con Power-over-Ethernet.
Esplora →
PIR Shield
Trigger di movimento in standby a 6µA con illuminazione bianca e IR a 850 nm.
Esplora →
CAN/RS232 Shield
CAN-FD a 8 Mb/s più RS-232 a 1 Mb/s in uno shield.
Esplora →
RS422/RS485 Shield
Seriale differenziale a 10 Mb/s per bus industriali.
Esplora →Sensori
Moduli fotocameraModuli fotocamera e adattatori sensore che si collegano al connettore board-to-board — visione a colori, monocromatica, termica e basata su eventi.

PS5520 5MP HDR Camera
Sensore HDR da 5MP — alta gamma dinamica per condizioni di illuminazione difficili.
Esplora →
Multispectral Thermal (PAG7936)
Colore global-shutter da 1MP + termico FLIR Lepton in un unico modulo.
Esplora →
Multispectral Thermal (OV5640)
Colore rolling-shutter da 5MP + termico FLIR Lepton in un unico modulo.
Esplora →
Multispectral Event Camera
Sensore eventi GENX320 + colore PAG7936 in un unico modulo.
Esplora →
GENX320 Event Camera
Visione a eventi Prophesee — precisione temporale al microsecondo.
Esplora →
FLIR Boson Adapter
Adattatore per FLIR Boson / Boson+ — termico ad alta risoluzione.
Esplora →
FLIR Lepton Adapter
Adattatore per core termici FLIR Lepton 1.x / 2.x / 3.x.
Esplora →
Global Shutter Camera Module
Sensore monocromatico global-shutter per acquisizione di movimenti rapidi.
Esplora →Altre risorse
MicroPythonLinguaggio OpenMV MicroPython
Riferimento del linguaggio, sintassi e semantica del runtime di base.
Differenze rispetto a CPython
Dove MicroPython si discosta da Python standard — moduli, builtin e sintassi.
Elementi interni di OpenMV MicroPython
Compilatore, runtime, moduli nativi e porting di MicroPython su nuovi MCU.
Community & link
EsternoHomepage di OpenMV
Prodotti, applicazioni, download e notizie.
Forum
Discussioni della community, supporto e condivisione di progetti.
OpenMV su GitHub
Sorgenti del firmware, dell'IDE e degli esempi — segnalazioni e pull request benvenute.
MicroPython su GitHub
Sorgenti upstream del firmware MicroPython — la base su cui OpenMV è costruito.