v2.1.0

v2.1.0 היא גרסת מודרניזציית API מסיבית. היא מחליפה את מתאר (descriptor) נקודות המפתח FREAK ב-ORB, מעצבת מחדש את find_blobs() / היסטוגרמות / סטטיסטיקות ל-API מבוססי אובייקטים, משנה את שמות פונקציות החשיפה/ההגבר/איזון-הלובן האוטומטיות של sensor, מוסיפה זיהוי QR-code ותיקון עדשה ל-OV7725, ומקימה את לוח OpenMV Cam M7 הראשוני. ממשקי API רבים השתנו — קראו את השינויים שוברי התאימות שלהלן.

עיקרים

  • נקודות מפתח ORB — מתאר (descriptor) ה-FREAK הוחלף ב-ORB (find_keypoints() / match_descriptor() עוצבו מחדש).

  • API של אובייקטיםfind_blobs(), get_histogram(), get_statistics() מחזירים כעת אובייקטים עם מאחזרים בשם.

  • QR codes — נוסף זיהוי image.find_qrcodes().

  • OpenMV Cam M7 — תמיכת לוח ראשונית.

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (שמותן שונו) ו-set_lens_correction().

  • שובר תאימות: ממשקי ה-API של נקודות המפתח/המתאר, ה-blob/ההיסטוגרמה/הסטטיסטיקה, פונקציית-החיישן האוטומטית, וכמה ממשקים נוספים השתנו — ראו את השינויים שוברי התאימות.

תכונות חדשות

  • OpenMV Cam M7 — נוספה תמיכת לוח ראשונית ל-OpenMV 3 (M7).

  • QR codes — נוסף image.find_qrcodes() עם דוגמת qrcodes.py.

  • נקודות מפתח ORB — מערכת מתאר (descriptor) חדשה של ORB: find_keypoints() עם ארגומנט corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() עם מילת מפתח filter_outliers והערכת סיבוב; שמירה/טעינה של נקודות מפתח.

  • API של אובייקטיםimage.get_histogram() / get_statistics() / get_percentile() מחזירים אובייקטי היסטוגרמה/סטטיסטיקה; find_blobs() מחזיר אובייקטי blob (rect() / cx() / cy() / code() / area() / pixels()) עם area_threshold / pixels_threshold / merge / margin / invert ו-x_stride / y_stride.

  • Sensor — נוסף sensor.set_lens_correction(enable, radi, coef) להצללת עדשה של OV7725, sensor.set_windowing() מקבל כעת גם tuple של (w, h) (ממורכז אוטומטית), וכן image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • נוספו סקריפטי דוגמה למעקב צבע, slave של Arduino SPI/I2C, נקודות מפתח, והיסטוגרמה/סטטיסטיקה.

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

  • ה-IDE יכול כעת לקטוע main.py רץ; find_blobs() / find_qrcodes() / get_statistics() מהירים יותר; ORB משתמש במרחק Hamming מסוג popcount; תיקון עדשה משתמש בפחות RAM; כלל udev של Linux מונע מ-ModemManager לתפוס את היציאה הטורית.

תיקוני באגים

מצלמה ועיבוד תמונה:

  • תוקנו ניקוי/פסילה (invalidate) של מטמון ה-DMA ב-M7 (פריימים פגומים), שורה נוספת מזויפת בסוף כל פריים, גבולות גלישת חוצץ הפריימים (frame buffer) של JPEG, שחרור חוצץ הפריימים בכישלון compress(), דיוק ORB / ROI / טיפול בקבוצה ריקה, וכן הגאומטריה של load_image(copy_to_fb=True).

מערכת:

  • תוקנו תמיכת ה-ADC ב-F7, שם אוגר (register) של OV7725, תזמון מאתחל (bootloader)/USB, נעשה שימוש ב-WFI בעת ההמתנה לתמונות בזק (snapshot), והפך מזרים ה-MJPEG לדוגמה ללא-חוסם עם פסקי זמן לכל לקוח.

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

  • OpenMV Cam M7 (OpenMV 3) — תמיכת לוח ראשונית.

  • OV7725 — תמיכת תיקון-עדשה (הצללה).

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

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

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

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

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

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

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

FREAK הוחלף ב-ORB; ה-API של המתאר (descriptor) עוצב מחדש (major)

