v5.0.0

v5.0.0 היא מהדורה ראשית. בראש הרשימה: קישור המארח OpenMV Protocol V2 שנבנה מחדש, API מצלמה מבוסס-מחלקה csi שמתאים גם ללוחות מרובי-מצלמות, יעד simulator הניתן להרצה, הערכת תנוחה יחידה של MoveNet, MicroPython 1.28, ואצווה גדולה של תיקונים למצלמה, ל-ML ול-ToF. היא גם כוללת מספר שינויי API שוברי-תאימות — כל שינוי הנראה למשתמש מאז v4.8.1 מפורט להלן, יחד עם אופן ההגירה המדויק.

עיקרי הדברים

  • OpenMV Protocol V2. קישור המארח/IDE נבנה מחדש מהיסוד: ממוסגר, ממוספר, מאומת ב-CRC, עם ערוצים מרובבים עבור stdio, תצוגת התצוגה המקדימה של הזרם, ונתוני משתמש. מודול protocol חדש מאפשר לסקריפטים ליצור תעבורות וערוצי נתונים משלהם. ראו את שינויי מודול הפרוטוקול.

  • API מצלמה csi מבוסס-מחלקה. import sensor הופך ל-import csi / csi.CSI, עם תמיכה מובנית במצלמות מרובות. ראו את הגירת csi.

  • יעד simulator. הקושחה נבנית ורצה כעת תחת הסימולטור Arm FVP / QEMU (MPS2/MPS3), כולל הדמיית NPU, ROMFS ו-PSRAM — סקריפטי ראייה ו-ML יכולים לרוץ ללא חומרה מחוברת.

  • הערכת תנוחה של MoveNet. מעבד-אחרי חדש MoveNet בתוספת מודל movenet_singlepose_192.tflite מצורף על OpenMV AE3 ו-N6.

  • MicroPython 1.28 ו-ulab 6.12.0, כלי ST Edge AI 4.0, וה-OpenMV SDK המוצא החוצה (ראו את שינויי הבנייה / הכלים).

תכונות חדשות

  • מודול protocol — יצירת תעבורות וערוצי נתונים מותאמים מתוך Python: protocol.init(), protocol.register(), protocol.is_active(), ומחלקה protocol.ProtocolChannel עם send_event(), בתוספת קבועים CHANNEL_FLAG_* ו-CHANNEL_ID_*. החתימה הסופית של protocol.init() מתועדת בשינויי מודול הפרוטוקול.

  • protocol.CBORChannel — חבילת הרחבה קפואה של protocol המסדרת שדות בעלי שם ל-CBOR עם רכיבי תצוגה (label, depth) ובקרות אינטראקטיביות (toggle, slider, select).

  • זיכרון מארח והתבוננות בזרם — פקודת פרוטוקול SYS_MEMORY חדשה חושפת ל-IDE סטטיסטיקות זיכרון זמן-ריצה לכל מאגר, ו-ioctl זרם חדש STREAM_SOURCE מאפשר למארח לבחור איזו מצלמה מזינה את התצוגה המקדימה בלוחות מרובי-מצלמות (גרסת פרוטוקול 1.0.1).

  • הזרמה מרובת-מצלמותcsi.CSI מקבל ארגומנט stream= הבוחר איזה חיישן מזין את התצוגה המקדימה של ה-IDE; כותרת פריים הזרם נושאת כעת FPS מוחלק ב-EMA כך שה-IDE מציג את קצב הפריימים ללא קוד תבנית של clock.fps(). ראו את הגירת csi ואת המשכי csi.

  • חיישן אירועים GenX320 — מסנן Spatio-Temporal Contrast חדש (csi.IOCTL_GENX320_SET_STC עם המצבים csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY ו-csi.GENX320_STC_TRAIL) וקריאת אירועים גולמית (csi.IOCTL_GENX320_READ_EVENTS_RAW), עם סקריפטי דוגמה חדשים.

  • MoveNet — מעבד-אחרי MediaPipe חדש לתנוחה יחידה (ארגומנטים threshold, nms_threshold, nms_sigma) המחזיר ((x, y, w, h), score, keypoints) עם מערך נקודות מפתח COCO בן 17 מפרקים; מודל movenet_singlepose_192.tflite ודוגמה מצורפים על AE3 ו-N6.

  • ml.utils.draw_predictions() — ארגומנט אופציונלי חדש scores= מצרף ביטחון לכל תווית, הגופן ועובי המסגרת מתאימים כעת אוטומטית לרוחב התמונה, ומצב חדש format="point" מצייר סמן מרכז עבור גלאי centerpoint/peak.

  • מחלקת display.TVDisplay החדשה (עם ioctl() גנרי) מחליפה את מודול tv העצמאי. ראו את שינויי מודול התצוגה.

  • גלאי find_line_segments() חדש (ED-Lines) — זמין כעת בכל הבנייות, עם ארגומנט threshold= חדש. ראו את שינויי מודול image.

