ראייה ממוחשבת,
פשוטה ונגישה.
זיהוי פנים בזמן אמת, מעקב AprilTag, סריקת QR ו-YOLO. הכל על המכשיר עצמו, ב-MicroPython טהור. ללא מחשב מארח, ללא ענן.
פתח את ה-IDE
הורד והתקן את OpenMV IDE עבור Windows, macOS, או Linux, והפעל את ה-IDE.
חבר את המצלמה
חבר את ה-OpenMV Cam למחשב שלך באמצעות USB. נורת LED כחולה מהבהבת כשהמצלמה מוכנה.
הרץ את הסקריפט הראשון שלך
לחץ על כפתור החיבור (אייקון שקע) ב-IDE, ואז לחץ על חץ ההפעלה הירוק להרצת הסקריפט הראשון שלך.
שלום עולם
דוגמאות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 הם סמנים פידוציאליים דו-מימדיים — עמידים לטשטוש תנועה וחסימה חלקית, ומספקים יציבה תלת-מימדית מלאה.
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 מאחד blobs חופפים.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 נקודות מפתח של היד
מודל Hand Landmarks של Google MediaPipe ממקם 21 מפרקים על כל יד שזוהתה — שורש כף יד, פרקי אצבעות וקצות אצבעות.
/rom/hand_landmarks_full_224.tflite — פועל עצמאית כאן, ללא זיהוי כף יד במעלה הזרם.ml.utils.draw_skeleton מצייר את כל 21 המפרקים וחיבוריהם בקריאה אחת.חדש ב-OpenMV?
התחל עם המדריך השלב-אחר-שלב — הוא מכסה הגדרת חומרה, ה-IDE, סקריפטים בסיסיים וטיפים לפרויקט הראשון שלך.
ספריות ליבה
APIחומרה, מצלמות, עיבוד תמונה, ndarrays, ML, ריבוי משימות, רשת, שרתי אינטרנט ו-Bluetooth — הכל מ-MicroPython.
machine
חומרה ברמה נמוכה: GPIO, SPI, I²C, UART, PWM, ADC וטיימרים.
גלה ←csi
שליטה במצלמה: פורמטי פיקסל, גדלי פריים, חשיפה, הגברה ואיזון לבן.
גלה ←image
ראייה ממוחשבת: blobs, קצוות, קווים, עיגולים, מאפיינים וציור.
גלה ←ulab
מחשוב נומרי על המכשיר — ndarrays, FFTs ואלגברה לינארית.
גלה ←ml
הסקת מסקנות של רשת נוירונים על המכשיר — סיווג, זיהוי ופילוח.
גלה ←asyncio
ריבוי משימות שיתופי — הפעלת מצלמה, רשת וקלט/פלט במקביל.
גלה ←network
Wi-Fi, Ethernet ושקעים ל-IoT ותקשורת מרחוק.
גלה ←microdot
שרת HTTP מינימלי — נתיבים, סשנים, כניסה, SSE ו-WebSockets.
גלה ←aioble
Bluetooth Low Energy אסינכרוני — היקפים, פרסום ו-GATT.
גלה ←גלה לפי לוח
חומרהבחר את OpenMV Cam שלך כדי לראות את מפת הפינים, המפרטים וסיכום מהיר ספציפי ללוח.

OpenMV N6 חדש
STM32N6 עם NPU מובנה — ה-MCU הראשון של STMicro עם האצת AI.
גלה ←
OpenMV AE3 חדש
Alif Ensemble E3 — Cortex-M55 מסדרת Fusion עם NPU מסוג Ethos-U55.
גלה ←
OpenMV RT1062
NXP i.MX RT1062 Cortex-M7 ב-600 MHz עם 32 MB SDRAM חיצוני.
גלה ←
OpenMV H7 Plus
STM32H743 עם 32 MB SDRAM חיצוני וחיישן OV5640 בעל 5MP.
גלה ←
OpenMV H7
STM32H743 Cortex-M7 עם מודול חיישן תמונה נשלף.
גלה ←
Arduino Nicla Vision
לוח STM32H747 קומפקטי בגודל 23 × 23 מ"מ עם חיישן מובנה.
גלה ←
Arduino Portenta
STM32H747 עם 8 MB SDRAM ותמיכה ב-Vision Shield.
גלה ←
Arduino Giga
STM32H747 עם 8 MB SDRAM, תמיכה ב-Vision Shield ו-Display Shield.
גלה ←מגנים
תוספותלוחות תוספת המתחברים ל-OpenMV Cam — רשת, בקרת מנועים, תצוגות ועוד.

Gigabit PoE Shield
Gigabit Ethernet עם PoE להזרמת נתונים ברוחב פס גבוה יותר.
גלה ←
Servo Shield
הפעל עד 4 סרוו-מנועים הצורכים עד 5A תוך הזנת המצלמה, כניסת 6–36V.
גלה ←
Battery Shield
כניסת סוללה 1.8–5.5V דרך שקע ברל DC.
גלה ←
Touch LCD Shield
מסך SPI LCD בגודל 2.3" עם מגע מרובה קפסיטיבי ו-Qwiic.
גלה ←
PoE Shield
Ethernet 10/100 עם Power-over-Ethernet.
גלה ←
PIR Shield
טריגר תנועה בהמתנה של 6µA עם תאורת לבן ו-IR ב-850 nm.
גלה ←
CAN/RS232 Shield
CAN-FD ב-8 Mb/s ו-RS-232 ב-1 Mb/s במגן אחד.
גלה ←
RS422/RS485 Shield
תקשורת טורית דיפרנציאלית ב-10 Mb/s לאפיקים תעשייתיים.
גלה ←חיישנים
מודולי מצלמהמודולי מצלמה ומתאמי חיישן המתחברים לחיבור לוח-ללוח — ראייה צבעונית, מונוכרומטית, תרמית ומבוססת-אירועים.

PS5520 5MP HDR Camera
חיישן HDR בעל 5MP — טווח דינמי גבוה לתנאי תאורה קשים.
גלה ←
Multispectral Thermal (PAG7936)
צבע גלובל-שאטר 1MP + תרמי FLIR Lepton במודול אחד.
גלה ←
Multispectral Thermal (OV5640)
צבע רולינג-שאטר 5MP + תרמי 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
חיישן מונוכרומטי גלובל-שאטר ללכידת תנועה מהירה.
גלה ←