v3.9.0

גרסה v3.9.0 היא מהדורה גדולה. היא מוסיפה את פורט ה-nRF עם Arduino Nano 33 BLE Sense (מצלמה, מודול audio של PDM, ulab, מנהלי התקן מוקפאים של חיישנים), מביאה את חיישני התרמיים FLIR Lepton בתוספת MLX90641 / MLX90621 ומודול fir ששוכתב רבות, ioctls של מיקוד אוטומטי ל-OV5640, וטיפוס הזרמה החדש image.ImageIO. מודול ה-nn הישן של CMSIS-NN והמחלקות הישנות ImageReader / ImageWriter הוסרו — קראו את השינויים השוברים שלהלן.

עיקרי הדברים

  • Arduino Nano 33 BLE Sense — פורט nRF52840 חדש עם מצלמה, מודול audio של PDM, ulab, ומנהלי התקן מוקפאים של חיישנים.

  • תרמי — תמיכת FLIR Lepton, MLX90641 ו-MLX90621 עם מודול fir ששוכתב (פלטות, שיקוף, שינוי קנה מידה, רדיומטריה, FFC).

  • מיקוד אוטומטי של OV5640 — ioctls חדשים sensor.IOCTL_*_AUTO_FOCUS.

  • image.ImageIO — טיפוס זרם תמונה מאוחד (זיכרון או קובץ; read/write/seek/size/close) המחליף את ImageReader / ImageWriter.

  • שובר: מודול ה-nn של CMSIS-NN ו-image.ImageReader / image.ImageWriter הוסרו, והתנהגות find_lines() / fir השתנתה — ראו את השינויים השוברים.

תכונות חדשות

  • פורט nRF / Arduino Nano 33 BLE Sense — פורט nRF52840 חדש ותמיכת לוח, עם מודול audio חדש (audio.init(), audio.start_streaming(), audio.stop_streaming()), ulab מופעל, ומנהלי התקן מוקפאים של חיישני apds9960 / lps22h / lsm9ds1 / hts221.

  • image.ImageIO — טיפוס זרם-תמונה חדש התומך בזרמי זיכרון וקובץ כאחד עם read() / write() / seek() / size() / close(), בתוספת דוגמאות ImageIO לקריאה/כתיבה/זיכרון.

  • FLIR Lepton — נוספה תמיכת FIR_LEPTON עם fir.radiometric(), fir.trigger_ffc() ו-fir.register_vsync_cb().

  • חיישנים תרמיים — נוספה תמיכת MLX90641 (FIR_MLX90641) ו-MLX90621 (מנהלי ההתקן הרשמיים של Melexis).

  • פלטות / כיוון של fir — נוספו הקבועים fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565, ו-fir.read_ir() מקבל כעת hmirror / vflip / transpose.

  • מיקוד אוטומטי של OV5640 — נוספו sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • דוגמאות Arduino אורגנו מחדש לתיקיות לכל לוח.

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

  • מעבר להודעות שגיאה דחוסות של MicroPython (מחרוזות חריגה קצרות יותר); ארגומנט ה-type של fir.init() מזהה כעת באופן אוטומטי באמצעות סריקת אפיק I2C כשהוא מושמט; חריגת ה-xalloc מדווחת כעת על מספר הבייטים המבוקשים; UART 8 הופעל ב-Portenta; דוגמאות FIR אוחדו ל-thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. כדי להתאים לזיכרון פלאש, image.get_similarity() וחיפוש סלקטיבי הושבתו בבניית OpenMV 4, וכעת ניתן לבנות את ספריית התמונות ללא מערכת קבצים (עבור לוחות ללא מערכת קבצים).

תיקוני באגים

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

  • תוקן חישוב ה-PCLK של OV5640, נוספו מטפלי פסיקת I2C חסרים (תיקון תקיעות בהעברת I2C), שוכתבה הקריאה/כתיבה של I2C ב-cambus לאמינות, נעשה אפיק ה-I2C של Lepton בר-בחירה, הועברו פיני שחזור האפיק של cambus להגדרה לכל לוח, ניסיון חוזר אחד של סריקת cambus לפני כישלון, וה-OpenMV PT (Lepton + מצלמה החולקים I2C) הובא לפעולה.

תרמי:

  • תוקן חישוב הערך המרבי ב-fir get_ir() / draw_ir() וב-image.get_similarity() (FLT_MIN-FLT_MAX), טיפול 12→16 ביט ב-AMG8833, ודיוק MLX90621 (מנהל ההתקן הרשמי של Melexis).

