Wizja maszynowa,
uproszczona do granic możliwości.
Detekcja twarzy na żywo, śledzenie AprilTag, skanowanie QR i YOLO. Wszystko na urządzeniu w czystym MicroPython. Bez komputera hosta, bez chmury.
Otwórz IDE
Pobierz i zainstaluj OpenMV IDE dla systemu Windows, macOS lub Linux, a następnie uruchom IDE.
Podłącz kamerę
Podłącz OpenMV Cam do komputera przez USB. Niebieski LED sygnału pracy miga, gdy kamera jest gotowa.
Uruchom swój pierwszy skrypt
Kliknij przycisk połączenia z ikoną gniazda w IDE, a następnie naciśnij zielony przycisk odtwarzania, aby uruchomić swój pierwszy skrypt.
Witaj świecie
Przykładyimport 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")
Śledzenie osób w czasie rzeczywistym
Wbudowany model YOLOv8 to jednoklasowy detektor osób — skwantyzowany do int8 i dostarczany w ROM.
/rom/yolov8n_192.tflite — nie wymaga karty SD ani pobierania.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")
Lokalizuj i identyfikuj AprilTags
AprilTags to dwuwymiarowe znaczniki fiducjalne — odporne na rozmycie ruchu i częściowe zasłonięcie, zapewniające pełną pozę 3D.
x/y/z i obrót 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")
Wykrywaj twarze za pomocą BlazeFace
BlazeFace od Google to lekki detektor twarzy TensorFlow Lite, który zwraca prostokąty ograniczające oraz sześć punktów charakterystycznych na twarz.
/rom/blazeface_front_128.tflite — wstępnie skwantyzowany, bez konieczności pobierania.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")
Skanuj kody QR z transmisji na żywo
Wbudowany dekoder QR obsługuje kody pochylone, zniekształcone i częściowo zasłonięte.
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")
Znajdź obszary koloru
find_blobs zwraca połączone regiony pikseli pasujące do jednego lub więcej progów LAB.
pixels_threshold filtruje małe wykrycia; merge=True łączy nakładające się obszary.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")
Odczytuj kody kreskowe 1D
Znajdź kody kreskowe 1D w dowolnym miejscu klatki i zdekoduj ich zawartość.
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")
Śledź 21 punktów kluczowych dłoni
Model MediaPipe Hand Landmarks od Google umieszcza 21 stawów na każdej wykrytej dłoni — nadgarstek, knykcie i opuszki palców.
/rom/hand_landmarks_full_224.tflite — działa samodzielnie, bez wcześniejszego wykrywania dłoni.ml.utils.draw_skeleton rysuje wszystkie 21 stawów i połączeń w jednym wywołaniu.Nowy w OpenMV?
Zacznij od samouczka krok po kroku — obejmuje konfigurację sprzętu, IDE, podstawowe skrypty i wskazówki do pierwszego prawdziwego projektu.
Podstawowe biblioteki
APISprzęt, kamery, przetwarzanie obrazu, ndarrays, ML, wielozadaniowość, sieć, serwery WWW i Bluetooth — wszystko z MicroPython.
machine
Sprzęt niskopoziomowy: GPIO, SPI, I²C, UART, PWM, ADC i timery.
Eksploruj →csi
Sterowanie kamerą: formaty pikseli, rozmiary klatek, ekspozycja, wzmocnienie i balans bieli.
Eksploruj →image
Wizja maszynowa: obszary, krawędzie, linie, okręgi, cechy i rysowanie.
Eksploruj →ulab
Obliczenia numeryczne na urządzeniu — ndarrays, FFT i algebra liniowa.
Eksploruj →ml
Wnioskowanie sieci neuronowej na urządzeniu — klasyfikacja, detekcja i segmentacja.
Eksploruj →asyncio
Kooperatywna wielozadaniowość — kamera, sieć i I/O równolegle.
Eksploruj →network
Wi-Fi, Ethernet i gniazda dla IoT i komunikacji zdalnej.
Eksploruj →microdot
Minimalny serwer HTTP — trasy, sesje, logowanie, SSE i WebSockets.
Eksploruj →aioble
Asynchroniczne Bluetooth Low Energy — urządzenia peryferyjne, rozgłaszanie i GATT.
Eksploruj →Przeglądaj według płytki
SprzętWybierz swój OpenMV Cam, aby zobaczyć rozkład pinów, dane techniczne i skrócony opis dla danej płytki.

