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, סיבוב).ספריות — נוספו מנהל ההתקן לחיישן מרחק
vl53l1xToF, מנהל ההתקן למנועים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 העבודה הטיפוסית היא:
הסבו את קוד ה-
cpufreqל-set_frequency()של מספר שלם ב-MHz ול-get_current_frequencies()/get_supported_frequencies()(העיצוב מחדש של cpufreq).העבירו את
maskל-image.replace()כמילת מפתח (שינוי replace).הקצו frame buffers נוספים כ-
GRAYSCALE/RGB565במקום Bayer/JPEG (שינוי alloc_extra_fb).תפסו
ValueErrorסביבsensor.set_framesize()במקום לבדוק אם הוחזרFalse(שינוי set_framesize).
כל שאר הסקריפטים רצים ללא שינוי.