OpenMV v5.0.0 · MicroPython v1.28 temelinde · belgeler 19 Haziran 2026 tarihinde oluşturuldu

Makine görüşü,
kolaylaştırıldı.

Canlı yüz algılama, AprilTag takibi, QR tarama ve YOLO. Hepsi cihaz üzerinde, saf MicroPython ile. Ana bilgisayar yok, bulut yok.

Yenilikler OpenMV v5.0.0 değişiklik günlüğünü okuyun

Merhaba dünya

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")

Gerçek zamanlı kişi takibi

Yerleşik YOLOv8 modeli, tek sınıflı bir kişi algılayıcısıdır — int8 nicelleştirilmiş ve ROM'a yüklenmiştir.

/rom/yolov8n_192.tflite dosyasından yüklenir — SD kart veya indirme gerekmez.
NPU donanımlı kartlarda gerçek zamanlı çalışır — OpenMV N6 ve AE3.
Roboflow üzerinde eğitilmiş kendi YOLOv8 modelinizi getirin ve aynı şekilde yükleyin.
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'leri bulun ve tanımlayın

AprilTag'ler 2 boyutlu fiducial işaretçilerdir — hareket bulanıklığına ve kısmi tıkanmaya karşı dayanıklıdır ve tam 3D poz bilgisi verir.

Yerleşik algılayıcı — model dosyası veya eğitim gerekmez.
Kimlik ve tam 6-DoF poz döndürür — x/y/z öteleme ve x/y/z döndürme.
Robotik kalibrasyon, AR işaretçileri ve iç mekan konumlandırma için kullanın.
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 ile yüz algılama

Google'ın BlazeFace'i, her yüz için sınırlayıcı kutular ve altı referans noktası döndüren hafif bir TensorFlow Lite yüz algılayıcısıdır.

/rom/blazeface_front_128.tflite dosyasından yüklenir — önceden nicelleştirilmiş, indirme gerekmez.
Her yüzde altı anahtar nokta: gözler, burun, ağız ve kulaklar.
Gizlilik endişesi yok — kareler asla kamerayı terk etmez.
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")

Canlı yayından QR kodu tarama

Yerleşik QR kod çözücü, eğik, bozulmuş ve kısmen gizlenmiş kodları işler.

Her sonuç ayrıca sürüm, ECC düzeyi ve köşe koordinatlarını gösterir.
Sayısal, alfasayısal, ikili ve Kanji veri modları.
Çözülmüş yükü Python dizisi olarak döndürür — kullanıma hazır.
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")

Renk kümesi bulma

find_blobs, bir veya daha fazla LAB eşiğiyle eşleşen bağlı piksel bölgelerini döndürür.

Işığınıza göre eşikleri ayarlayın — önce otomatik kazanç ve otomatik beyaz dengesini devre dışı bırakın.
Tek bir çağrıda çok renkli takip için birden fazla eşik iletin.
pixels_threshold küçük algılamaları filtreler; merge=True örtüşen kümeleri birleştirir.
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")

1D barkodları okuma

Karede herhangi bir yerde 1D barkodları bulun ve yüklerini çözün.

ZBar kütüphanesiyle çalışır — EAN, UPC, Code 39/93/128, Codabar, ITF, ISBN ve DataBar'ı tanır.
En hızlı doğrusal tarama için gri tonlamalı pencereli bir şerit kullanın.
Her sonuçta biçim, yük, döndürme, köşeler ve sınırlayıcı dikdörtgen bulunur.
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 el anahtar noktasını takip etme

Google'ın MediaPipe El Referans Noktaları modeli, algılanan her ele 21 eklem yerleştirir — bilek, boğumlar ve parmak uçları.

/rom/hand_landmarks_full_224.tflite dosyasından yüklenir — burada avuç içi algılama olmadan bağımsız olarak çalışır.
Her el için bir liste döndürür — indeks 0 sol, indeks 1 sağdır.
ml.utils.draw_skeleton tek bir çağrıda 21 eklemin ve bağlantının tamamını çizer.

OpenMV'de yeni misiniz?

Adım adım öğretici ile başlayın — donanım kurulumu, IDE, temel betikler ve ilk gerçek projeniz için ipuçlarını kapsar.

Temel kütüphaneler

Donanım, kameralar, görüntü işleme, ndarray'ler, ML, çoklu görev, ağ iletişimi, web sunucuları ve Bluetooth — hepsi MicroPython'dan.

Tüm kütüphaneleri görüntüle →

Karta göre keşfet

OpenMV Cam'inizi seçerek pin çıkışını, teknik özellikleri ve karta özgü hızlı referansı görüntüleyin.

Desteklenen tüm kartları görüntüle →

Kalkanlar

OpenMV Cam'e takılan eklenti kartları — ağ iletişimi, motor kontrolü, ekranlar ve daha fazlası.

Tüm kalkanları görüntüle →

Sensörler

Karta kart konektörüne takılan kamera modülleri ve sensör adaptörleri — renkli, tek renkli, termal ve olay tabanlı görüş.

Tüm sensörleri görüntüle →

Daha fazla kaynak

Topluluk & bağlantılar