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().

  • מודולים חדשיםlcd, mjpeg, gif (צבע), ו-mlx התרמי.

  • תמיכה במצלמה 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 העבודה הטיפוסית היא:

  1. הגדירו במפורש sensor.set_pixformat() / sensor.set_framesize() לאחר sensor.reset() (שינוי ה-reset).

  2. עטפו את sensor.snapshot() ב-try / except RuntimeError אם עליכם לסבול timeouts של החיישן (שינוי ה-snapshot).

  3. תפסו את החריגה מ-sensor.set_pixformat() במקום לבדוק False (שינוי ה-set_pixformat).

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