v3.6.1

v3.6.1 היא גרסה גדולה. היא מציגה את מודול imu (LSM6DS3), חבילה של ממשקי getter חדשים ל-sensor עם סיבוב אוטומטי מונחה-IMU, תיקון פרספקטיבה בארבע נקודות rotation_corr(), ומפעילה את ה-Arduino Portenta H7 עם מצלמות ה-HIMAX HM01B0 וה-OV7690. כמה ממשקי sensor / image השתנו ו-TensorFlow הוסר ב-M7 — קראו את השינויים שוברי-התאימות שלהלן.

עיקרי הדברים

  • מודול imu — מד תאוצה / ג’יירו / טמפרטורה / roll / pitch על ה-LSM6DS3 (OpenMV 4 / Portenta).

  • Getters לחיישן + סיבוב אוטומטיget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation(), וסיבוב תמונת בזק (snapshot) מונחה-IMU.

  • תיקון פרספקטיבהrotation_corr() מקבל כעת את מילות המפתח fov ו-corners (ארבע נקודות).

  • חומרה חדשה — Arduino Portenta H7, HIMAX HM01B0, ומצלמת OV7690.

  • שובר תאימות: set_pixformat() / set_framesize() מחזירים כעת None, sensor.set_framerate() הוסר, TensorFlow הוסר ב-M7, ו-lens_corr() / linpolar() דורשים כעת מימדים זוגיים — ראו את השינויים שוברי-התאימות.

תכונות חדשות

  • imu — מודול IMU חדש: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch(), ו-imu.sleep() (LSM6DS3 על OpenMV 4 / Portenta).

  • Getters לחיישן — נוספו sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose(), ו-set_auto_rotation() / get_auto_rotation().

  • סיבוב אוטומטיsensor.snapshot() משתמש ב-IMU כדי להפוך / לשקף / לבצע טרנספוזיציה של פריימים כאשר הסיבוב האוטומטי מופעל.

  • rotation_corr() — נוספו מילות המפתח fov ו-corners (פרספקטיבה בארבע נקודות), עם דוגמאות לתיקון פרספקטיבה.

  • lcd.init() — נוסף מילת המפתח bgr.

  • collections.deque — הופעל בבנייה של MicroPython.

  • נוספו קבועי המזהים sensor.OV7690 ו-sensor.HM01B0 ודוגמה למסנן תמונה בסגנון numpy עם ulab.

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

  • אופטימיזציה משמעותית למסנני התמונה (median / mode / mean / …) ול-find_circles() ולתיקון העדשה; alloc_extra_fb יכול כעת להקצות כל מספר של בייטים; מודל זיהוי האנשים נבנה מחדש עם פעולת average-pool חדשה.

תיקוני באגים

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

  • תוקנו sleep() של OV2640 (משתמש כעת באוגר (register) ה-standby של COM2 במקום בפין ה-power-down), תצורת פין ה-FSYNC, הקטביות של HSYNC/VSYNC ב-HM01B0 וכתובת/סריקת ה-I2C, ה-GPIO ל-power-down של חיישן ה-Portenta ופין ה-reset של המצלמה, והושבת הסיבוב האוטומטי כאשר ה-pitch של ה-IMU קרוב ל-90°/270°.

עיבוד תמונה ומערכת:

  • תוקנו באג בבדיקת גבולות במסנן תמונה, hardfault בעת השבתת ה-D-cache, אתחול בלוחות ללא כרטיס SD, באג ב-load_to_fb של tf.load(), גלישת מחסנית בזיהוי אנשים (מחסנית ה-H7 הוגדלה ל-‎≥12 KB), והיסטי המתארים (descriptors) של USB עבור מצב high-speed ב-OpenMV 4 Plus.

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

  • Arduino Portenta H7 — הפעלת לוח ראשונית (תצורת clock/OSC/HSE של STM32H747, כותרות CMSIS, ADC, SDRAM, Arduino USB PID).

  • HIMAX HM01B0 — מנהל התקן חדש למצלמה מונוכרומטית (Bayer, שעון מתנד חיצוני).

  • OV7690 — מנהל התקן חדש למצלמה.

  • LSM6DS3 IMU — OpenMV 4 / Portenta.

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

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

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

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

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

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

sensor.set_framerate() הוסר (minor)

ה-stub חסר-הפעולה sensor.set_framerate() הוסר; קריאה אליו מעלה כעת AttributeError. הסירו את הקריאה ושלטו בתזמון הפריימים באמצעות framesize/חשיפה במקום. (גרסה תקינה של set_framerate() הוחזרה ב-v4.0.2.)

Commits: 705e98f91

TensorFlow הוסר ב-OpenMV Cam M7 (minor)

TensorFlow (מודול ה-tf) הושבת ב-OpenMV Cam M7 / OpenMV 3 (הוא כבר לא נכנס). import tf ב-M7 נכשל — השתמשו במצלמה מסוג H7 עבור TensorFlow. (tf הופעל מחדש ב-F7 ב-v3.6.3.)

Commits: 2ae875077

set_pixformat() / set_framesize() מחזירים None (behavior)

sensor.set_pixformat() ו-sensor.set_framesize() מחזירים כעת None במקום True, ופורמט פיקסל לא נתמך מעלה כעת ValueError במקום assertion. קוד שבדק את הערך המוחזר (למשל if sensor.set_pixformat(...):) חייב להפסיק לעשות זאת, וקוד שתפס AssertionError עבור פורמטים לא נתמכים חייב לתפוס ValueError.

Commits: f314ac4e7

lens_corr() / linpolar() / logpolar() דורשים מימדים זוגיים (behavior)

image.lens_corr() ו-image.linpolar() / image.logpolar() דורשים כעת רוחב וגובה זוגיים של התמונה ומעלים שגיאה במימדים אי-זוגיים. חתכו או שנו את גודל התמונה למימדים זוגיים לפני קריאה לשיטות אלו.

Commits: b36460a36, 2b26ca17b

רשימת מעבר

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

  1. הסירו קריאות ל-sensor.set_framerate() (הסרת set_framerate).

  2. העבירו עומסי עבודה של TensorFlow מה-OpenMV Cam M7 (שינוי TensorFlow ב-M7).

  3. הפסיקו להסתמך על הערך המוחזר של set_pixformat() / set_framesize() ותפסו ValueError עבור פורמטי פיקסל לא נתמכים (שינוי הערך המוחזר).

  4. ודאו מימדי תמונה זוגיים לפני lens_corr() / linpolar() / logpolar() (דרישת המימדים הזוגיים).

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