v3.3.0#

v3.3.0 היא גרסה ענקית. היא מוסיפה תמיכה מלאה במצלמה תרמית FLIR Lepton באמצעות ממשק sensor.ioctl() חדש ופלטות צבע, מודול פלט וידאו SPI בשם tv, מצב הפעלה מבוקר עם תריס גלובלי (global-shutter), אצווה גדולה של מתודות ציור/ניתוח חדשות ב-image (gamma_corr(), draw_ellipse(), draw_edges(), מאפייני blob רבים), וספריות ToF / מנועים / linalg חדשות. ממשק ה-cpufreq עוצב מחדש ו-sensor.set_framesize() כעת מעלה חריגה — קראו על השינויים שוברי התאימות שלהלן.

עיקרי הדברים#

  • FLIR Lepton — תמיכה מלאה במצלמה תרמית באמצעות ממשק sensor.ioctl() החדש, פלטות צבע, ו-image.to_rainbow().

  • מודול tv — פלט וידאו SPI TV / composite.

  • מצב הפעלה מבוקר עם תריס גלובלי — לכידה מבוקרת ב-MT9V034 באמצעות sensor.ioctl().

  • עיבוד תמונהgamma_corr(), draw_ellipse(), draw_edges(), מיזוג אלפא ב-draw_image(), ומאפייני blob חדשים רבים.

  • ספריות חדשות — מדידת מרחק VL53L1X ToF, מנהל ההתקן למנועים TB6612, micro-linalg.

  • שובר תאימות: ממשק ה-cpufreq עוצב מחדש, sensor.set_framesize() כעת מעלה חריגה בכישלון, sensor.alloc_extra_fb() הסיר תמיכה ב-Bayer/JPEG, וארגומנטים מיקומיים של image.replace() הוסטו — ראו את השינויים שוברי התאימות.

תכונות חדשות#

  • FLIR Lepton — נוסף sensor.ioctl() לשליטה ייחודית לחיישן וסט מלא של ioctls עבור Lepton (רדיומטריה, רענון/רזולוציה, run-command, הגדרת/קריאת מאפיין, טמפרטורת FPA/AUX ב-°C, מצב/טווח מדידה, רוחב/גובה), sensor.set_color_palette() / sensor.get_color_palette() עם sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow(), וסקריפטים לדוגמה של Lepton (27-Lepton).

  • מצב מבוקרIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE ללכידה מבוקרת עם תריס גלובלי ב-MT9V034, עם דוגמאות לקצב פריימים גבוה ולמצב מבוקר.

  • מודול tv — נוספו קישורי פלט וידאו SPI TV / composite.

  • עיבוד תמונה — נוספו image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), מיזוג אלפא ב-draw_image(), מילת מפתח mask= ל-clear(), נוספו מחדש mask_rectangle() / mask_circle() / mask_ellipse(), מילות מפתח לסיבוב / hmirror / vflip ב-draw_string() / draw_text(), מילת מפתח transpose (וכינויים assign / set) ב-replace(), copy() x_scale / y_scale בנוסף ל-crop() / scale(), בנאי Image() מתוך מימדים, פורמט הפיקסל sensor.BINARY, פונקציות המרת מרחבי צבע מיוצאות, ומאפייני blob חדשים רבים (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, סיבוב).

  • ספריות — נוספו מנהל ההתקן לחיישן מרחק vl53l1x ToF, מנהל ההתקן למנועים tb6612 (עם דוגמאות Motor-Shield למנוע DC ולמנוע צעד), וספריית micro-linalg (ulinalg / umatrix).

  • שודרגה FatFS ל-FF13C (עם תמיכה ב-exFAT).

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

  • שופרה איכות ה-JPEG כברירת מחדל (אמצע הטווח בין נמוך לגבוה במקום ערך קבוע מקודד); פעולות תמונה במקום (in-place) שוב אינן דורשות לחזור על התמונה כארגומנט הראשון; draw_string() מקבל ערכי קנה מידה שאינם שלמים.

תיקוני באגים#

