Visão computacional,
simplificada.
Detecção de rostos ao vivo, rastreamento de AprilTag, leitura de QR e YOLO. Tudo no dispositivo, em MicroPython puro. Sem computador host, sem nuvem.
Abrir o IDE
Baixe e instale o OpenMV IDE para Windows, macOS ou Linux e inicie o IDE.
Conecte sua câmera
Conecte a OpenMV Cam ao seu computador via USB. Um LED azul pisca quando ela está pronta.
Execute seu primeiro script
Clique no botão de conexão (ícone de tomada) no IDE e, em seguida, pressione a seta verde de execução para rodar seu primeiro script.
Olá mundo
Exemplosimport 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")
Rastreamento de pessoas em tempo real
O modelo YOLOv8 integrado é um detector de pessoas de classe única — quantizado em int8 e fornecido na ROM.
/rom/yolov8n_192.tflite — sem necessidade de cartão SD ou download.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")
Localizar e identificar AprilTags
AprilTags são marcadores fiduciais 2D — robustos ao desfoque de movimento e oclusão parcial, e fornecem pose 3D completa.
x/y/z e rotação 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")
Detectar rostos com BlazeFace
O BlazeFace do Google é um detector de rostos leve em TensorFlow Lite que retorna caixas delimitadoras e seis pontos de referência por rosto.
/rom/blazeface_front_128.tflite — pré-quantizado, sem necessidade de download.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")
Ler códigos QR de um feed ao vivo
O decodificador QR integrado lida com códigos inclinados, distorcidos e parcialmente ocluídos.
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")
Encontrar regiões de cor
find_blobs retorna regiões de pixels conectados que correspondem a um ou mais limiares LAB.
pixels_threshold filtra detecções pequenas; merge=True une regiões sobrepostas.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")
Ler códigos de barras 1D
Encontre códigos de barras 1D em qualquer parte do quadro e decodifique seus payloads.
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")
Rastrear 21 pontos-chave da mão
O modelo MediaPipe Hand Landmarks do Google posiciona 21 articulações em cada mão detectada — pulso, nós dos dedos e pontas dos dedos.
/rom/hand_landmarks_full_224.tflite — executando de forma independente, sem detecção de palma anterior.ml.utils.draw_skeleton desenha todas as 21 articulações e conexões em uma única chamada.Novo no OpenMV?
Comece com o tutorial passo a passo — ele cobre configuração de hardware, o IDE, scripts básicos e dicas para seu primeiro projeto real.
Bibliotecas principais
APIHardware, câmeras, processamento de imagens, ndarrays, ML, multitarefa, rede, servidores web e Bluetooth — tudo via MicroPython.
machine
Hardware de baixo nível: GPIO, SPI, I²C, UART, PWM, ADC e temporizadores.
Explorar →csi
Controle de câmera: formatos de pixel, tamanhos de quadro, exposição, ganho e balanço de branco.
Explorar →image
Visão computacional: regiões, bordas, linhas, círculos, características e desenho.
Explorar →ulab
Computação numérica no dispositivo — ndarrays, FFTs e álgebra linear.
Explorar →ml
Inferência de redes neurais no dispositivo — classificar, detectar e segmentar.
Explorar →asyncio
Multitarefa cooperativa — execute câmera, rede e E/S em paralelo.
Explorar →network
Wi-Fi, Ethernet e sockets para IoT e comunicação remota.
Explorar →microdot
Servidor HTTP mínimo — rotas, sessões, login, SSE e WebSockets.
Explorar →aioble
Bluetooth Low Energy assíncrono — periféricos, advertising e GATT.
Explorar →Explorar por placa
HardwareSelecione sua OpenMV Cam para ver seu pinout, especificações e referência rápida específica da placa.

