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.UARTUART1.
שינויי 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.
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 העבודה האופיינית היא:
התאימו את פירוק ה-tuples של
find_lines()לאובייקטי הקו וכווננו מחדש את ה-thresholdהשלם (הכתיבה מחדש של find_lines).השתמשו בגישות (accessors) של
kptmatchבמקום להתייחס לתוצאותmatch_descriptor()כ-tuple (השינוי ב-match_descriptor).העבירו מספר מפורש ו/או
time=לsensor.skip_frames()אם הסתמכתם על מספר פריימים קבוע (השינוי ב-skip_frames).
כל שאר הסקריפטים רצים ללא שינוי.