Технічний зір,
зроблений простим.
Живе виявлення облич, відстеження AprilTag, сканування QR-кодів та YOLO. Усе на пристрої в чистому MicroPython. Без хост-комп'ютера, без хмари.
Відкрити IDE
Завантажте та встановіть OpenMV IDE для Windows, macOS або Linux і запустіть IDE.
Підключіть камеру
Підключіть OpenMV Cam до комп'ютера через USB. Синій індикатор серцебиття блимає, коли він готовий.
Запустіть перший скрипт
Натисніть кнопку підключення (іконка розетки) в IDE, потім натисніть зелену стрілку відтворення, щоб запустити перший скрипт.
Hello world
Прикладиimport 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")
Відстеження людей у реальному часі
Вбудована модель YOLOv8 — однокласовий детектор людей, квантизований int8 та вбудований у ROM.
/rom/yolov8n_192.tflite — картка SD або завантаження не потрібні.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")
Знаходити та ідентифікувати AprilTags
AprilTags — це двовимірні маркери-орієнтири, стійкі до розмиття руху та часткового перекриття, що забезпечують повну 3D-позицію.
x/y/z та поворот 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")
Виявлення облич за допомогою BlazeFace
BlazeFace від Google — це легкий детектор облич на базі TensorFlow Lite, що повертає обмежувальні прямокутники та шість ключових точок на обличчя.
/rom/blazeface_front_128.tflite — попередньо квантизовано, завантаження не потрібне.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")
Сканування QR-кодів із живого потоку
Вбудований декодер QR обробляє нахилені, спотворені та частково перекриті коди.
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")
Знайти плями кольору
find_blobs повертає пов'язані пікселів-регіони, що відповідають одному або кільком порогам LAB.
pixels_threshold фільтрує дрібні виявлення; merge=True об'єднує перекриваючі плями.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")
Зчитування одновимірних штрих-кодів
Знаходьте одновимірні штрих-коди будь-де у кадрі та декодуйте їх вміст.
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")
Відстеження 21 ключової точки руки
Модель MediaPipe Hand Landmarks від Google розміщує 21 суглоб на кожній виявленій руці — зап'ясток, кісточки та кінчики пальців.
/rom/hand_landmarks_full_224.tflite — виконується автономно, без попереднього виявлення долоні.ml.utils.draw_skeleton малює всі 21 суглоб та з'єднання за одним викликом.Вперше на OpenMV?
Почніть з покрокового посібника — він охоплює налаштування апаратного забезпечення, IDE, базові скрипти та поради для першого реального проекту.
Основні бібліотеки
APIАпаратне забезпечення, камери, обробка зображень, ndarray-и, МН, багатозадачність, мережі, вебсервери та Bluetooth — усе через MicroPython.
machine
Низькорівневе апаратне забезпечення: GPIO, SPI, I²C, UART, PWM, ADC та таймери.
Докладніше →csi
Керування камерою: формати пікселів, розміри кадрів, витримка, підсилення та баланс білого.
Докладніше →image
Технічний зір: плями, межі, лінії, кола, ознаки та малювання.
Докладніше →ulab
Чисельні обчислення на пристрої — ndarray-и, FFT та лінійна алгебра.
Докладніше →ml
Інференс нейронної мережі на пристрої — класифікація, виявлення та сегментація.
Докладніше →asyncio
Кооперативна багатозадачність — одночасна робота камери, мережі та введення-виведення.
Докладніше →network
Wi-Fi, Ethernet та сокети для IoT та дистанційного зв'язку.
Докладніше →microdot
Мінімальний HTTP-сервер — маршрути, сесії, вхід, SSE та WebSockets.
Докладніше →aioble
Асинхронний Bluetooth Low Energy — периферійні пристрої, реклама та GATT.
Докладніше →Огляд за платами
Апаратне забезпеченняОберіть свою OpenMV Cam, щоб переглянути розводку виводів, характеристики та швидкий довідник для плати.