OpenMV N6 Nowy
STM32N6 z wbudowanym NPU — pierwszy układ MCU STMicro z akceleracją AI.
Eksploruj →
OpenMV AE3 Nowy
Alif Ensemble E3 — klasa fusion Cortex-M55 z NPU Ethos-U55.
Eksploruj →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 taktowany 600 MHz z 32 MB zewnętrznego SDRAM.
Eksploruj →
OpenMV H7 Plus
STM32H743 z 32 MB zewnętrznego SDRAM i sensorem 5 MP OV5640.
Eksploruj →
OpenMV H7
STM32H743 Cortex-M7 z wymiennym modułem sensora obrazu.
Eksploruj →
Arduino Nicla Vision
Kompaktowa płytka STM32H747 23 × 23 mm z wbudowanym sensorem.
Eksploruj →
Arduino Portenta
STM32H747 z 8 MB SDRAM i obsługą Vision Shield.
Eksploruj →
Arduino Giga
STM32H747 z 8 MB SDRAM i obsługą Vision i Display Shield.
Eksploruj →Nakładki
DodatkiNakładki podłączane do OpenMV Cam — sieć, sterowanie silnikami, wyświetlacze i nie tylko.

Gigabit PoE Shield
Gigabit Ethernet z PoE do strumieniowania o wyższej przepustowości.
Eksploruj →
Servo Shield
Steruj do 4 serwomechanizmami pobierającymi do 5 A przy zasilaniu kamery, wejście 6–36 V.
Eksploruj →
Battery Shield
Wejście zasilania bateryjnego 1,8–5,5 V przez złącze DC barrel.
Eksploruj →
Touch LCD Shield
Wyświetlacz SPI LCD 2,3" z pojemnościowym ekranem wielodotykowym i Qwiic.
Eksploruj →
PoE Shield
Ethernet 10/100 z zasilaniem przez Ethernet.
Eksploruj →
PIR Shield
Wyzwalacz ruchu w trybie czuwania 6 µA plus białe i podczerwone 850 nm.
Eksploruj →
CAN/RS232 Shield
8 Mb/s CAN-FD plus 1 Mb/s RS-232 na jednej nakładce.
Eksploruj →
RS422/RS485 Shield
10 Mb/s szeregowy różnicowy dla magistrali przemysłowych.
Eksploruj →Sensory
Moduły kamerModuły kamer i adaptery sensorów podłączane przez złącze board-to-board — wizja kolorowa, monochromatyczna, termiczna i zdarzeniowa.

PS5520 5MP HDR Camera
Sensor 5 MP HDR — wysoki zakres dynamiczny w trudnych warunkach oświetleniowych.
Eksploruj →
Multispectral Thermal (PAG7936)
1 MP global-shutter kolor + termiczny FLIR Lepton na jednym module.
Eksploruj →
Multispectral Thermal (OV5640)
5 MP rolling-shutter kolor + termiczny FLIR Lepton na jednym module.
Eksploruj →
Multispectral Event Camera
Sensor zdarzeniowy GENX320 + kolor PAG7936 na jednym module.
Eksploruj →
GENX320 Event Camera
Wizja zdarzeniowa Prophesee — mikrosekundowa precyzja czasowa.
Eksploruj →
FLIR Boson Adapter
Adapter dla FLIR Boson / Boson+ — termiczny o wyższej rozdzielczości.
Eksploruj →
FLIR Lepton Adapter
Adapter dla rdzeni termicznych FLIR Lepton 1.x / 2.x / 3.x.
Eksploruj →
Global Shutter Camera Module
Monochromatyczny sensor global-shutter do rejestrowania szybkiego ruchu.
Eksploruj →Więcej zasobów
MicroPythonJęzyk OpenMV MicroPython
Opis języka, składnia i podstawowa semantyka środowiska uruchomieniowego.
Różnice w stosunku do CPython
Gdzie MicroPython odbiega od standardowego Python — moduły, wbudowane funkcje i składnia.
Wewnętrzna budowa OpenMV MicroPython
Kompilator, środowisko uruchomieniowe, moduły natywne i przenoszenie MicroPython na nowe układy MCU.
Społeczność & linki
ZewnętrzneStrona główna OpenMV
Produkty, aplikacje, pliki do pobrania i aktualności.
Fora
Dyskusje społeczności, pomoc i udostępnianie projektów.
OpenMV na GitHub
Źródła oprogramowania, IDE i przykładów — zgłoszenia i pull requesty mile widziane.
MicroPython na GitHub
Źródła nadrzędnego oprogramowania MicroPython — na czym buduje OpenMV.