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

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