v2.4.0

גרסה v2.4.0 כותבת מחדש את find_lines() כמזהה מבוסס התמרת Hough, מוסיפה את find_line_segments(), פענוח data-matrix באמצעות find_datamatrices(), את sensor.set_vsync_output(), קריאה/כתיבה של פרוסות תמונה, וגדלי פריים מוקטנים חדשים רבים ל-FPS גבוה יותר. find_lines(), match_descriptor(), ו-skip_frames() השתנו — קראו את השינויים השוברים למטה.

עיקרים

  • find_lines() — נכתב מחדש כמזהה קווים מבוסס התמרת Hough המחזיר אובייקטי קו (כעת עובד על RGB565, לא רק על גווני אפור).

  • find_line_segments() — זיהוי קטעי קו סופיים.

  • find_datamatrices() — פענוח data-matrix.

  • sensor.set_vsync_output() — הנעת VSYNC על פין קלט/פלט לסנכרון מצלמה.

  • גדלי פריים נוספים — רזולוציות מוקטנות נוספות רבות ל-FPS גבוה יותר.

  • שובר: find_lines(), match_descriptor(), ו-skip_frames() השתנו — ראו את השינויים השוברים.

תכונות חדשות

  • image.find_line_segments() — מציאת קטעי קו לא-אינסופיים; אובייקטי קו קיבלו גישה (accessor) .length().

  • image.find_datamatrices() — פענוח data-matrix, עם סקריפטי דוגמה.

  • sensor.set_vsync_output(pin) — הוצאת אות ה-VSYNC על פין GPIO לסנכרון מצלמה (OpenMV 2 / OpenMV 3).

  • פרוסות תמונה — פרוטוקול ה-subscript / החוצץ של התמונה תומך כעת בקריאה ובכתיבה של פרוסות מנתוני התמונה.

  • נוספו שילובי רזולוציה / גודל פריים מוקטנים נוספים רבים לתמיכה בקצבי פריים גבוהים יותר; clock.fps() מאפס כעת את הצוברים שלו כל 2 שניות כך שה-FPS המדווח עוקב אחר הקצב האחרון.

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

  • ה-OV7725 ממוסגר ל-QVGA כאשר הרזולוציה היא ≤ VGA (פחות פריימים נשמטים בקצבי לכידה גבוהים) וה-PLL שלו הוגדר ל-6× עם שעון חיצוני מופחת (OpenMV 2 ב-48 MHz, OpenMV 3 ב-54 MHz), משנה את תזמון הפריימים של החיישן.

תיקוני באגים

עיבוד תמונה:

  • תוקנו שגיאת גודל החוצץ ב-compress_for_ide() (סמן התחלה/סוף), פענוח QR (בנוסף לתיקוני indexing של מפת ביטים של תאים ב-quirc upstream וגבולות תבנית היישור).

חיישן וקישוריות:

  • הופחת שעון החיישן של OpenMV 2 כדי לעבוד עם ה-PLL הגבוה יותר של החיישן (אתחול/סנכרון מצלמה) וגרם ל-socket.recvfrom() של WINC להחזיר את הגודל שהתקבל בפועל (שגיאה על גודל לא-חיובי במקום החזרת ערך מיושן).

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

  • פלט VSYNC על פין GPIO (OpenMV 2 / OpenMV 3) התומך ב-sensor.set_vsync_output().

  • OpenMV 3 — הופעל pyb.UART UART1.

שינויי API שוברים

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

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

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

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

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

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

find_lines() נכתב מחדש כמזהה Hough (major)

image.find_lines() נכתב מחדש כמזהה מבוסס התמרת Hough. הוא אינו מחזיר עוד רשימה של tuples מסוג (x1, y1, x2, y2) — הוא מחזיר אובייקטי קו (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — וכעת עובד גם על RGB565 (לא רק על גווני אפור). ארגומנט ה-threshold השתנה ממספר float בטווח 0.0–1.0 לסכום שלם של עוצמת קצה, line.magnitude הוא כעת מספר שלם, ונוספו מילות המפתח החדשות theta_margin / rho_margin. התאימו קוד שפורק tuples לאובייקטי הקו וכווננו מחדש את threshold.

Commits: 31b7b5bf3, f4a9c6154

match_descriptor() מחזיר אובייקט התאמה (minor)

image.match_descriptor() (ORB) מחזיר כעת אובייקט kptmatch עם הגישות (accessors) .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() במקום tuple פשוט בן 8 איברים. האובייקט עדיין ניתן ל-subscript/slicing כך שאינדוקס מיקומי ממשיך לעבוד, אך קוד שביצע isinstance(result, tuple) (או השתמש במתודות של tuple) חייב להשתמש בגישות החדשות.

Commits: e960546b6

sensor.skip_frames() הוא כעת מבוסס-זמן (behavior)

sensor.skip_frames() עוצב מחדש לקבל מילת מפתח time= (ברירת מחדל ~300 ms) והוא כעת מבוסס-זמן כברירת מחדל במקום להריץ מספר פריימים קבוע, ועוצר מוקדם ברגע שהזמן חולף. סקריפטים שהסתמכו על מספר פריימים מדויק צריכים להעביר מספר מפורש ו/או להגדיר time= בהתאם.

Commits: a039b5d1c

רשימת בדיקה להגירה

להעברה נקייה ל-v2.4.0 העבודה האופיינית היא:

  1. התאימו את פירוק ה-tuples של find_lines() לאובייקטי הקו וכווננו מחדש את ה-threshold השלם (הכתיבה מחדש של find_lines).

  2. השתמשו בגישות (accessors) של kptmatch במקום להתייחס לתוצאות match_descriptor() כ-tuple (השינוי ב-match_descriptor).

  3. העבירו מספר מפורש ו/או time= לsensor.skip_frames() אם הסתמכתם על מספר פריימים קבוע (השינוי ב-skip_frames).

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