שינויים ושיפורים נוספים

  • MicroPython עודכן ל-1.28.0 מבסיס v4.8.1. מוסיף מצב כרטיס SD מהיר על H5/H7/N6, שעון AHB5 במצב חסכון-בחשמל, ופיני JTAG הניתנים לשליטה כ-GPIOs על OPENMV_AE3.

  • ulab עודכן ל-6.12.0 — אופרטור % מובנה על ndarrays (הפונקציה העוזרת ml.utils.mod() הוסרה; ראו את שינויי ספריית ה-ML).

  • כלי ST Edge AI עודכנו ל-4.0 — משפיעים על קומפילציה ופריסה של מודלי ST על המכשיר.

  • ml.Model — ארגומנט מילת-המפתח load_to_fb הוסר; זיכרון המודל מנוהל אוטומטית על ידי המקצה המאוחד.

  • image.Image.scale() במקום — הגדלת תמונה במקום (לדוגמה img.scale(x_scale=2.0, y_scale=2.0)) מגדילה כעת את חוצץ הפריימים (frame buffer) כדי להתאים במקום להיכשל.

  • חוצץ stdio גדול יותר — חוצץ הטקסט (buffer) המוגדר כברירת מחדל ל-IDE גדל מ-512 ל-1024 בתים על OpenMV 2/3/4, Nicla Vision, AE3 ו-N6, כך שמקבצי print() גדולים יותר אינם נחתכים.

  • זרימת אירועי מארח חלקה יותר — אירועי NOTIFY של stdout למארח מווסתים לכל היותר לאחד לכל קריאת מארח במקום אחד לכל print() החוצה את סף החוצץ המעגלי (buffer).

  • פעולות ארוכות הניתנות להפסקה — לולאות המתנה ארוכות של ציור תמונה, GPU (Nema/Dave2D), ו-NPU משרתות כעת אירועים במרווח דטרמיניסטי, כך שסקריפטים נשארים מגיבים לכפתור Stop של ה-IDE במהלך עבודה כבדה.

תיקוני באגים

מצלמה וחיישנים:

  • find_apriltags() כבר אינו משבש תוצאות על לוחות D-cache/GPU (N6, AE3), וכעת עובד על ה-AE3.

  • תוקן פלט תמונת Bayer מ-ISP של STM32 N6 לאחר החלפת פורמטי פיקסל.

  • תוקנה זליגה ירוקה של איזון-לבן-אוטומטי בסצנות בהירות ומקרה של סטטיסטיקות AWB לא-מאותחלות בפריים הראשון; הוגבל clamp של גמא ב-ISP של STM32 (32 ל-63) לטווח רחב יותר של גמא/ניגודיות/בהירות.

  • חשיפה-אוטומטית של PS5520 כבר אינה מתנדנדת באור בהיר; התנהגות AEC/AGC של PAG7936 עוצבה מחדש (בקרה משולבת, תקרת הגבר (gain) מתוקנת).

  • העלאת קושחת מיקוד-אוטומטי של OV5640 שוחזרה על Portenta/Nicla (תיקון MIMXRT I2C SUSPEND).

  • תוקן קיפאון לכידת מצלמה כאשר מגבלת קצב-פריימים משולבת עם לכידת JPEG (STM32).

  • קריאות csi.IOCTL_GENX320_READ_EVENTS_RAW של GenX320 כבר אינן מערבבות את התצוגה המקדימה של ה-IDE.

  • csi.IOCTL_LEPTON_SET_MODE של FLIR Lepton דרך csi.CSI.ioctl() עובד כעת כאשר הוא נקרא עם ארגומנט יחיד.

