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 — תמיכת לוח ראשונית.
Sensor —
set_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 עם ברירות מחדל שהשתנו.
שינוי שם פונקציית-החיישן האוטומטית (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()) וכו«).
ה-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.
ה-zoom של lens_corr() כעת פונקציונלי (behavior)¶
image.lens_corr() מחיל כעת בפועל את ארגומנט ה-zoom שלו (קודם לכן הוא נותח אך לא היה אפקטיבי), ולכן הפלט שונה עבור סקריפטים שהעבירו zoom שאינו ברירת מחדל. בדקו מחדש את כיוונון lens_corr().
Commits: d6b49adef
רשימת הסבה¶
להסבה נקייה ל-v2.1.0 העבודה הטיפוסית היא:
החליפו את
image.FREAKב-image.ORB, הסירו את ארגומנט סוג-המתאר, ועדכנו את פירוק ה-tuple שלmatch_descriptor()/ אתdraw_keypoints()לאובייקט נקודות המפתח (עיצוב מחדש של ORB).שנו את שמות
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()לצורותset_auto_*(שינוי שם הפונקציות האוטומטיות).העבירו קוד היסטוגרמה/סטטיסטיקה למתודות האובייקט (עיצוב מחדש של היסטוגרמה/סטטיסטיקה).
שנו את שם ה-
scale=שלfind_features()ל-scale_factor=(שינוי שם find_features).השתמשו במאחזרי אובייקט-blob והחליפו את
find_markers()ב-find_blobs(merge=True, ...)(שינוי find_blobs); החליפו אתimg.copy_to_fb()במילת המפתחcopy_to_fb=(שינוי copy_to_fb).קטעו (clamp) את האיכות של
compress()ל-1–100 ובדקו מחדש את גדלי ה-JPEG ב-OpenMV 3 (שינוי compress); כווננו מחדש את ה-zoom שלlens_corr()(שינוי lens_corr).
כל שאר הסקריפטים פועלים ללא שינוי.