תצוגה, אודיו ומערכת:

  • הועברו העברות ה-SPI LCD של STM32 לפונקציות callback של HAL SPI (אמינות תצוגה), תוקנו audio.init() של Nano 33 (מתנד HF + יחס PDM כך שהמיקרופון פועל), מצב טיימר ה-H7 עם ה-HAL החדש, gc_collect של nRF ואתחול/ביטול-אתחול מוקדם של הלוח, והופסקה הדפסת ההודעה המזויפת ”uh oh, no preference for overlapping detection“ במהלך find_apriltags() / find_rects().

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

  • Arduino Nano 33 BLE Sense — לוח nRF52840 חדש (מצלמה, אודיו PDM, ulab, מנהלי התקן מוקפאים של חיישנים).

  • חיישנים תרמיים FLIR Lepton, MLX90641 ו-MLX90621.

  • מיקוד אוטומטי של OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — UART 8 הופעל.

שינויי API שוברים

שינויי API גלויים למשתמש בין v3.8.0 ל-v3.9.0. היקף: מודולי C של Python ב-modules/ וספריות Python ב-scripts/libraries/.

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

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

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

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

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

מודול ה-nn של CMSIS-NN הוסר (major)

מודול ה-nn של CMSIS-NN הוסר, כולל nn.load(), net.forward(), net.search() ועוזר ה-nn_class. הסקת מודלים עוברת למודול TensorFlow Lite (tf). סקריפטים שטענו מודלי .network עם nn חייבים לעבור ל-tf עם מודל TensorFlow Lite.

קומיטים: fbc767b36

ImageReader / ImageWriter הוחלפו ב-image.ImageIO (major)

image.ImageReader / image.ImageWriter והשיטות next_frame() / add_frame() שלהם הוסרו והוחלפו בטיפוס החדש image.ImageIO, התומך בזרמי זיכרון וקובץ כאחד באמצעות read() / write() / seek() / size() / close(). קוד המשתמש במחלקות הקורא/כותב הישנות חייב לעבור ל-image.ImageIO (ראו את הדוגמאות ששמן שונה imageio_read.py / imageio_write.py).

קומיטים: 783a78754

מילת המפתח scale של fir.draw_ir() הוסרה (minor)

fir.draw_ir() נכתב מחדש על גבי צינור ציור התמונות החדש. מילת המפתח scale=(min, max) הוסרה, ונוספו hint, x_scale, y_scale, roi וארגומנטים מיקומיים של היסט x/y. סקריפטים שהעבירו scale=(min, max) ל-fir.draw_ir() חייבים להשמיט זאת ולהשתמש בארגומנטים החדשים.

קומיטים: 0a29103b1

קירוב ב-find_lines() (behavior)

image.find_lines() מקרב כעת את עוצמת הגרדיאנט כ-(abs(gx) + abs(gy)) / 2 ומדלג על עוצמות מתחת ל-126. זה מהיר יותר אך משנה את קבוצת הקווים המזוהים ואת ערכי הצובר, אז בדקו וכווננו מחדש את threshold / theta_margin / rho_margin.

קומיטים: 902ae3c98

fir.snapshot() שוכתב (behavior)

fir.snapshot() שוכתב באופן משמעותי עם ממשק מילות מפתח חדש (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), והדוגמאות המצורפות נכתבו מחדש. ההתנהגות הקודמת המיקומית / מבוססת-pixformat בלבד השתנתה; העבירו סקריפטים של FIR לצורת מילות המפתח החדשה (ראו את דוגמאות מגן ה-thermopile המעודכנות).

קומיטים: 53f2248b8

fir.init() מעלה חריגה בכישלון (behavior)

fir.init() מעלה כעת חריגה (ומבטל אתחול בצורה נקייה) כאשר החיישן התרמי אינו מזוהה, במקום להמשיך בשקט. עטפו את fir.init() ב-try / except (או ודאו שהחיישן מחובר) היכן שקודם הסתמכתם על כך שהיא אינה מעלה חריגה.

קומיטים: 4b2f972f3

רשימת הגירה

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

  1. העבירו את הסקת מודלי ה-nn של CMSIS-NN למודול TensorFlow Lite tf (הסרת nn).

  2. החליפו את image.ImageReader / image.ImageWriter ב-image.ImageIO (שינוי ImageIO).

  3. השמיטו את מילת המפתח scale=(min, max) מ-fir.draw_ir() והשתמשו בארגומנטים החדשים (שינוי draw_ir).

  4. כווננו מחדש את פרמטרי find_lines() מול מדד העוצמה המקורב (שינוי find_lines).

  5. העבירו סקריפטים של FIR לממשק מילות המפתח החדש של fir.snapshot() (שינוי fir.snapshot) וטפלו ב-fir.init() המעלה חריגה בחיישן חסר (שינוי fir.init).

כל שאר הסקריפטים פועלים ללא שינוי.