v1.2.0#
v1.2.0 היא גרסה יסודית וגדולה מאוד שבונה את רוב ה-API הקלאסי של עיבוד התמונה של OpenMV: שיטות הציור, פעולות בינאריות / מורפולוגיה, מתארי נקודות מפתח (FAST / FREAK / LBP), המרות צבע ו-image.statistics, קלט/פלט קבצים של BMP / PPM / JPEG, המודולים lcd, mjpeg, gif ו-mlx התרמי, המצלמה OV7725, ובקרות sensor רבות. חלק מהתנהגות הליבה של sensor השתנתה — קראו את השינויים שוברי התאימות שלהלן.
עיקרים#
API ציור —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().בינארי / מורפולוגיה —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().נקודות מפתח — מתארי FAST / FREAK / LBP עם
match_descriptor()/save_descriptor()/load_descriptor().תמיכה במצלמה OV7725;
image.statistics; קלט/פלט קבצים של BMP/PPM/JPEG.שובר תאימות: התנהגות
sensor.reset(),sensor.snapshot()ו-sensor.set_pixformat()השתנתה — ראו את השינויים שוברי התאימות.
תכונות חדשות#
ציור — נוספו
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()עם ארגומנטים בעלי מילת מפתח (color, thickness, …).בינארי / מורפולוגיה — נוספו
image.binary(),invert(),and()/nand()/or()/nor()/xor()/xnor(),erode()/dilate()/morph(),negate()/difference(),pixels(),centroid(),orientation_radians()/orientation_degrees(), וכןwidth()/height()/format().נקודות מפתח / מתארים — חילוץ נקודות מפתח של FAST באמצעות
find_keypoints(),match_descriptor()מאוחד וכןsave_descriptor()/load_descriptor()עבור FREAK / LBP, בתוספת מפל Haar/LBP לזיהוי פרופיל פנים.צבע / סטטיסטיקה —
image.statisticsופונקציות המרת צבע (rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb).קלט/פלט קבצים — טעינה ושמירה של BMP / PPM (P2/P3/P5/P6) / JPEG (כולל JPEG בגווני אפור ודגימת כרומה במשנה 4:2:0 / 4:2:2).
מודולים — מודול
lcdחדש (מגן LCD),mjpeg(הקלטת וידאו),gifבצבע (עםGif.loop()), ומודולי המצלמה התרמיתmlx, כל אחד עם סקריפטים לדוגמה.חיישן — נוספו
sensor.get_id()(+ קבועי PID של OV9650/OV2640/OV7725),sensor.set_special_effect()(קבועי SDE_*),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), גודל הפרייםHQVGA, ו-image.set_pixel(x, y, …).WiFi — נוסף מנהל ההתקן של WiFi מסוג ATWINC1500 ותשתית BSP של OpenMV 1/2, בתוספת דוגמת BLE.
שינויים ושיפורים נוספים#
חוצץ הפריימים מכווץ כעת ב-JPEG לפני הזרמה ל-OpenMV IDE (רוחב פס נמוך יותר); כיווץ ה-JPEG מתבצע במקום; זום אופקי/אנכי של OV7725 מאפשר קנה מידה שרירותי; זיהוי פנים משופר (מהיר יותר) של Haar הרץ ב-QVGA.
תיקוני באגים#
עיבוד תמונה:
תוקנו חישוב התמונה האינטגרלית, השחתה במסנן
median(), חישוב המרכז (centroid), מסנני עור RGB / שחור-לבן על קלט RGB, וקריאה/כתיבה מהירה יותר של BMP/PPM בגווני אפור.
חיישן ומערכת:
תוקנו טיימרים של
pyb.Servo(Servo עובד כעת), רזולוציית HQVGA, אמינות אתחול כרטיס ה-SD, אתחול מחדש של האחסון לאחר איפוס רך, והרצה מחדש של REPL כאשר אין סקריפט.
תמיכה בחומרה ובלוחות#
חיישן המצלמה OV7725.
מגן LCD (מודול
lcd), מצלמה תרמיתmlx, ותשתית WiFi מסוג ATWINC1500.
שינויי API שוברי תאימות#
שינויי API גלויים למשתמש בין v1.1.0 ל-v1.2.0. היקף: מודולי C של Python ב-modules/ וספריות Python ב-scripts/libraries/.
כל שלושת השינויים שוברי התאימות הם שינויי התנהגות בפונקציות הליבה של sensor (אותו API, התנהגות שונה) — בדקו מחדש את הסקריפטים המושפעים. כל גיבוב קומיט מקושר ל-diff שלו ב-GitHub. (הרוב המכריע של גרסה זו הוא API חדש שנבנה בטווח v1.1→v1.2 ולכן מצטבר ואינו שובר תאימות.)
sensor.reset() כבר אינו מחיל תצורת ברירת מחדל (התנהגות)#
sensor.reset() כבר אינו מחיל תצורת ברירת מחדל מובנית (pixformat / framesize / framerate / gain / contrast / brightness / saturation). סקריפטים שהסתמכו על כך ש-reset() משאיר ברירת מחדל שמישה חייבים כעת לקרוא במפורש ל-sensor.set_pixformat() ול-sensor.set_framesize() (וכל הגדרה אחרת) לאחר reset().
קומיטים: d1e782df3
sensor.snapshot() זורק שגיאה בעת timeout (התנהגות)#
sensor.snapshot() זורק כעת RuntimeError("Sensor Timeout!!") כאשר תם הזמן הקצוב של החיישן במקום להיתקע ללא הגבלה. עטפו את snapshot() ב-try / except RuntimeError אם עליכם לסבול timeouts.
קומיטים: e3f41d674
sensor.set_pixformat() זורק שגיאה בפורמט לא נתמך (התנהגות)#
sensor.set_pixformat() זורק כעת חריגה כשניתן לו פורמט פיקסל לא נתמך במקום להחזיר False. קוד שבדק את הערך המוחזר False חייב לתפוס את החריגה במקום.
קומיטים: e0c5822c2
רשימת בדיקה למעבר#
למעבר נקי ל-v1.2.0 העבודה הטיפוסית היא:
הגדירו במפורש
sensor.set_pixformat()/sensor.set_framesize()לאחרsensor.reset()(שינוי ה-reset).עטפו את
sensor.snapshot()ב-try/except RuntimeErrorאם עליכם לסבול timeouts של החיישן (שינוי ה-snapshot).תפסו את החריגה מ-
sensor.set_pixformat()במקום לבדוקFalse(שינוי ה-set_pixformat).
כל שאר הסקריפטים רצים ללא שינוי.