עיבוד תמונה:

  • תוקן מיזוג אלפא של draw_image() / blend() כאשר מסופקת מסכה.

  • תוקן סדר ביטים של קידוד/פענוח PNG בן 1-ביט (BINARY) ופענוח גווני-אפור-מ-1-ביט.

  • תוקנו מטא-נתוני משך/FPS של הקלטת mjpeg.Mjpeg.

  • תוקן גלישת מחסנית של פענוח-JPEG-תוכנתי על לוחות בעלי מחסנית קטנה (OpenMV M7).

  • תוקן זיהוי-אוטומטי של פורמט קבצי JPEG/PNG על מארחים שאינם ARM (simulator).

Time-of-Flight:

  • tof.read_depth() כבר אינו מעלה חריגה על שגיאות טווח חולפות ומשתקם אוטומטית מתקלות אפיק; ברירת המחדל של פסק-הזמן של tof.read_depth() / tof.snapshot() היא כעת 100 ms (ראו את שינויי tof).

  • תוקן שיבוש נתוני עומק מרובי-אזורים של VL53L5CX / VL53L8CX.

ML ומערכת:

  • ה-NPU מנוקה כראוי כאשר ההסקה מופסקת על ה-N6.

  • התעוררות מ-deep-sleep / standby שוחזרה על ה-N6; קיפאון הקפיצה-למאתחל (bootloader) של ה-AE3 תוקן.

  • תוקנו דליפות זיכרון באיפוס-רך (STM32 Nema GPU) וחוצץ פריימים (frame buffer) עזר שנאסף בטרם עת.

  • ערוצי פרוטוקול מותאמים של Python שורדים כעת איתחול-רך, תעבורת ה-USB משתקמת מאיפוס אפיק / נקודות-קצה תקועות, והצפת פסיקות USB SOF תוקנה.

תמיכת חומרה ולוחות

  • OpenMV N6 — Ethernet מאופשר (רישות קווי); NPU AXI SRAM (1.75 MB) מוזג למאגר חולף משותף ליותר RAM בין הסקות; התעוררות מ-deep-sleep/standby; מודלי TFLite ומפלי Haar מצורפים ב-ROMFS.

  • OpenMV AE3 — מודלים ומפלים מצורפים ב-ROMFS; cbor2 קפוא לתוך הקושחה.

  • Alif (AE3, N6) — התעוררות machine.RTC חסכונית-בחשמל.

  • AprilTags ברזולוציה גבוההfind_apriltags() ברזולוציית-חיישן-מלאה על ה-AE3, Arduino Giga ו-Arduino Portenta H7.

  • יעדי simulator — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), עם הדמיית NPU, ROMFS ו-PSRAM.

שינויי API שוברי-תאימות

שבירות API הנראות למשתמש בין v4.8.1 ל-v5.0.0. היקף: מודולי C של Python ב-modules/ וספריות Python ב-scripts/libraries/.

כל שינוי מתויג בהשפעתו:

  • major — רוב הסקריפטים זקוקים לעריכות.

  • minor — API צר; משפיע רק על סקריפטים שהשתמשו בו.

  • behavior — אותו API, תוצאות שונות; בדקו מחדש סקריפטים מכוונים.

  • tooling — משפיע רק על בנייה ממקור / forks במורד הזרם.

השינויים מקובצים לפי השפעה בסדר הזה — major תחילה, אחר כך minor, behavior ו-tooling. אם אתם רק רוצים להעביר את הקוד, קפצו לרשימת ההגירה בסוף לקבלת רשימת מטלות מקוצרת. כל hash של commit מקושר ל-diff שלו ב-GitHub.

sensor הוחלף ב-csi (major)

כל דוגמה רשמית נכתבה מחדש כדי לזנוח את import sensor לטובת import csi. ה-API הפונקציונלי הישן ברמת המודול (sensor.reset(), sensor.set_pixformat(), …) מוחלף על ידי ה-API מבוסס-המחלקה csi.CSI, המתאים באופן טבעי ללוחות עם מצלמות מרובות (csi0, csi1, …) ונדרש לכל התכונות החדשות (הארגומנט stream=, הזרמה מרובת-חיישנים, …).

ה-qstr sensor עדיין מחובר ב-modules/py_csi.c עבור בנייות קושחה תואמות-לאחור, אך הוא לא יקבל תכונות חדשות, וכל הדוגמאות, התיעוד וקוד הספריות מניחים כעת csi.

Commits: 945c5853c, 61f835b7e

ממודול למחלקה

לפני (sensor):

import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()

אחרי (csi):

import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()

זוגות setter/getter כווצו לפונקציות גישה משולבות

