v4.8.0¶
v4.8.0 היא גרסה מרכזית עתירת מאפיינים. בראש הרשימה: מודול מצלמה csi חדש לחלוטין מבוסס-מחלקות עם תמיכה במספר מצלמות, לוח OpenMV N6 (STM32N6) עם NPU מסוג Neural-ART, מנגנון הסקה (inference) מבוסס NPU, מצב אירועים RAW של מצלמת האירועים GenX320, מודול crc חדש, ספריית עיבוד-לאחר (post-processing) של ML שאורגנה מחדש, ו-MicroPython 1.26. כמו כן היא מסירה מספר ממשקי API ישנים — מודול ה-buzzer ושליטת ה-FLIR Lepton של מודול fir — אז קראו את השינויים שוברי-התאימות שלהלן.
עיקרי הדברים¶
מודול מצלמה
csiחדש. ממשקcsi.CSIמבוסס-מחלקות עם תמיכה בכמה מצלמות בו-זמנית, שהוצג לצד מודול ה-sensorהישן.OpenMV N6. לוח STM32N6, עם NPU מסוג Neural-ART, חציצה משולשת (triple buffering), Soft-CSI ומודול ToF.
הסקה (inference) על NPU. מנגנון אחורי של ST Neural-ART (STAI) להסקת מודלים מואצת-חומרה.
מצב אירועים של GenX320. פלט אירועים RAW בתוספת
draw_event_histogram()להצגה של מצלמת אירועים.עיבוד-לאחר (post-processing) של ML שאורגן מחדש — תת-חבילות לפי ספק (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) עם מזהי BlazeFace / BlazePalm חדשים ומזהי נקודות-ציון של כפות ידיים ופנים.מודול
crcחדש — CRC-16 / CRC-32 מואצי-חומרה.MicroPython עודכן ל-1.26.0.
שובר-תאימות: מודול ה-
buzzerושליטת ה-Lepton של מודול ה-firהוסרו (ה-Lepton הוא כעת מצלמה רגילה). ראו את שינוי ה-fir/Lepton ואת הסרת ה-buzzer.
מאפיינים חדשים¶
מודול המצלמה
csiהחדש — אובייקטcsi.CSIמבוסס-מחלקות עם מספר מצלמות בו-זמנית (עד שלוש ב-N6), תמונת בזק (snapshot) לא-חוסמת, גדלי פריים מותאמים(w, h), ו-print()/ repr אינפורמטיבי. הוא הוצג לצד מודול ה-sensorהישן (ואינו תחליף ישיר לו).crc—crc.crc16()ו-crc.crc32(), מואצי-חומרה עם נפילה-לאחור (fallback) תוכנתית, ב-OpenMV N6 וב-AE3.image.Image.draw_image()קיבל מילת-מפתחtransform=(מטריצתndarrayדו-ממדית של float לעיוותי affine/perspective, מואצי-GPU ב-STM32 וב-Alif); אותו transform זמין גם בהמרת תמונות.draw_event_histogram()— הצגת היסטוגרמות של מצלמת אירועים.מצב אירועים RAW של GenX320 —
csi.IOCTL_GENX320_SET_MODEעםcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, קבועי סוגי-אירועים, וסקריפטים לדוגמה חדשים.ML — מנגנון אחורי להסקה (inference) של NPU מסוג ST Neural-ART (STAI);
ml.Modelקיבל מילת-מפתחpostprocess=(מעבד-העיבוד-לאחר רץ כעת אוטומטית בתוךpredict()גם ללא פונקציית callback);ml.postprocessingאורגן מחדש לתת-חבילות לפי ספק —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo), ו-ml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — השמות הישנים ב-snake_case נשמרו ככינויים; נוספוml.utils.draw_keypoints()ו-ml.utils.draw_skeleton(); מודלי ה-ROMFS המצורפים גדלו (BlazeFace, YOLO-LC, YOLOv8n, נקודות-ציון של כפות ידיים/ידיים/פנים).audio— קלט מיקרופון-דיגיטלי MDF ב-STM32N6.תצוגה — דרייבר OLED מסוג SSD1351 ודוגמה; בקרי
SPIDisplayיכולים לדרוס את פקודות האתחול שלהם; בנאי תצוגת ה-SPI קיבל מילות-מפתחhmirror/vflip.מנתח ביצועים (profiler) על-גבי המכשיר — מוני מחזורים/אירועים של SysTick + Armv8.1-M PMU עם אינסטרומנטציה ברמת הפונקציה, הניתנים לקריאה דרך קישור הניפוי (
pyopenmvקיבל תמיכה בניתוח ביצועים ובסמלי ELF).תמיכה בחיישנים חדשים — PixArt PS5520; FLIR BOSON ב-OpenMV H7 Plus; זיהוי-אוטומטי של GenX320.
שינויים ושיפורים נוספים¶
MicroPython עודכן ל-1.26.0.
הפעלת מצלמה — שעון החיישן נותק ממצב ה-CSI, זיהוי המצלמה באתחול מהיר יותר (התצורה הנפוצה ביותר נבדקת ראשונה), ושעון ברירת-המחדל של OV7725 ב-OpenMV 3 תוקן.
איכות תמונה — תיקון gamma של ISP תוכנתי (Alif ו-STM32) ותיקון פיקסלים-פגומים (STM32) פעילים כברירת מחדל; חיישני PAG7936 ו-PS5520 קיבלו בקרות איזון-לבן אוטומטי.
ביצועים —
image.Image.to_ndarray()מואץ באמצעות Helium SIMD ומעבד-העיבוד-לאחר של FOMO עבר וקטוריזציה עם ulab.דרייבר ה-FLIR Lepton נכתב מחדש כך שיקבל פריימים אסינכרונית ברקע — סיבוב/
transposeעובד כעת, הציור מבצע הגדלה בילינארית, והאיפוס מהיר יותר.תפוקת לכידה — ה-CSI של i.MX RT1062 משתמש כעת בהאצת DMA מלאה, ול-STM32 N6 יש
draw_image()עם האצת-GPU חומרתית.
תיקוני באגים¶
מצלמה וחיישנים:
תוקנו מצבי RGB565 / GRAYSCALE / BAYER / YUV422 בחיישני STM32, PAJ6100 ב-OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565, ותצורת ה-CSI mono / RGB-YUV של ה-N6; מצלמת הבדיקה התוכנתית מתאפסת כעת באופן דטרמיניסטי.
איזון-לבן אוטומטי כבר אינו צובע את התמונה בירוק בקצבי פריים נמוכים או משתנים (ממוצע נע של 250 אלפיות-שנייה מחליף את הדגימה כל-100-פריימים), והבהוב הבהירות של PS5520 תוקן.
עיבוד תמונה:
תוקנה תקלת רינדור של ציור-קו;
image.Image.flush()מרוקנת כעת את חוצץ (buffer) ה-JPEG של התמונה שעליה היא נקראה;Normalizationמיישמת כעת ממוצע/סטיית-תקן על קלטי float; הקצאת תמונה-מקובץ תוקנה.
לכידת מצלמה:
תוקן שיבוש תמונה חמור בהעברות שאינן JPEG (פסיקת הפריים מופעלת כעת רק במצב JPEG), תמיכה ב-JPEG mode-3, ונעילות של גודל-קו DMA וחוצץ-קטן ב-STM32; סנכרון VOSPI / Lepton אמין יותר, בייחוד ב-N6.
שונות:
omv.board_id()מחזיר את ה-UID הנכון ב-RT1060;YoloV2כבר אינו קורס כשהוא נבנה ללא עוגנים (anchors) מפורשים.
תמיכת חומרה ולוחות¶
OpenMV N6 — STM32N6 עם NPU מסוג Neural-ART, חציצה משולשת (triple buffering), פלט SPI LCD/TV, Soft-CSI, מודול
tof, ומודלי ROMFS מצורפים.Arduino GIGA — פלט תצוגה MIPI DSI.
חיישנים חדשים — PixArt PS5520; FLIR BOSON ב-OpenMV H7 Plus; זיהוי-אוטומטי של GenX320.
OpenMV Pure Thermal — ה-FLIR Lepton הוא כעת חיישן מצלמה רגיל (משני).
Alif AE3 — תיקון gamma של ISP תוכנתי, מודול
crc, ותיקוני SPI.
שינויים שוברי-תאימות ב-API¶
שינויי API גלויים-למשתמש בין v4.7.0 ל-v4.8.0. היקף: מודולי C של Python ב-modules/ וספריות Python ב-scripts/libraries/.
כל שינוי מתויג לפי השפעתו:
major — רוב הסקריפטים שהשתמשו בו זקוקים לעריכות.
minor — API צר; משפיע רק על סקריפטים שהשתמשו בו.
behavior — אותו API, תוצאות שונות; בדקו מחדש סקריפטים מכווננים.
tooling — משפיע רק על כלי-מארח / בנייה מהמקור.
השינויים מקובצים לפי השפעה בסדר הזה — major תחילה, ואז minor, behavior, ו-tooling. אם אתם רק רוצים לפורט את הקוד שלכם, דלגו לרשימת ההגירה בסוף כדי לקבל רשימת מטלות מתומצתת. כל hash של commit מקושר ל-diff שלו ב-GitHub.
FLIR Lepton הועבר מחוץ למודול ה-fir (major)¶
ה-FLIR Lepton מונע כעת כחיישן מצלמה רגיל במקום דרך מודול ה-fir. שליטת ה-Lepton הוסרה מ-fir: הסוג FIR_LEPTON והמתודות radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available(), ו-trigger_ffc() נעלמו. לכדו את ה-Lepton כמו כל מצלמה אחרת (הוא מופיע כחיישן משני ב-OpenMV Pure Thermal); דוגמת ה-Pure Thermal נכתבה מחדש לממשק החדש. חיישני ה-fir שאינם Lepton (Grid-EYE, MLX, AMG8833) ללא שינוי.
מודול ה-buzzer הוסר (minor)¶
מודול ה-buzzer הוסר מהפורטים של STM32 ו-i.MX RT. הניעו את הזמזם באמצעות machine.PWM במקום; נוספה דוגמת זמזם ל-Pure Thermal המשתמשת ב-PWM.
omv.disable_fb() הוסר (minor)¶
הפונקציה omv.disable_fb() הוסרה; הזרמת חוצץ-הפריימים (frame buffer) נשלטת כעת דרך ממשק המצלמה. סקריפטי ה-RPC הישנים למחשב שהסתמכו עליה הוסרו אף הם.
csi חדש — ה-API שלו עדיין אינו מוקפא (minor)¶
מודול ה-csi הוצג ב-v4.8.0 וה-API שלו התפתח במהלך הגרסה: csi.fb() הוסר, ו-csi.CSI.snapshot() (image=...) דורש כעת תמונה ניתנת-לשינוי ומצייר/מקנה-מידה את הפריים הנלכד לתוכה במקום לבצע העתקה-עמוקה גולמית. מאמצים מוקדמים של המודול החדש צריכים לבדוק מחדש; ה-API הישן של sensor אינו מושפע.
מצב הזרמה של image.ImageIO ו-close() (minor)¶
image.ImageIO — הארגומנט mode מקבל כעת רק אותיות קטנות 'r' / 'w' (אות גדולה נדחית עם הודעת שגיאה מעודכנת), ופתיחה עם 'w' תמיד מקצרת/יוצרת-מחדש את הקובץ במקום לשמר זרם קיים. ImageIO.close() הוא כעת אידמפוטנטי (סגירת זרם שכבר נסגר אינה מעלה עוד חריגה) ומחזיר None במקום את אובייקט הזרם.
ערך ההחזרה של BlazeFace / BlazePalm (minor)¶
מעבדי-העיבוד-לאחר BlazeFace ו-BlazePalm (חדשים בגרסה זו) מחזירים כעת רשימת תיבות-תוחמות יחידה במקום הרשימה המלאה לפי-מחלקה — הקוראים מאנדקסים את התוצאה ישירות במקום [0].
Commit: 75e16b573
פונקציית ה-callback של עיבוד-לאחר של ML מקבלת טנזורים גולמיים (behavior)¶
פונקציית callback של עיבוד-לאחר ב-predict() של ml.Model מקבלת כעת הפניות לטנזור-הפלט הגולמי (המכומת) במקום ndarray של float שהומר מראש — זה מונע מיצוי זיכרון במודלים גדולים. אם לא סופקה פונקציית callback, ה-ndarray של float עדיין מוחזר. פונקציות callback מותאמות חייבות לבטל את הכימות (dequantize) של הטנזורים בעצמן (מעבדי-העיבוד-לאחר המובנים כבר עושים זאת).
Commit: 84e6ee650
שעון המצלמה נותק ממצב ה-CSI (behavior)¶
שעון החיישן בלתי-תלוי כעת במצב ה-CSI. set_clock / set_frequency מגדירים מחדש את השעון רק כאשר התדר המבוקש שונה ביותר מסבולת מסוימת, ו-get_clk_frequency מקבל ערך בוליאני כדי להחזיר את התדר המדויק (ולא הנקוב). שעון ברירת-המחדל הוא 24 MHz ב-OpenMV N6 וב-AE3, כך שאין צורך ב-set_clock() מפורש באתחול. סקריפטים שהחליפו את השעון ללכידות רגישות-תזמון צריכים לבדוק מחדש את ההנחות שלהם.
Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
פרוטוקול ניפוי USB ויעדי קושחה (tooling)¶
שום דבר מזה אינו משפיע על סקריפטי MicroPython. פקודות USBDBG מיושנות (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) הוסרו ופקודות לא-נתמכות מ-IDEs ישנים יותר נשטפות כעת במקום להקריס לוחות TinyUSB בחיבור; יעד קושחת ה-UVC הישן של STM32 הוסר. כלי-מארח ישנים צריכים להתעדכן; ראו את ההיסטוריה של מאגר הקושחה לפרטים.
רשימת הגירה¶
לפורט נקי ל-v4.8.0, העבודה האופיינית היא:
אם השתמשתם ב-FLIR Lepton דרך
fir, עברו ללכוד אותו כחיישן מצלמה (שינוי ה-fir/Lepton).החליפו כל שימוש ב-
buzzerב-machine.PWM(הסרת ה-buzzer).הסירו קריאות
omv.disable_fb()(הסרת ה-omv.disable_fb()).עבור
image.ImageIO: השתמשו באותיות קטנות'r'/'w'וצפו ש-'w'יקצר (שינוי ה-ImageIO).עבור פונקציות callback מותאמות של עיבוד-לאחר של ML: בטלו את הכימות (dequantize) של הפניות הטנזור הגולמי בעצמכם, או הסתמכו על נתיב ה-float של ברירת-המחדל (שינוי ה-callback).
בדקו מחדש כל סקריפט שהניע את שעון החיישן ללכידות רגישות-תזמון (שינוי השעון).