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()וה-Haarfind_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
רשימת תיוג למעבר¶
להסבה נקייה ל-v3.0.0 העבודה הטיפוסית היא:
החליפו את
image.find_number()/image.classify_object()במודול ה-nn(מעבר ה-nn).עטפו את
sensor.sleep()/sensor.reset()ב-try/exceptבמקום לבדוק ערך בוליאני מוחזר (השינוי ב-sensor.sleep).טפלו בספירות בתים אמיתיות מ-
send/recvשל שקע WINC (השינוי בשקע WINC).השתמשו בתמונה המוחזרת מ-
image.binary()במקום לצפות לשינוי במקום (השינוי ב-binary).הקטינו תמונות לפני
find_apriltags()כדי להישאר מתחת ל-64K פיקסלים (ההגבלה של find_apriltags).
כל שאר הסקריפטים פועלים ללא שינוי.