Машинное зрение,
доступно каждому.
Обнаружение лиц в реальном времени, отслеживание AprilTag, сканирование QR и YOLO. Всё на устройстве — на чистом MicroPython. Без компьютера и облака.
Открыть IDE
Загрузите и установите OpenMV IDE для Windows, macOS или Linux и запустите IDE.
Подключите камеру
Подключите камеру OpenMV к компьютеру через USB. Когда камера готова, синий LED мигает в такт.
Запустите первый скрипт
Нажмите кнопку подключения со значком разъёма в 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")
Обнаружение и идентификация AprilTag
AprilTags — 2D-маркеры привязки, устойчивые к размытию при движении и частичному перекрытию; они возвращают полную 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, ML, многозадачность, сеть, веб-серверы и Bluetooth — всё из MicroPython.
machine
Низкоуровневое оборудование: GPIO, SPI, I²C, UART, PWM, ADC и таймеры.
Explore →csi
Управление камерой: форматы пикселей, размеры кадра, выдержка, усиление и баланс белого.
Explore →image
Машинное зрение: области, края, линии, окружности, признаки и рисование.
Explore →ulab
Численные вычисления на устройстве — массивы ndarray, БПФ и линейная алгебра.
Explore →ml
Вывод нейронных сетей на устройстве — классификация, обнаружение и сегментация.
Explore →asyncio
Кооперативная многозадачность — параллельная работа камеры, сети и ввода/вывода.
Explore →network
Wi-Fi, Ethernet и сокеты для IoT и удалённой связи.
Explore →microdot
Минималистичный HTTP-сервер — маршруты, сессии, авторизация, SSE и WebSockets.
Explore →aioble
Асинхронный Bluetooth Low Energy — периферийные устройства, реклама и GATT.
Explore →Выбрать по плате
ОборудованиеВыберите камеру OpenMV, чтобы увидеть распиновку, характеристики и краткий справочник для вашей платы.

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

Gigabit PoE Shield
Гигабитный Ethernet с PoE для высокоскоростной потоковой передачи.
Explore →
Servo Shield
Управление до 4 сервоприводов с током до 5 А при питании камеры, входное напряжение 6–36 В.
Explore →
Battery Shield
Питание от аккумулятора 1,8–5,5 В через разъём DC barrel.
Explore →
Touch LCD Shield
2,3-дюймовый SPI LCD с ёмкостным мультитач и Qwiic.
Explore →
PoE Shield
Ethernet 10/100 с технологией Power-over-Ethernet.
Explore →
PIR Shield
Датчик движения с током ожидания 6 мкА плюс белая и ИК-подсветка 850 нм.
Explore →
CAN/RS232 Shield
CAN-FD со скоростью 8 Мбит/с плюс RS-232 со скоростью 1 Мбит/с в одном шилде.
Explore →
RS422/RS485 Shield
Дифференциальный последовательный интерфейс 10 Мбит/с для промышленных шин.
Explore →Датчики
Модули камерМодули камер и адаптеры датчиков для межплатного разъёма — цветные, монохромные, тепловизионные и событийные.

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