ב-API החדש מתודה הנקראת ללא ארגומנטים מחזירה את הערך הנוכחי; הנקראת עם ערך מגדירה אותו. הקידומות set_*/get_* נעלמו. שמות מתודות גם איבדו את הסיומת ing היכן שהייתה מיותרת (windowingwindow). העמודה של ה-API החדש מקושרת לתיעוד הייחוס.

sensor (ישן)

csi.CSI (חדש)

set_pixformat(fmt) / get_pixformat()

pixformat([fmt])

set_framesize(sz) / get_framesize()

framesize([sz])

set_framerate(fps) / get_framerate()

framerate([fps])

set_windowing(roi) / get_windowing()

window([roi])

set_framebuffers(n) / get_framebuffers()

framebuffers([n])

set_gainceiling(g)

gainceiling([g])

set_brightness(v)

brightness([v])

set_contrast(v)

contrast([v])

set_saturation(v)

saturation([v])

set_quality(v)

quality([v])

set_colorbar(b)

colorbar([b])

set_special_effect(e)

special_effect([e])

set_lens_correction(...)

lens_correction(...)

set_hmirror(b) / get_hmirror()

hmirror([b])

set_vflip(b) / get_vflip()

vflip([b])

set_transpose(b) / get_transpose()

transpose([b])

set_auto_rotation(b) / get_auto_rotation()

auto_rotation([b])

set_auto_gain(b, [db, ceiling]) / get_gain_db()

auto_gain(...) / gain_db()

set_auto_exposure(b, [us]) / get_exposure_us()

auto_exposure(...) / exposure_us()

set_auto_whitebal(b, [rgb]) / get_rgb_gain_db()

auto_whitebal(...) / rgb_gain_db()

set_auto_blc(b, [regs]) / get_blc_regs()

auto_blc(...) / blc_regs()

set_color_palette(p) / get_color_palette()

color_palette([p])

set_frame_callback(cb)

frame_callback(cb)

set_vsync_callback(cb)

vsync_callback(cb)

get_id()

cid()

פונקציות ללא מקבילה ישירה

sensor (הוסר)

במה להשתמש במקום

sensor.alloc_extra_fb(w, h, pixfmt) / sensor.dealloc_extra_fb()

image.Image (w, h, pixfmt) — תמונה רגילה המוקצית בערימה. חוצץ הפריימים כבר אינו מחולק לחוצצי משתמש.

sensor.skip_frames(time=..., frames=...)

csi.CSI.snapshot() — דילוג-פריימים מקופל לתוך snapshot דרך הארגומנטים time= / frames= שלו.

sensor.disable_delays(...) / sensor.disable_full_flush(...)

הועברו לבנאי csi.CSI: csi.CSI(delays=False) / csi.CSI(fflush=False).

sensor.get_frame_available()

csi.CSI.readable()

sensor.get_fb()

הוסר. התמונה המוחזרת על ידי csi.CSI.snapshot() היא הידית הקנונית.

sensor.set_framebuffers(n, expand=True)

csi.CSI.framebuffers() — הארגומנט expand הוסר (ראו את המשכי csi).

חדש ב- csi.CSI

  • csi.CSI(stream=True|False) — בורר בזמן-בנייה הבוחר איזה CSI מזין את חוצץ הפריימים של התצוגה המקדימה (מחליף את הארגומנט update= לכל-snapshot, ראו את המשכי csi).

  • csi.CSI(cid=N) / csi.devices() — תמיכה במספר CSI עבור לוחות עם יותר מחיישן תמונה אחד.

מודול image — שיפוץ חתימות (major)

מודול image ראה את שינוי ה-API הרחב ביותר אחרי csi — חתימות ציור, אובייקטי תוצאה ומספר גלאים השתנו כולם.

ארגומנטי קואורדינטות חייבים להיות tuples

modules/py_image.c נכתב מחדש מעל mp_arg_parse_all. כל מתודות הציור / הפיקסל שקיבלו בעבר ארגומנטים מיקומיים נפרדים x, y, ... דורשות כעת את הקואורדינטות הללו ארוזות ל-tuple יחיד.