מצלמה וחיישנים:

  • תוקנה תקיעת אתחול של Lepton 3.5 (timeout + שחזור) ואמינות איפוס, set_framesize() לפני set_pixformat() ב-MT9V034 (סדר הקריאה כבר אינו משנה), WVGA של MT9V034 על ה-STM32H7, טווח החשיפה האוטומטית ועדכוני אוגרי הצללה של MT9V034, ובאג ה-ADC של ה-H7.

עיבוד תמונה:

  • תוקנו גישת זיכרון לא חוקית ב-find_apriltags(), copy() בעת העתקת תמונה מוקטנת ל-frame buffer הראשי, הקצאת ה-frame buffer של to_grayscale() / to_rgb565(), ה-len() של אובייקט keypoint, טיפול בגבולות MCU של JPEG, ניתוח רשימת הסף ב-binary(), ו-draw_keypoints() המקבל tuples של keypoint.

מערכת:

  • תוקנו דליפות חוסר איזון של mark/free ב-fb_alloc במתודות image / fir / lcd / tv / nn, נעשה כך ש-py_assert משחרר זיכרון frame buffer בעת חריגות שנתפסו (#417), נוקה דגל ה-overrun (ORE) של ה-UART כך ש-overruns כבר אינם תוקעים קריאות UART, תוקן מטפל ה-IRQ של ה-RTC, ותוקן כלי ה-cascade_convert.py ב-Windows.

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

  • מצלמה תרמית FLIR Lepton.

  • TV shield — פלט וידאו SPI TV / composite.

  • תריס גלובלי (MT9V034) במצב מבוקר.

שינויי API שוברי תאימות#

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

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

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

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

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

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

ממשק ה-cpufreq עוצב מחדש (major)#

מודול ה-cpufreq עוצב מחדש לתמיכה ב-H7. הקבועים cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ ו-cpufreq.get_frequency() הוסרו. cpufreq.set_frequency() כעת מקבל מספר שלם פשוט של MHz (למשל cpufreq.set_frequency(120)), ונוספו cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies().

Commits: 6babf84a1

הארגומנטים המיקומיים של image.replace() הוסטו (minor)#

image.replace() קיבל ארגומנט transpose, מה שהסיט את הארגומנט המיקומי mask מהמיקום הרביעי למיקום החמישי. קוד שהעביר את mask מיקומית (למשל img.replace(src, hmirror, vflip, mask)) חייב לעבור לצורת מילת המפתח img.replace(src, mask=mask).

Commits: dbe7bf059

sensor.alloc_extra_fb() כבר אינו מקבל Bayer/JPEG (minor)#

sensor.alloc_extra_fb() כבר אינו מקבל sensor.BAYER או sensor.JPEG (הוא כעת תומך גם ב-sensor.BINARY). קוד שהקצה frame buffers נוספים בפורמט Bayer או JPEG חייב להשתמש ב-GRAYSCALE / RGB565 (או להקצות את ה-buffer בדרך אחרת).

Commits: f9e6b3fe0

sensor.set_framesize() מעלה חריגה בכישלון (behavior)#

sensor.set_framesize() כעת מעלה ValueError כאשר גודל הפריים אינו נתמך במקום להחזיר False. קוד שבדק את ערך ההחזרה False חייב לתפוס במקום זאת את החריגה ValueError.

Commits: b0442633e

רשימת הסבה#

להסבה נקייה ל-v3.3.0 העבודה הטיפוסית היא:

  1. הסבו את קוד ה-cpufreq ל-set_frequency() של מספר שלם ב-MHz ול-get_current_frequencies() / get_supported_frequencies() (העיצוב מחדש של cpufreq).

  2. העבירו את mask ל-image.replace() כמילת מפתח (שינוי replace).

  3. הקצו frame buffers נוספים כ-GRAYSCALE / RGB565 במקום Bayer/JPEG (שינוי alloc_extra_fb).

  4. תפסו ValueError סביב sensor.set_framesize() במקום לבדוק אם הוחזר False (שינוי set_framesize).

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