Visi mesin,
dibuat sederhana.
Deteksi wajah langsung, pelacakan AprilTag, pemindaian QR, dan YOLO. Semua di perangkat dalam MicroPython murni. Tanpa komputer host, tanpa cloud.
Buka IDE
Unduh dan instal OpenMV IDE untuk Windows, macOS, atau Linux dan jalankan IDE.
Sambungkan kamera Anda
Colokkan OpenMV Cam ke komputer Anda melalui USB. LED detak jantung biru berkedip saat siap.
Jalankan skrip pertama Anda
Klik tombol sambungkan ikon soket di IDE, lalu tekan tanda panah putar hijau untuk menjalankan skrip pertama Anda.
Hello world
Contohimport 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")
Pelacakan orang secara real-time
Model YOLOv8 bawaan adalah detektor orang satu kelas — dikuantisasi int8 dan disertakan dalam ROM.
/rom/yolov8n_192.tflite — tidak memerlukan kartu SD atau unduhan.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")
Temukan dan identifikasi AprilTag
AprilTag adalah penanda fiducial 2D — tahan terhadap motion blur dan oklusi sebagian, dan memberikan pose 3D penuh.
x/y/z dan rotasi 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")
Deteksi wajah dengan BlazeFace
BlazeFace milik Google adalah detektor wajah TensorFlow Lite ringan yang mengembalikan kotak pembatas ditambah enam landmark per wajah.
/rom/blazeface_front_128.tflite — sudah dikuantisasi, tidak perlu diunduh.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")
Pindai kode QR dari siaran langsung
Dekoder QR bawaan menangani kode yang miring, terdistorsi, dan terhalang sebagian.
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")
Temukan blob warna
find_blobs mengembalikan wilayah piksel yang terhubung yang cocok dengan satu atau lebih ambang batas LAB.
pixels_threshold menyaring deteksi kecil; merge=True menggabungkan blob yang tumpang tindih.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")
Baca kode batang 1D
Temukan kode batang 1D di mana saja dalam bingkai dan dekode payload-nya.
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")
Lacak 21 titik kunci tangan
Model Hand Landmarks MediaPipe milik Google menempatkan 21 sendi pada setiap tangan yang terdeteksi — pergelangan tangan, buku jari, dan ujung jari.
/rom/hand_landmarks_full_224.tflite — berjalan mandiri di sini, tanpa deteksi telapak tangan sebelumnya.ml.utils.draw_skeleton menggambar semua 21 sendi dan koneksi dalam satu panggilan.Baru mengenal OpenMV?
Mulailah dengan tutorial langkah demi langkah — ini mencakup penyiapan perangkat keras, IDE, skrip dasar, dan tips untuk proyek nyata pertama Anda.
Pustaka inti
APIPerangkat keras, kamera, pemrosesan citra, ndarray, ML, multitasking, jaringan, server web, dan Bluetooth — semua dari MicroPython.
machine
Perangkat keras tingkat rendah: GPIO, SPI, I²C, UART, PWM, ADC, dan timer.
Jelajahi →csi
Kontrol kamera: format piksel, ukuran bingkai, eksposur, gain, dan keseimbangan putih.
Jelajahi →image
Visi mesin: blob, tepi, garis, lingkaran, fitur, dan penggambaran.
Jelajahi →ulab
Komputasi numerik di perangkat — ndarray, FFT, dan aljabar linear.
Jelajahi →ml
Inferensi jaringan saraf di perangkat — klasifikasi, deteksi, dan segmentasi.
Jelajahi →asyncio
Multitasking kooperatif — jalankan kamera, jaringan, dan I/O secara paralel.
Jelajahi →network
Wi-Fi, Ethernet, dan soket untuk IoT dan komunikasi jarak jauh.
Jelajahi →microdot
Server HTTP minimal — rute, sesi, login, SSE, dan WebSocket.
Jelajahi →aioble
Bluetooth Low Energy asinkron — periferal, advertisi, dan GATT.
Jelajahi →Jelajahi berdasarkan papan
Perangkat kerasPilih OpenMV Cam Anda untuk melihat pinout, spesifikasi, dan referensi cepat khusus papan.

OpenMV N6 Baru
STM32N6 dengan NPU bawaan — MCU berakselerasi AI pertama dari STMicro.
Jelajahi →
OpenMV AE3 Baru
Alif Ensemble E3 — Cortex-M55 kelas fusi dengan NPU Ethos-U55.
Jelajahi →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 pada 600 MHz dengan 32 MB SDRAM eksternal.
Jelajahi →
OpenMV H7 Plus
STM32H743 dengan 32 MB SDRAM eksternal dan sensor OV5640 5MP.
Jelajahi →
OpenMV H7
STM32H743 Cortex-M7 dengan modul sensor citra yang dapat dilepas.
Jelajahi →
Arduino Nicla Vision
Papan STM32H747 kompak 23 × 23 mm dengan sensor bawaan.
Jelajahi →
Arduino Portenta
STM32H747 dengan 8 MB SDRAM dan dukungan Vision Shield.
Jelajahi →
Arduino Giga
STM32H747 dengan 8 MB SDRAM, dukungan Vision dan Display Shield.
Jelajahi →Shield
Add-onPapan tambahan yang terhubung ke OpenMV Cam — jaringan, kontrol motor, layar, dan lainnya.

Gigabit PoE Shield
Ethernet Gigabit dengan PoE untuk streaming bandwidth lebih tinggi.
Jelajahi →
Servo Shield
Gerakkan hingga 4 servo dengan daya hingga 5A sambil memberi daya pada kamera, input 6–36V.
Jelajahi →
Battery Shield
Input baterai 1,8–5,5V melalui konektor DC barrel jack.
Jelajahi →
Touch LCD Shield
LCD SPI 2,3" dengan layar sentuh multi-touch kapasitif dan Qwiic.
Jelajahi →
PoE Shield
Ethernet 10/100 dengan Power-over-Ethernet.
Jelajahi →
PIR Shield
Pemicu gerak siaga 6µA ditambah cahaya putih dan IR 850 nm.
Jelajahi →
CAN/RS232 Shield
CAN-FD 8 Mb/s ditambah RS-232 1 Mb/s dalam satu shield.
Jelajahi →
RS422/RS485 Shield
Serial diferensial 10 Mb/s untuk bus industri.
Jelajahi →Sensor
Modul kameraModul kamera dan adapter sensor yang terhubung ke konektor board-to-board — visi berwarna, monokrom, termal, dan berbasis event.

PS5520 5MP HDR Camera
Sensor HDR 5MP — rentang dinamis tinggi untuk pencahayaan yang sulit.
Jelajahi →
Multispectral Thermal (PAG7936)
1 kamera global-shutter berwarna MP + FLIR Lepton termal dalam satu modul.
Jelajahi →
Multispectral Thermal (OV5640)
5MP kamera rolling-shutter berwarna + FLIR Lepton termal dalam satu modul.
Jelajahi →
Multispectral Event Camera
Sensor event GENX320 + warna PAG7936 dalam satu modul.
Jelajahi →
GENX320 Event Camera
Visi berbasis event Prophesee — presisi temporal mikrodetik.
Jelajahi →
FLIR Boson Adapter
Adapter untuk FLIR Boson / Boson+ — termal resolusi lebih tinggi.
Jelajahi →
FLIR Lepton Adapter
Adapter untuk inti termal FLIR Lepton 1.x / 2.x / 3.x.
Jelajahi →
Global Shutter Camera Module
Sensor global-shutter monokrom untuk pengambilan gerak cepat.
Jelajahi →