Commits: d18bbc472, 0c60c94b9 (PR #3061)

לפני

אחרי

img.draw_arrow(x0, y0, x1, y1, color=...)

img.draw_arrow((x0, y0, x1, y1), color=...)

img.draw_line(x0, y0, x1, y1, ...)

img.draw_line((x0, y0, x1, y1), ...)

img.draw_cross(x, y, ...)

img.draw_cross((x, y), ...)

img.draw_circle(x, y, r, ...)

img.draw_circle((x, y, r), ...)

img.draw_rectangle(x, y, w, h, ...)

img.draw_rectangle((x, y, w, h), ...)

img.draw_string(x, y, "txt", ...)

img.draw_string((x, y), "txt", ...)

img.draw_ellipse(x, y, rx, ry, rot, ...)

img.draw_ellipse((x, y, rx, ry, rot), ...)

img.flood_fill(x, y, ...)

img.flood_fill((x, y), ...)

img.get_pixel(x, y, rgbtuple=...)

img.get_pixel((x, y), rgbtuple=...)

img.set_pixel(x, y, color)

img.set_pixel((x, y), color)

כולן מתודות של image.Image.

אובייקטי תוצאה הומרו ל-attrtuple

סוגים אלה הם כעת אובייקטי attrtuple של MicroPython: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. גישה לתכונה ללא סוגריים היא כעת הקנונית.

Commit: 3399d302e

לפני (בסגנון-מתודה):

img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())

אחרי (בסגנון-תכונה):

img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)

blob ו-histogram ללא שינוי — הם שומרים על הסוגים הקיימים שלהם ועל פונקציות הגישה () (attrtuple אינו יכול לבטא את הערכים המחושבים-בעצלתיים של רכיב (blob) או את פונקציות הגישה מקבלות-הארגומנטים של היסטוגרמה).

שינוי שם פרמטר haar של find_features

image.Image.find_features()scale_factor= שונה שמו ל-scale=.

Commit: be4c5cd73

get_regression — כעת תמיד עמיד, נוסף target_size

image.Image.get_regression() משתמש כעת תמיד ברגרסיה העמידה (Theil-Sen). מסלול ה-least-squares המהיר הישן הוסר, כך שמילת המפתח robust= נעלמה — מה שדרש בעבר robust=True הוא כעת ההתנהגות היחידה. ארגומנט חדש target_size=(w, h) (ברירת מחדל (80, 60)) מקטין בקנה-מידה-שטח את אזור העניין (ROI) לפני התאמת ה-Theil-Sen בסדר O(N^2) כך שהוא תמיד רץ על גודל תמונה הגיוני; נקודות הקצה של הקו המותאם ממופות חזרה לקואורדינטות המקור. הדוגמה linear_regression_robust.py נמחקה ו-linear_regression_fast.py שונה שמו ל-linear_regression.py.

Commits: c7c2e69a0, 0ff2afa72

find_line_segments — אלגוריתם חדש

image.Image.find_line_segments() — גלאי ה-LSD הישן הוחלף ב-ED-Lines, והוא קיבל ארגומנט חדש threshold=50. הפלט של סקריפטים שכוונו בעבר יהיה שונה.

Commits: 87da2a7b7, 2c47b5735

ספריית AprilTag הוחלפה

image.Image.find_apriltags() — גלאי ה-AprilTag הוחלף במימוש חדש. קבוצת המשפחות השתנתה:

Commit: e813bada7

המשך מודול csi (minor)

המשכים קטנים יותר של csi מעל הגירת csi.

snapshot(update=…) הוסר

הארגומנט update ב-csi.CSI.snapshot() נעלם. כדי למנוע ממכשיר CSI להזין את חוצץ הפריימים של התצוגה המקדימה, בטלו את ההצטרפות בזמן הבנייה:

csi0 = csi.CSI(stream=False)                  # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img)  # was: ...(update=False, ...)

Commits: 9a8077827, 26b79a2c5

ארגומנט expand של framebuffers() הוסר

csi.CSI.framebuffers() — הארגומנט המיקומי השלישי (expand) נעלם; החתימה היא כעת framebuffers([count]).

Commit: 86cb3a5de

מודול protocol (minor)

משפיע רק על סקריפטים שהפעילו את קישור המארח ישירות. ראו protocol.

timer_ms שונה שמו ל-poll_ms

protocol.init() — הארגומנט timer_ms שונה שמו ל-poll_ms.

protocol.init(..., poll_ms=10)   # was: timer_ms=10

Commits: 8a0635e8c, 95a290607

protocol.poll() הוסר

משימת הפרוטוקול מתוזמנת כעת באופן פנימי. קריאות ל-protocol.poll() יעלו AttributeError.

Commit: 8a0635e8c

