Thị giác máy,
đơn giản hóa.
Phát hiện khuôn mặt trực tiếp, theo dõi AprilTag, quét QR và YOLO. Tất cả trên thiết bị bằng MicroPython thuần túy. Không cần máy tính chủ, không cần đám mây.
Mở IDE
Tải xuống và cài đặt OpenMV IDE cho Windows, macOS, hoặc Linux và khởi chạy IDE.
Kết nối camera của bạn
Cắm OpenMV Cam vào máy tính qua USB. Đèn LED nhịp tim màu xanh lam nhấp nháy khi sẵn sàng.
Chạy tập lệnh đầu tiên của bạn
Nhấp vào nút kết nối hình ổ cắm trong IDE, sau đó nhấn mũi tên phát màu xanh lá để chạy tập lệnh đầu tiên của bạn.
Xin chào thế giới
Ví dụ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")
Theo dõi người trong thời gian thực
Mô hình YOLOv8 tích hợp là bộ phát hiện người một lớp — lượng tử hóa int8 và được lưu trong ROM.
/rom/yolov8n_192.tflite — không cần thẻ SD hay tải xuống.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")
Xác định vị trí và nhận dạng AprilTag
AprilTag là các điểm đánh dấu 2D fiducial — chịu đựng được nhiễu chuyển động và che khuất một phần, đồng thời cung cấp tư thế 3D đầy đủ.
x/y/z và xoay 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")
Phát hiện khuôn mặt với BlazeFace
BlazeFace của Google là bộ phát hiện khuôn mặt TensorFlow Lite nhẹ trả về hộp giới hạn cùng sáu điểm đặc trưng trên mỗi khuôn mặt.
/rom/blazeface_front_128.tflite — đã lượng tử hóa sẵn, không cần tải xuống.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")
Quét mã QR từ nguồn cấp trực tiếp
Bộ giải mã QR tích hợp xử lý các mã bị nghiêng, biến dạng và che khuất một phần.
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")
Tìm vùng màu (blob)
find_blobs trả về các vùng điểm ảnh liên kết khớp với một hoặc nhiều ngưỡng LAB.
pixels_threshold lọc các phát hiện nhỏ; merge=True nối các vùng màu (blob) chồng lên nhau.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")
Đọc mã vạch 1D
Tìm mã vạch 1D ở bất kỳ đâu trong khung hình và giải mã nội dung của chúng.
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")
Theo dõi 21 điểm đặc trưng bàn tay
Mô hình Hand Landmarks của Google MediaPipe đặt 21 khớp trên mỗi bàn tay được phát hiện — cổ tay, khớp ngón tay và đầu ngón tay.
/rom/hand_landmarks_full_224.tflite — chạy độc lập tại đây, không cần phát hiện lòng bàn tay ở trước.ml.utils.draw_skeleton vẽ tất cả 21 khớp và kết nối trong một lần gọi.Mới với OpenMV?
Bắt đầu với hướng dẫn từng bước — bao gồm thiết lập phần cứng, IDE, các tập lệnh cơ bản và mẹo cho dự án thực tế đầu tiên của bạn.
Thư viện cốt lõi
APIPhần cứng, camera, xử lý ảnh, ndarray, ML, đa nhiệm, mạng, máy chủ web và Bluetooth — tất cả từ MicroPython.
machine
Phần cứng cấp thấp: GPIO, SPI, I²C, UART, PWM, ADC và bộ định thời.
Khám phá →csi
Điều khiển camera: định dạng điểm ảnh, kích thước khung hình, thời gian phơi sáng, độ khuếch đại và cân bằng trắng.
Khám phá →image
Thị giác máy: vùng màu (blob), cạnh, đường thẳng, vòng tròn, đặc trưng và vẽ.
Khám phá →ulab
Tính toán số trên thiết bị — ndarray, FFT và đại số tuyến tính.
Khám phá →ml
Suy luận mạng nơ-ron trên thiết bị — phân loại, phát hiện và phân vùng.
Khám phá →asyncio
Đa nhiệm hợp tác — chạy camera, mạng và I/O song song.
Khám phá →network
Wi-Fi, Ethernet và socket cho IoT và truyền thông từ xa.
Khám phá →microdot
Máy chủ HTTP tối giản — routes, session, đăng nhập, SSE và WebSocket.
Khám phá →aioble
Bluetooth Low Energy bất đồng bộ — ngoại vi, quảng bá và GATT.
Khám phá →Khám phá theo bo mạch
Phần cứngChọn OpenMV Cam của bạn để xem sơ đồ chân, thông số kỹ thuật và tài liệu tham khảo nhanh theo bo mạch.

