Maskinseende,
enkelt gjort.
Ansiktsdetektering i realtid, AprilTag-spårning, QR-skanning och YOLO. Allt på enheten i ren MicroPython. Ingen värddator, inget moln.
Öppna IDE:n
Ladda ned och installera OpenMV IDE för Windows, macOS eller Linux och starta IDE:n.
Anslut din kamera
Anslut OpenMV Cam till datorn via USB. En blå hjärtslagslampas blinkar när den är redo.
Kör ditt första skript
Klicka på anslutningsknappen med socket-ikonen i IDE:n och tryck sedan på den gröna spelarpilen för att köra ditt första skript.
Hello world
Exempelimport 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")
Personspårning i realtid
Den inbyggda YOLOv8-modellen är en enklass-persondetekterare — int8-kvantiserad och levererad i ROM.
/rom/yolov8n_192.tflite — inget SD-kort eller nedladdning behövs.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")
Hitta och identifiera AprilTags
AprilTags är 2D fiduciala markörer — robusta mot rörelseoskärpa och partiell ocklusion, och ger fullständig 3D-position.
x/y/z-translation och x/y/z-rotation.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")
Detektera ansikten med BlazeFace
Googles BlazeFace är en lättviktig TensorFlow Lite-ansiktsdetekterare som returnerar begränsningsboxar plus sex landmärken per ansikte.
/rom/blazeface_front_128.tflite — förkvantiserad, ingen nedladdning behövs.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")
Skanna QR-koder från ett direktflöde
Den inbyggda QR-avkodaren hanterar lutade, förvrängda och delvis dolda koder.
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")
Hitta färgfläckar
find_blobs returnerar sammanhängande pixelregioner som matchar ett eller flera LAB-tröskelvärden.
pixels_threshold filtrerar bort tiny detekteringar; merge=True sammanfogar överlappande fläckar.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")
Läs 1D-streckkoder
Hitta 1D-streckkoder var som helst i bildrutan och avkoda deras nyttolaster.
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")
Spåra 21 handnyckelpunkter
Googles MediaPipe Hand Landmarks-modell placerar 21 leder på varje detekterad hand — handled, knogar och fingertoppar.
/rom/hand_landmarks_full_224.tflite — körs fristående här, utan handflatedetektering uppströms.ml.utils.draw_skeleton ritar alla 21 leder och förbindelser i ett anrop.Ny på OpenMV?
Börja med den steg-för-steg-handledning — den täcker hårdvaruinställning, IDE:n, grundläggande skript och tips för ditt första riktiga projekt.
Kärnbibliotek
APIHårdvara, kameror, bildbehandling, ndarrays, ML, multitasking, nätverk, webbservrar och Bluetooth — allt från MicroPython.
machine
Lågnivå hårdvara: GPIO, SPI, I²C, UART, PWM, ADC och timers.
Utforska →csi
Kamerakontroll: pixelformat, bildstorlekar, exponering, gain och vitbalans.
Utforska →image
Maskinseende: fläckar, kanter, linjer, cirklar, egenskaper och ritning.
Utforska →ulab
Numerisk beräkning på enheten — ndarrays, FFT:er och linjär algebra.
Utforska →ml
Neuralt nätverksinferens på enheten — klassificera, detektera och segmentera.
Utforska →asyncio
Kooperativ multitasking — kör kamera, nätverk och I/O parallellt.
Utforska →network
Wi-Fi, Ethernet och sockets för IoT och fjärrkommunikation.
Utforska →microdot
Minimal HTTP-server — rutter, sessioner, inloggning, SSE och WebSockets.
Utforska →aioble
Asynkron Bluetooth Low Energy — perifera enheter, annonsering och GATT.
Utforska →Utforska efter kort
HårdvaraVälj din OpenMV Cam för att se dess stiftlayout, specifikationer och kortspecifik snabbreferens.

OpenMV N6 Nytt
STM32N6 med inbyggd NPU — STMicros första AI-accelererade MCU.
Utforska →
OpenMV AE3 Nytt
Alif Ensemble E3 — fusionsklass Cortex-M55 med Ethos-U55 NPU.
Utforska →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 på 600 MHz med 32 MB externt SDRAM.
Utforska →
OpenMV H7 Plus
STM32H743 med 32 MB externt SDRAM och en 5MP OV5640-sensor.
Utforska →
OpenMV H7
STM32H743 Cortex-M7 med ett utbytbart bildsensormodul.
Utforska →
Arduino Nicla Vision
Kompakt 23 × 23 mm STM32H747-kort med inbyggd sensor.
Utforska →
Arduino Portenta
STM32H747 med 8 MB SDRAM och stöd för Vision Shield.
Utforska →
Arduino Giga
STM32H747 med 8 MB SDRAM, stöd för Vision och Display Shield.
Utforska →Shields
TillbehörTillbehörskort som ansluts till OpenMV Cam — nätverk, motorstyrning, displayer och mer.

Gigabit PoE Shield
Gigabit Ethernet med PoE för bredbandsströmning.
Utforska →
Servo Shield
Driv upp till 4 servon med upp till 5A medan kameran drivs, 6–36V inmatning.
Utforska →
Battery Shield
1,8–5,5V batteriinmatning via DC-jackuttag.
Utforska →
Touch LCD Shield
2,3" SPI LCD med kapacitiv multiberöring och Qwiic.
Utforska →
PoE Shield
10/100 Ethernet med Power-over-Ethernet.
Utforska →
PIR Shield
6 µA standby rörelseutlösare plus vit och 850 nm IR.
Utforska →
CAN/RS232 Shield
8 Mb/s CAN-FD plus 1 Mb/s RS-232 i ett shield.
Utforska →
RS422/RS485 Shield
10 Mb/s differentiell serie för industriella bussar.
Utforska →Sensorer
KameramodulerKameramoduler och sensoradaptrar som ansluts till kort-till-kort-kontakten — färg, monokrom, termisk och händelsebaserat seende.

PS5520 5MP HDR Camera
5MP HDR-sensor — högt dynamiskt omfång för svåra ljusförhållanden.
Utforska →
Multispectral Thermal (PAG7936)
1 MP global-slutare färg + FLIR Lepton termisk på ett modul.
Utforska →
Multispectral Thermal (OV5640)
5MP rullande slutare färg + FLIR Lepton termisk på ett modul.
Utforska →
Multispectral Event Camera
GENX320-händelsesensor + PAG7936-färg på ett modul.
Utforska →
GENX320 Event Camera
Prophesee händelsebaserat seende — mikrosekunds tidsprecision.
Utforska →
FLIR Boson Adapter
Adapter för FLIR Boson / Boson+ — termisk med högre upplösning.
Utforska →
FLIR Lepton Adapter
Adapter för FLIR Lepton 1.x / 2.x / 3.x termiska kärnor.
Utforska →
Global Shutter Camera Module
Monokrom global-slutare sensor för snabb rörelseinspelning.
Utforska →Fler resurser
MicroPythonOpenMV MicroPython-språk
Språkreferens, syntax och grundläggande körtidssemantik.
Skillnader från CPython
Där MicroPython avviker från standard Python — moduler, inbyggda funktioner och syntax.
OpenMV MicroPython-internals
Kompilator, körtid, inbyggda moduler och portering av MicroPython till nya MCU:er.