OpenMV N6 Novo
STM32N6 com NPU integrada — o primeiro MCU acelerado por IA da STMicro.
Explorar →
OpenMV AE3 Novo
Alif Ensemble E3 — classe fusion Cortex-M55 com NPU Ethos-U55.
Explorar →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 a 600 MHz com 32 MB de SDRAM externa.
Explorar →
OpenMV H7 Plus
STM32H743 com 32 MB de SDRAM externa e sensor OV5640 de 5MP.
Explorar →
OpenMV H7
STM32H743 Cortex-M7 com módulo de sensor de imagem removível.
Explorar →
Arduino Nicla Vision
Placa STM32H747 compacta de 23 × 23 mm com sensor integrado.
Explorar →
Arduino Portenta
STM32H747 com 8 MB de SDRAM e suporte ao Vision Shield.
Explorar →
Arduino Giga
STM32H747 com 8 MB de SDRAM e suporte ao Vision e Display Shield.
Explorar →Shields
ComplementosPlacas complementares que se conectam à OpenMV Cam — rede, controle de motores, displays e mais.

Gigabit PoE Shield
Gigabit Ethernet com PoE para streaming de maior largura de banda.
Explorar →
Servo Shield
Controle até 4 servos consumindo até 5A enquanto alimenta a câmera, entrada de 6–36V.
Explorar →
Battery Shield
Entrada de bateria de 1,8–5,5V via conector DC barrel jack.
Explorar →
Touch LCD Shield
LCD SPI de 2,3" com toque capacitivo múltiplo e Qwiic.
Explorar →
PoE Shield
Ethernet 10/100 com Power-over-Ethernet.
Explorar →
PIR Shield
Gatilho de movimento em standby de 6µA com LED branco e IR de 850 nm.
Explorar →
CAN/RS232 Shield
CAN-FD de 8 Mb/s mais RS-232 de 1 Mb/s em um único shield.
Explorar →
RS422/RS485 Shield
Serial diferencial de 10 Mb/s para barramentos industriais.
Explorar →Sensores
Módulos de câmeraMódulos de câmera e adaptadores de sensores que se conectam ao conector placa a placa — visão colorida, monocromática, térmica e baseada em eventos.

PS5520 5MP HDR Camera
Sensor HDR de 5MP — alto alcance dinâmico para iluminação difícil.
Explorar →
Multispectral Thermal (PAG7936)
Cor com obturador global de 1MP + térmico FLIR Lepton em um módulo.
Explorar →
Multispectral Thermal (OV5640)
Cor com obturador rolante de 5MP + térmico FLIR Lepton em um módulo.
Explorar →
Multispectral Event Camera
Sensor de eventos GENX320 + cor PAG7936 em um módulo.
Explorar →
GENX320 Event Camera
Visão baseada em eventos Prophesee — precisão temporal de microssegundos.
Explorar →
FLIR Boson Adapter
Adaptador para FLIR Boson / Boson+ — térmico de maior resolução.
Explorar →
FLIR Lepton Adapter
Adaptador para núcleos térmicos FLIR Lepton 1.x / 2.x / 3.x.
Explorar →
Global Shutter Camera Module
Sensor monocromático de obturador global para captura de movimento rápido.
Explorar →Mais recursos
MicroPythonLinguagem OpenMV MicroPython
Referência da linguagem, sintaxe e semântica do runtime principal.
Diferenças em relação ao CPython
Onde o MicroPython diverge do Python padrão — módulos, builtins e sintaxe.
Internos do OpenMV MicroPython
Compilador, runtime, módulos nativos e portabilidade do MicroPython para novos MCUs.
Comunidade & links
ExternoPágina inicial do OpenMV
Produtos, aplicações, downloads e notícias.
Fóruns
Discussão da comunidade, ajuda e compartilhamento de projetos.
OpenMV no GitHub
Fontes de firmware, IDE e exemplos — issues e pull requests são bem-vindos.
MicroPython no GitHub
Fontes upstream do MicroPython — o que o OpenMV usa como base.