OpenMV N6 Mới
STM32N6 với NPU tích hợp — MCU AI-accelerated đầu tiên của STMicro.
Khám phá →
OpenMV AE3 Mới
Alif Ensemble E3 — Cortex-M55 hạng tích hợp với NPU Ethos-U55.
Khám phá →
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 ở 600 MHz với 32 MB SDRAM ngoài.
Khám phá →
OpenMV H7 Plus
STM32H743 với 32 MB SDRAM ngoài và cảm biến OV5640 5MP.
Khám phá →
OpenMV H7
STM32H743 Cortex-M7 với mô-đun cảm biến ảnh có thể tháo rời.
Khám phá →
Arduino Nicla Vision
Bo mạch STM32H747 nhỏ gọn 23 × 23 mm với cảm biến tích hợp.
Khám phá →
Arduino Portenta
STM32H747 với 8 MB SDRAM và hỗ trợ Vision Shield.
Khám phá →
Arduino Giga
STM32H747 với 8 MB SDRAM, hỗ trợ Vision và Display Shield.
Khám phá →Shield
Mở rộngCác bo mạch mở rộng cắm vào OpenMV Cam — mạng, điều khiển động cơ, màn hình và nhiều hơn nữa.

Gigabit PoE Shield
Gigabit Ethernet với PoE cho phát trực tuyến băng thông cao hơn.
Khám phá →
Servo Shield
Điều khiển tối đa 4 servo tiêu thụ tới 5A trong khi cấp nguồn cho camera, đầu vào 6–36V.
Khám phá →
Battery Shield
Đầu vào pin 1,8–5,5V qua giắc cắm DC.
Khám phá →
Touch LCD Shield
Màn hình LCD SPI 2,3" với cảm ứng đa điểm và Qwiic.
Khám phá →
PoE Shield
Ethernet 10/100 với Power-over-Ethernet.
Khám phá →
PIR Shield
Kích hoạt chuyển động chờ 6µA cùng với đèn trắng và IR 850 nm.
Khám phá →
CAN/RS232 Shield
CAN-FD 8 Mb/s cùng RS-232 1 Mb/s trong một shield.
Khám phá →
RS422/RS485 Shield
Giao tiếp serial vi sai 10 Mb/s cho bus công nghiệp.
Khám phá →Cảm biến
Mô-đun cameraCác mô-đun camera và bộ chuyển đổi cảm biến cắm vào đầu nối bo mạch — màu sắc, đơn sắc, nhiệt và thị giác dựa trên sự kiện.

PS5520 5MP HDR Camera
Cảm biến HDR 5MP — dải động cao cho điều kiện ánh sáng khắc nghiệt.
Khám phá →
Multispectral Thermal (PAG7936)
1 cảm biến màu cửa trập toàn cục + cảm biến nhiệt FLIR Lepton trên một mô-đun.
Khám phá →
Multispectral Thermal (OV5640)
5MP cảm biến màu cửa trập cuộn + cảm biến nhiệt FLIR Lepton trên một mô-đun.
Khám phá →
Multispectral Event Camera
Cảm biến sự kiện GENX320 + màu sắc PAG7936 trên một mô-đun.
Khám phá →
GENX320 Event Camera
Thị giác dựa trên sự kiện Prophesee — độ chính xác thời gian tính theo micro giây.
Khám phá →
FLIR Boson Adapter
Bộ chuyển đổi cho FLIR Boson / Boson+ — nhiệt độ phân giải cao hơn.
Khám phá →
FLIR Lepton Adapter
Bộ chuyển đổi cho lõi nhiệt FLIR Lepton 1.x / 2.x / 3.x.
Khám phá →
Global Shutter Camera Module
Cảm biến cửa trập toàn cục đơn sắc để chụp chuyển động nhanh.
Khám phá →