v3.0.0

גרסה v3.0.0 היא שחרור v2 → v3 הגדול. היא מציגה את ה-OpenMV Cam M7 (STM32F7) ואת מודול רשת הנוירונים החדש nn מבית CMSIS-NN (המחליף את המתודות הישנות והמקובעות find_number() / classify_object()), מוסיפה תמיכה בחיישני MT9V034 global-shutter ו-FLIR Lepton, את גדלי הפריימים sensor.WVGA, ומעדכנת את הליבה ל-MicroPython 1.9.4. כמה התנהגויות של image / sensor / WiFi השתנו — קראו על שינויי התאימות שלהלן.

עיקרי הדברים

  • OpenMV Cam M7 — לוח STM32F7 חדש.

  • מודול nn — הסקה מבית CMSIS-NN: nn.load(), Net.forward(), Net.search(), עם ממיר מודלים ודוגמאות.

  • חיישנים חדשים — MT9V034 global-shutter (מופעל ב-FSIN) ו-FLIR Lepton.

  • עדכון ליבת MicroPython 1.9.4.

  • שובר תאימות: המתודות המקובעות image.find_number() / image.classify_object() הוסרו, sensor.sleep() מעלה כעת חריגה, שקעי WINC מחזירים ספירת בתים אמיתית, image.binary() מחזיר תמונה חדשה, ו-find_apriltags() מוגבל ל-64K פיקסלים — ראו את שינויי התאימות.

תכונות חדשות

  • nn — מודול רשת נוירונים חדש מבית CMSIS-NN: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (מחזיר מספרים ממשיים בטווח 0.0–1.0), Net.search() לזיהוי רב-קנה-מידה/מיקום, ו-Net.test(), בנוסף לממיר מודלים של CMSIS-NN (nn_convert.py / nn_quantizer.py), מודלי CIFAR-10 / LeNet / smile מצורפים, וסקריפטי דוגמה של NN / NN-search.

  • חיישנים — תמיכה ב-MT9V034 global-shutter (תמונת בזק מופעלת ב-FSIN) ב-OpenMV 4, מנהל התקן FLIR Lepton מעודכן עם תמונת בזק של Lepton, וגדלי הפריימים החדשים sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • עיבוד תמונהimage.find_circles() קיבל את מילות המפתח r_min / r_max / r_step (Hough מהיר יותר), find_keypoints() וה-Haar find_features() מקבלים כעת תמונות RGB, ו-image.compress() / קידוד JPEG תומכים כעת בתמונות בינאריות (bitmap).

  • אתחולboot.py רץ כעת לפני אתחול ה-USB כך שהוא יכול לעקוף את מצב ה-USB (למשל HID).

  • דוגמאות — נוספו דוגמאות AprilTag קטנות/ברזולוציה גבוהה, דוגמת I2C LIDAR-Lite V3, וכלי מערך נתונים (augment_images.py / make_patches.py).

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

  • עודכן ה-MicroPython המצורף ל-1.9.4 (עם ביטול שינוי parse/compile/exec של pyexec ותיקון PendSV); הודעות שגיאה ברורות יותר לחוסר זיכרון של fb_alloc / xalloc; הושתק רעש ה-printf של nn במהלך טעינת הרשת; אורגן מחדש המאגר (דוגמאות → scripts/, כלים → tools/, מפלי Haar → ml/). מודול nn אינו זמין ב-OpenMV 2 (זיכרון פלאש (flash) לא מספיק).

תיקוני באגים

עיבוד תמונה:

  • תוקנו fast_atan2f עבור x≤0 (בעבר תמיד 0 — בדקו מחדש זוויות של רכיבים/קווים/נקודות מפתח), טיפול הזיכרון של find_apriltags() (תכולה שאבדה ו-realloc שגוי בעת חוסר זיכרון), מצביעי שורה לכל bpp בבינארי/bitmap (תוצאות בינאריות פגומות), find_edges(EDGE_CANNY) עם ROI, המאקרו TO_GS_PIXEL (אינטגרל / מורפולוגיה), זרימת bitmap/JPEG עבור פריימים בגווני אפור (bpp==0), ה-pop_front של רשימת נקודות מפתח/רכיבים, ותוצאות match_descriptor.

מערכת ומצלמה:

  • תוקנו מספרי הממשק/נקודת הקצה של USB HID, שינוי דינמי של תדר ה-XCLK בזמן ריצה, החזרת המספר הנכון של פלטים מ-Net.forward(), ו-hardfault בעת קטיעת ניתוח (parsing) של סקריפט.

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

  • OpenMV Cam M7 (STM32F7) — לוח חדש.

  • חיישן MT9V034 global-shutter (OpenMV 4, מופעל ב-FSIN).

  • FLIR Lepton — מנהל התקן מעודכן עם תמיכה בתמונת בזק.

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

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

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

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

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

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

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

image.find_number() / image.classify_object() הוסרו (major)

המתודות המקובעות image.find_number() (LeNet) ו-image.classify_object() (CMSIS CNN) הוסרו לטובת מודול ה-nn החדש. החליפו אותן ב-net = nn.load('/model.network'); out = net.forward(img).

Commits: d151f7e38

sensor.sleep() / sensor.reset() מעלים חריגה בכישלון (minor)

sensor.sleep() ו-sensor.reset() מעלים כעת חריגה בכישלון במקום להחזיר True / False. קוד שבדק את הערך הבוליאני המוחזר של sensor.sleep() חייב לעטוף את הקריאה ב-try / except במקום זאת.

Commits: 7d16d008f

שקעי WINC מחזירים את ספירת הבתים האמיתית (behavior)

המתודות send / recv / sendto / recvfrom של שקע WINC1500 החזירו בעבר תמיד 0; הן מחזירות כעת את המספר בפועל של הבתים שהועברו. קוד שהניח החזרת 0 (או ביצע לולאה/חסימה עליה) חייב לטפל בספירות האמיתיות.

Commits: a07fb2f60

image.binary() מחזיר תמונה חדשה (behavior)

image.binary() קיבל את מילות המפתח to_bitmap / copy ומחזיר כעת אובייקט תמונה חדש במקום להחזיר/לשנות את תמונת המקור במקומה. קוד שהסתמך על כך ש-binary() משנה את התמונה המקורית צריך להשתמש באובייקט המוחזר (ולהעביר copy=True להתנהגות שאינה במקום).

Commits: 8a44f0cd9

find_apriltags() מוגבל ל-64K פיקסלים (behavior)

image.find_apriltags() מעלה כעת חריגה אם התמונה (או ה-ROI) חורגת מ-64K פיקסלים ומחזיר רשימה ריקה עבור תמונות קטנות מ-4x4. הקטינו תמונות גדולות (השתמשו ב-framesize קטן יותר או העבירו roi מפורש) לפני קריאה ל-find_apriltags().

Commits: bd77afbc0

רשימת תיוג למעבר

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

  1. החליפו את image.find_number() / image.classify_object() במודול ה-nn (מעבר ה-nn).

  2. עטפו את sensor.sleep() / sensor.reset() ב-try / except במקום לבדוק ערך בוליאני מוחזר (השינוי ב-sensor.sleep).

  3. טפלו בספירות בתים אמיתיות מ-send / recv של שקע WINC (השינוי בשקע WINC).

  4. השתמשו בתמונה המוחזרת מ-image.binary() במקום לצפות לשינוי במקום (השינוי ב-binary).

  5. הקטינו תמונות לפני find_apriltags() כדי להישאר מתחת ל-64K פיקסלים (ההגבלה של find_apriltags).

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