OpenMV N6 Новинка
STM32N6 з вбудованим NPU — перший AI-прискорений MCU від STMicro.
Докладніше →
OpenMV AE3 Новинка
Alif Ensemble E3 — Cortex-M55 класу fusion з Ethos-U55 NPU.
Докладніше →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 на 600 МГц із 32 МБ зовнішньої SDRAM.
Докладніше →
OpenMV H7 Plus
STM32H743 з 32 МБ зовнішньої SDRAM та 5 MP датчиком OV5640.
Докладніше →
OpenMV H7
STM32H743 Cortex-M7 зі знімним модулем датчика зображення.
Докладніше →
Arduino Nicla Vision
Компактна плата 23 × 23 мм STM32H747 із вбудованим датчиком.
Докладніше →
Arduino Portenta
STM32H747 з 8 МБ SDRAM та підтримкою Vision Shield.
Докладніше →
Arduino Giga
STM32H747 з 8 МБ SDRAM та підтримкою Vision і Display Shield.
Докладніше →Шилди
ДоповненняДодаткові плати для OpenMV Cam — мережі, керування моторами, дисплеї тощо.

Gigabit PoE Shield
Gigabit Ethernet з PoE для потокової передачі з більшою пропускною здатністю.
Докладніше →
Servo Shield
Керування до 4 сервоприводів зі споживанням до 5 А під час живлення камери, вхідна напруга 6–36 В.
Докладніше →
Battery Shield
Живлення від батареї 1,8–5,5 В через роз'єм DC-бочонок.
Докладніше →
Touch LCD Shield
2,3-дюймовий SPI LCD з ємнісним мультисенсорним екраном та Qwiic.
Докладніше →
PoE Shield
Ethernet 10/100 з живленням через мережу (PoE).
Докладніше →
PIR Shield
6 мкА режим очікування з датчиком руху, білим і 850 нм ІЧ-підсвічуванням.
Докладніше →
CAN/RS232 Shield
8 Мбіт/с CAN-FD плюс 1 Мбіт/с RS-232 в одному шилді.
Докладніше →
RS422/RS485 Shield
10 Мбіт/с диференційний послідовний інтерфейс для промислових шин.
Докладніше →Датчики
Модулі камериМодулі камери та адаптери датчиків для роз'єму плата-до-плати — кольорове, монохромне, тепловізійне та подієве бачення.

PS5520 5MP HDR Camera
5 MP HDR датчик — широкий динамічний діапазон для складного освітлення.
Докладніше →
Multispectral Thermal (PAG7936)
1 MP глобальний затвор кольоровий + FLIR Lepton тепловізійний на одному модулі.
Докладніше →
Multispectral Thermal (OV5640)
5 MP рухомий затвор кольоровий + FLIR Lepton тепловізійний на одному модулі.
Докладніше →
Multispectral Event Camera
GENX320 подієвий датчик + PAG7936 кольоровий на одному модулі.
Докладніше →
GENX320 Event Camera
Подієве бачення Prophesee — мікросекундна часова точність.
Докладніше →
FLIR Boson Adapter
Адаптер для FLIR Boson / Boson+ — тепловізор вищої роздільної здатності.
Докладніше →
FLIR Lepton Adapter
Адаптер для тепловізійних ядер FLIR Lepton 1.x / 2.x / 3.x.
Докладніше →
Global Shutter Camera Module
Монохромний датчик із глобальним затвором для захоплення швидкого руху.
Докладніше →Більше ресурсів
MicroPythonМова OpenMV MicroPython
Довідник мови, синтаксис та семантика основного середовища виконання.
Відмінності від CPython
Де MicroPython відрізняється від стандартного Python — модулі, вбудовані функції та синтаксис.
Внутрішня структура OpenMV MicroPython
Компілятор, середовище виконання, нативні модулі та портування MicroPython на нові мікроконтролери.
Спільнота та посилання
ЗовнішнєСайт OpenMV
Продукти, застосунки, завантаження та новини.
Форуми
Обговорення у спільноті, допомога та обмін проектами.
OpenMV на GitHub
Мікропрограма, IDE та приклади вихідного коду — питання та запити на злиття вітаються.
MicroPython на GitHub
Вихідні коди мікропрограми MicroPython — основа, на якій побудований OpenMV.