ארגומנט התצורה soft_reboot הוסר

protocol.init() — הארגומנט soft_reboot נעלם. כל התעבורות הנוכחיות סובלניות לאיתחולים-רכים, כך שההתנהגות היא כעת ללא תנאי.

Commit: 0bf766aa2

מודולי display (minor)

פלט TV עובר כעת דרך אובייקט display.TVDisplay במקום מודול tv העצמאי. display גם קיבל ioctl() גנרי.

Commits: f0accb389, 1a5a87121, 920c097a0, 9eac55098

מודול tof (behavior)

אותו API כמו קודם; ברירות המחדל וטיפול השגיאות השתנו. ראו tof.

פסק-הזמן ברירת המחדל השתנה

tof.read_depth() ו-tof.snapshot() (הנקראים עם timeout=-1) מוגדרים כעת כברירת מחדל ל-100 ms במקום להמתין ללא הגבלה. העבירו ערך גדול יותר במפורש אם אתם זקוקים להתנהגות הישנה.

Commit: b6772b80d

שחזור אוטומטי

מנהל ההתקן מבצע כעת איפוס-קשיח לאפיק I2C ולחיישן בשגיאות טווח/פסק-זמן. הדוגמאות כבר אינן קוראות ל-tof.reset() במטפלי החריגות שלהן — קוד משתמש שביצע שחזור ידני צריך להסיר אותו (הוא ייאבק בשחזור-האוטומטי החדש).

Commits: b6772b80d, 80ffaa5c3

ספריית ML (behavior)

אותו API, מספרים שונים — בדקו מחדש כל צינור ML מכוון.

עיבוד מקדים מותח כעת במקום letterbox

Normalization משתמש כעת ב-image.SCALE_ASPECT_IGNORE (מתיחה) במקום image.SCALE_ASPECT_EXPAND (letterbox). עיבוד-האחרי NMS עבר גם הוא לקנה-מידה x/y בלתי-תלוי.

הערה

השפעה. גלאים בסגנון YOLO ורגרסורי נקודות מפתח משתפרים בדרך כלל. הדוגמאות BlazeFace, BlazePalm, FaceLandmarks ו-HandLandmarks דורשות כעת חיתוך ריבועי ידני על אזור העניין (ROI) של הקלט — סקריפטי הדוגמה עודכנו; קוד משתמש מותאם חייב לעשות את אותו הדבר.

Commit: 68dc29a33

הפונקציה העוזרת ml.utils.mod() הוסרה

ulab 6.12.0 תומך ב-% על ndarrays באופן מובנה. קוד שייבא mod מ-ml.utils חייב להשתמש ב-a % b.

Commits: 35ece5728, 82fbd858c

בנייה / כלים (tooling)

אף אחד מאלה אינו משפיע על סקריפטי MicroPython. בניית קושחה ממקור דורשת כעת את ה-OpenMV SDK החיצוני (1.6.0, קודם בתוך-העץ). מספר כלי בנייה בתוך-העץ הוסרו וה-N6 עבר למחסנית TinyUSB; forks במורד הזרם צריכים לסקור את היסטוריית מאגר הקושחה — בייחוד את חתימת file_open() שזנחה את הארגומנט buffered שלה.

רשימת הגירה

להעברה נקייה ל-v5.0.0 העבודה הטיפוסית היא:

  1. החליפו import sensor ב-import csi; csi0 = csi.CSI() ותרגמו כל קריאת set_*/get_* לפונקציית הגישה המתאימה של csi.CSI (הגירת csi).

  2. עטפו ב-tuples ארגומנטי קואורדינטות ל-img.draw_*, get_pixel() ו-set_pixel() (שינויי מודול image).

  3. השמיטו את () מפונקציות גישה לתוצאות attrtuple אם אתם רוצים את הצורה האידיומטית החדשה, או השאירו את הסגנון הישן כפי שהוא מכיוון ש-attrtuples עדיין תומכים בפונקציות גישה הניתנות לקריאה (שינויי מודול image).

  4. בדקו את find_line_segments(), get_regression(), וכל בחירת משפחת find_apriltags() (שינויי מודול image).

  5. שנו שם timer_mspoll_ms בקריאות protocol.init(); הסירו את protocol.poll() ואת soft_reboot= (שינויי מודול הפרוטוקול).

  6. עבור זרימות עבודה של ML: שובו ובדקו כל מודל שהצריך קלט letterbox (שינויי ספריית ה-ML).