v4.5.6

v4.5.6 היא גרסת הראייה הממוחשבת הגדולה. מודול ה-C של TensorFlow tf הוחלף בחבילת ml חדשה, אגנוסטית למנוע, הנשענת על TensorFlow Lite Micro (TFLM); המרת תמונה→tensor עברה אל image.to_ndarray(), ולוחות דו-ליבתיים עברו אל Open-AMP. ישנם מספר שינויים שוברי-תאימות — קראו אותם להלן לפני שדרוג סקריפטים של ML.

עיקרי הדברים

  • חבילת ml חדשה — מודול ה-tf הישן נכתב מחדש לחבילת ml אגנוסטית למנוע (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf נשמר כ-alias.

  • מנוע TFLM — ה-libtf המיושן הוחלף ב-TensorFlow Lite Micro המבוסס upstream: הסקה מהירה יותר בכ-20% וספריות קטנות יותר.

  • Open-AMP דו-ליבתי — GIGA ו-Portenta H7 משתמשים כעת ב-Open-AMP/RPMsg לתקשורת בין הליבות M7/M4 (מנגנון ה-CM4 הישן הוסר).

  • Bluetooth מובנה — קושחת Bluetooth של CYW43 הופעלה ב-Nicla Vision, ב-Portenta H7 וב-GIGA.

  • MicroPython 1.23.0, ulab 6.5.2 (עם תמיכה ב-ndarray ארבע-ממדי).

  • שובר-תאימות: ה-API של ה-ML השתנה באופן מהותי, ומפלי Haar מושבתים כברירת מחדל ברוב הלוחות — ראו את השינויים שוברי-התאימות.

תכונות חדשות

  • חבילת mlml.Model עם predict() (roi, callback, רשימת ריבוי-קלטים), מאפייני shape/dtype/scale/zero-point לכל tensor, ml.preprocessing.Normalization, ml.utils (NMS) ו-ml.apps (מזהה מילות מפתח MicroSpeech בפייתון טהור עם listen() וזרימה לא-חוסמת timeout=-1, בנוסף ל-draw_predictions()).

  • מערכת מודלים מובנית — מודלים הרשומים ב-models/index.txt מוטמעים באופן מותנה לפי הלוח (FOMO בכל לוחות ה-ML, מודלי שמע בלוחות עם מיקרופונים).

  • image.to_ndarray(dtype, buffer=...) — המרת תמונה ל-ndarray של ulab (אופציונלית במקום).

  • Image() ממערכים גולמיים — ארגומנטי המילת-מפתח החדשים shape=, strides=, scale= בונים תמונות grayscale/RGB565 מרשימות פיקסלים גולמיות.

  • draw_circle() עם החלקת קצוות (anti-aliased).

  • מודול ssl מוקפא לתוך הקושחה ב-GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 ו-Pico.

  • שמע — ל-audio.init() נוסף ארגומנט המילת-מפתח samples= (דגימות PDM לכל ערוץ); gain_db חל כעת על מיקרופוני DFSDM (לדוגמה Nicla Vision).

  • פרוטוקול ניפוי שגיאות — פקודת GET_STATE חדשה מחזירה דגלי run/text/JPEG, גאומטריית פריים וטקסט במנה אחת, וכך מצמצמת הלוך-ושוב מול המארח.

  • דוגמת vuart של Open-AMP לתקשורת בין הליבות.

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

  • MicroPython עודכן ל-1.23.0; ulab ל-6.5.2 עם תמיכה ב-ndarray ארבע-ממדי.

  • הסקה מהירה יותר — מנוע ה-ML שומר מצב/זיכרון מתמשך בין קריאות (מהיר יותר בכ-20%, תומך במודלים מסוג LSTM).

  • get_similarity() יושמה מחדש על מנוע ה-draw_image (תמיכה רחבה יותר בפורמטים/פעולות).

  • morph() ומשפחת המסנן mean() עברו לפענוח ארגומנטים מסוג מילת-מפתח; mask= מקבל כעת תמונה ניתנת לשינוי.

  • פריסת הזיכרון עוצבה מחדש — אזורי DMA מיושרים בחזקת-2, בלוקי GC ניתנים לסידור מחדש, ערמות מרובות; פחות פיצול ערמה מוקדם בלוחות עם זיכרון RAM נמוך; RT1060 מקבל ערמת GC נוספת.

  • WiFi (CYW43) מבוטל כעת באתחול-רך (soft-reset); תצוגת SPI-TV מרוקנת מהמטמון רק את אזור חוצץ הפריימים (frame buffer) לעדכונים חלקים יותר.

תיקוני באגים

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

  • תוקן ביטול-מטמון מקרי של ה-CPU בנתיב חוצץ הפריימים/חיישן ב-STM32 וב-i.MX RT, שעלול היה לשבש נתוני תמונה.

  • תוקנו קריאות I2C תרמיות של MLX90640/MLX90641 בלוחות i.MX RT (העברות גדולות מחולקות כעת למקטעים).

ראייה ממוחשבת (machine learning):

  • תוקנו ב-ml.Model הטיפול ב-load_to_fb, קביעת גודל bytearray של הקלט, בדיקות ndim של ndarray ואימות פורמט/צורת התמונה ב-Normalization.

תמונה / מערכת:

  • נוסף קבוע רמז-הציור החסר image.BLACK_BACKGROUND ובדיקת שפיות של אורך חוצץ תמונה/tensor.

  • תוקנו מצביעי שורש GC של FIR ושל שמע, שעלולים היו לגרום לאוסף לשחרר חוצצים בשימוש.

  • דוגמת Servo Shield משתמשת כעת ב-SoftI2C כך שהיא עובדת בלוחות OpenMV RT.

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

  • Arduino GIGA — תמיכת חיישני HM01B0 / HM0360; Open-AMP דו-ליבתי.

  • Bluetooth — קושחת BT של CYW43 ב-Nicla Vision, ב-Portenta H7 וב-GIGA.

  • Portenta H7 — Open-AMP M7/M4 RPMsg.

  • OpenMV RT1060 — בלוקי ערמת GC נוספים (יותר זיכרון פייתון).

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

שבירות API גלויות-למשתמש בין v4.5.5 ל-v4.5.6. היקף: מודולי C של פייתון ב-modules/ וספריות פייתון ב-scripts/libraries/.

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

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

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

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

  • tooling — משפיע על מנגנוני דו-ליבה / לוח, לא על ה-API של פייתון.

השינויים מקובצים לפי השפעה בסדר זה. אם אתם רק רוצים להסב את הקוד שלכם, דלגו אל רשימת ההסבה בסוף. כל hash של commit מקשר ל-diff שלו ב-GitHub.

מודול tf הוחלף בחבילת ml (major)

מודול ה-C של TensorFlow tf נכתב מחדש לחבילת ml אגנוסטית למנוע (tf נשמר כ-alias תואם-לאחור, אך קוד חדש צריך להשתמש ב-ml). הפונקציות ברמת המודול tf.load, tf.load_builtin_model והמתודות detect()/segment()/הסיווג הוסרו — בנו ml.Model וקראו ל-predict(). ml.Model(path) מחזיר כעת רק את המודל (ללא tuple מסוג (labels, model)); התוויות הן מאפיין model.labels. predict() מחזיר כעת ndarrayים של ulab (לא tuple-ים של מספרים עשרוניים), תומך במודלי ריבוי-קלטים (העבירו רשימה), ו-NMS עבר אל ml.utils; נרמול הקלט עבר אל ml.preprocessing.Normalization. ה-ml.py הישן הוא כעת ml.apps.

Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837

image.unpack() הוסר — השתמשו ב-to_ndarray() (major)

ה-image.unpack() קצר-המועד הוסר; במקומו המירו תמונה ל-tensor באמצעות image.to_ndarray(dtype, buffer=...), והחילו נרמול scale/mean/stdev עם ml.preprocessing.Normalization במקום נתיב שינוי-קנה-המידה של התמונה המובנה הישן.

Commits: 9848eed12, de0d46fa6

ארגומנט scale של מערך-גולמי ב-Image() (minor)

בעת בניית Image ממערך פיקסלים גולמי, ארגומנט ה-scale מקבל כעת טווח (min, max) במקום (scale, add).

Commit: 7b79fb4c7

מפלי Haar מושבתים כברירת מחדל ברוב הלוחות (behavior)

כדי לפנות שטח זיכרון פלאש (flash), זיהוי פנים באמצעות מפל Haar (find_features() / image.HaarCascade()) מושבת כעת כברירת מחדל ב-Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO ו-OpenMV Pure Thermal. סקריפטים המשתמשים במפלי Haar בלוחות אלה חייבים לבנות מחדש את הקושחה כשהתכונה מופעלת.

Commit: 6ce27c910

הפסקת סקריפט ושינוי קנה-מידה של tensor (behavior)

מנפה ה-USB מפסיק כעת סקריפט פעיל באמצעות תכונת ביטול-ה-VM של MicroPython במקום קפיצת PendSV מאולצת (נקי יותר, אך נקודת ההפסקה שונה). שינוי-קנה-המידה של הקלט SCALE_S128_127 תוקן כך שימפה 0–255 ל-‎−128–127 ללא הגבר (gain) שגוי — מודלים הנשענים על שינוי-קנה-המידה הישן (השגוי) יפיקו תוצאות שונות.

Commits: e758a0f95, a4d97c572

מעבד-המשנה CM4 הוחלף ב-Open-AMP (tooling)

מנגנון קושחת מעבד-המשנה CM4 המיושן ב-GIGA / Nicla Vision / Portenta H7 הוסר והוחלף ב-Open-AMP/RPMsg. קוד דו-ליבתי חייב לעבור למודל Open-AMP (סופקה דוגמת vuart).

Commits: 3cc57fea4, 93f2d4c41

רשימת הסבה

להסבה נקייה ל-v4.5.6, העבודה הטיפוסית היא:

  1. הסבת קוד ML אל ml: בנו ml.Model(path), קראו ל-predict(), קראו את model.labels, צפו לפלטי ndarray, והעבירו את הנרמול אל ml.preprocessing.Normalization ואת ה-NMS אל ml.utils (שינוי חבילת ה-ml).

  2. החליפו את image.unpack() ב-image.to_ndarray() (הסרת ה-unpack).

  3. עדכנו כל ארגומנט scale של מערך-גולמי ב-Image() לטווח (min, max) (שינוי ה-scale של Image).

  4. אם אתם משתמשים במפלי Haar בלוח מושפע, בנו מחדש כשהתכונה מופעלת (שינוי מפל ה-Haar).

  5. אמתו מחדש מודלים שהיו תלויים ב-SCALE_S128_127 (שינוי קנה-המידה).

  6. העבירו קוד דו-ליבתי אל Open-AMP (שינוי ה-CM4).