מתאר (descriptor) נקודות המפתח FREAK הוסר והוחלף ב-ORB: image.FREAK כבר אינו קיים (השתמשו ב-image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() כבר אינם מקבלים ארגומנט מוביל של סוג-מתאר (הוא מוסק מהאובייקט), match_descriptor() מחזיר כעת tuple בן 8 איברים (cx, cy, x, y, w, h, match_count, rotation) (האיבר האחרון הוא ספירה גולמית, לא אחוז), ו-draw_keypoints() דורש אובייקט נקודות מפתח במקום רשימת (x, y, angle) גולמית. find_keypoints() קיבל corner_detector / max_keypoints / scale_factor עם ברירות מחדל שהשתנו.

Commits: e2d0c4840, bba8e5a9e, 6000684cb

שינוי שם פונקציית-החיישן האוטומטית (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() שמותן שונו ל-sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (השמות הישנים הוסרו). כל אחת קיבלה מילת מפתח אופציונלית value= להגדרת ערך ידני במקום אוטומטי.

Commits: 1b22a2961

היסטוגרמה / סטטיסטיקה עוצבו מחדש ל-API של אובייקטים (major)

משטח ההיסטוגרמה/סטטיסטיקה עוצב מחדש ל-image.get_histogram() / get_statistics() / get_percentile() מבוססי אובייקטים המחזירים אובייקטי היסטוגרמה/סטטיסטיקה. תוצאות ההיסטוגרמה/סטטיסטיקה השטוחות הישנות והמתודות bin_count / l_bin_count / a_bin_count / b_bin_count הוסרו (השתמשו ב-len(histogram.bins()) וכו«).

Commits: 011108412, 9f37c83de

ה-scale של find_features() שמו שונה (major)

image.find_features() (Haar) שינה את שם מילת המפתח scale= שלו ל-scale_factor=. עדכנו קריאות find_features(cascade, scale=...) ל-scale_factor=....

Commits: 96e4f770c

find_blobs() מחזיר אובייקטים; find_markers() הוסר (minor)

image.find_blobs() מחזיר כעת אובייקטי blob עם מאחזרים בשם (גישה לפי אינדקס עדיין עובדת לתאימות לאחור), ו-image.find_markers() הוסר — השתמשו ב-find_blobs(..., merge=True, margin=...) במקום זאת. פונקציית ה-callback המתקדמת לסינון blob לפי צבע כבר אינה נתמכת.

Commits: af15ec6eb

img.copy_to_fb() הוחלף (minor)

המתודה img.copy_to_fb() הוחלפה במילת מפתח copy_to_fb= ב-image.Image / load_image(). השתמשו ב-image.Image(path, copy_to_fb=True) לטעינת תמונות גדולות ישירות לחוצץ הפריימים (frame buffer).

Commits: 1645ab94b

compress() דוחה איכות מחוץ לטווח (behavior)

image.compress() / compressed() זורקים כעת שגיאה כאשר quality נמצא מחוץ ל-1–100 במקום לקטוע (clamp) בשקט. קטעו (clamp) את quality לטווח 1–100 לפני הקריאה. בנפרד, חוצץ ה-JPEG של OpenMV 3 הוקטן מ-64 KB ל-23000 בתים, ולכן פריימים גדולים עלולים כעת לזרוק שגיאת חוסר-זיכרון — הורידו את איכות ה-JPEG או את ה-framesize.

Commits: 9efd7474a, 9a7c3defc

ה-zoom של lens_corr() כעת פונקציונלי (behavior)

image.lens_corr() מחיל כעת בפועל את ארגומנט ה-zoom שלו (קודם לכן הוא נותח אך לא היה אפקטיבי), ולכן הפלט שונה עבור סקריפטים שהעבירו zoom שאינו ברירת מחדל. בדקו מחדש את כיוונון lens_corr().

Commits: d6b49adef

רשימת הסבה

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

  1. החליפו את image.FREAK ב-image.ORB, הסירו את ארגומנט סוג-המתאר, ועדכנו את פירוק ה-tuple של match_descriptor() / את draw_keypoints() לאובייקט נקודות המפתח (עיצוב מחדש של ORB).

  2. שנו את שמות sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() לצורות set_auto_* (שינוי שם הפונקציות האוטומטיות).

  3. העבירו קוד היסטוגרמה/סטטיסטיקה למתודות האובייקט (עיצוב מחדש של היסטוגרמה/סטטיסטיקה).

  4. שנו את שם ה-scale= של find_features() ל-scale_factor= (שינוי שם find_features).

  5. השתמשו במאחזרי אובייקט-blob והחליפו את find_markers() ב-find_blobs(merge=True, ...) (שינוי find_blobs); החליפו את img.copy_to_fb() במילת המפתח copy_to_fb= (שינוי copy_to_fb).

  6. קטעו (clamp) את האיכות של compress() ל-1–100 ובדקו מחדש את גדלי ה-JPEG ב-OpenMV 3 (שינוי compress); כווננו מחדש את ה-zoom של lens_corr() (שינוי lens_corr).

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