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) הובא לפעולה.
תרמי:
תוקן חישוב הערך המרבי ב-
firget_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 העבודה הטיפוסית היא:
העבירו את הסקת מודלי ה-
nnשל CMSIS-NN למודול TensorFlow Litetf(הסרת nn).החליפו את
image.ImageReader/image.ImageWriterב-image.ImageIO(שינוי ImageIO).השמיטו את מילת המפתח
scale=(min, max)מ-fir.draw_ir()והשתמשו בארגומנטים החדשים (שינוי draw_ir).כווננו מחדש את פרמטרי
find_lines()מול מדד העוצמה המקורב (שינוי find_lines).העבירו סקריפטים של FIR לממשק מילות המפתח החדש של
fir.snapshot()(שינוי fir.snapshot) וטפלו ב-fir.init()המעלה חריגה בחיישן חסר (שינוי fir.init).
כל שאר הסקריפטים פועלים ללא שינוי.