v3.7.0

v3.7.0 היא גרסה גדולה. היא מוסיפה את מודול ה-audio (מיקרופון PDM של Portenta H7) עם API חדש ולא-חוסם מבוסס פונקציית callback, את מודול זיהוי הדיבור micro_speech של TensorFlow, בקר LCD חדש לגמרי של RGB מקבילי (עם פלט HDMI ומגע FT5X06), מתודת image.flush() עם קבועי פורמט פיקסל, וצינור הקנה-מידה (scaling) של image.draw_image() שנכתב מחדש. כמה ספריות סיוע ומתודות תמונה מדור קודם הוסרו והחשבון של yuv_to_* השתנה — קראו את השינויים השוברים שלהלן.

עיקרי הדברים

  • מודול audio — לכידה ממיקרופון PDM מובנה של Portenta H7 עם API לא-חוסם של start_streaming(callback).

  • micro_speech — מודול זיהוי דיבור מיקרו של TensorFlow.

  • בקר LCD חדש — תמיכה בתצוגת RGB מקבילי, פלט HDMI (TFP410), ומגע FT5X06.

  • image.draw_image() — נכתב מחדש עם צינור מלא של קנה-מידה/אלפא/פלטה (x_scale / y_scale / hint / color_palette …).

  • image.flush() בתוספת קבועי פורמט פיקסל (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • שובר: ספריות סיוע מתמטיות מדור קודם וכמה מתודות תמונה הוסרו, ה-API של draw_image() / LCD עוצב מחדש, ו-yuv_to_* אינו מחסר עוד 128 — ראו את השינויים השוברים.

תכונות חדשות

  • audio — מודול audio חדש ל-Portenta H7 ללכידה ממיקרופון PDM: audio.init(), audio.start_streaming(callback) לא-חוסם, ו-audio.stop_streaming() (התדר מצוין ב-Hz).

  • micro_speech — מודול חדש עם מחלקת MicroSpeech, audio_callback(), ו-micro_speech() לזיהוי דיבור של TensorFlow; listen() משתמש בממוצע חלון נע ומקבל מילת מפתח filter להגבלת התוצאות לרשימת תוויות.

  • LCD — בקר LCD חדש עם תמיכה בתצוגת RGB מקבילי, סוגי LCD_NONE / LCD_SHIELD / LCD_DISPLAY, קבועי framesize רבים, triple_buffer / framesize / refresh / bgr / deinit, display מורחב, פלט HDMI דרך ה-TFP410, ותמיכה במסך מגע FT5X06.

  • image.flush() — נוספה מתודת image.flush() וקבועי פורמט פיקסל (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — נכתב מחדש עם צינור קנה-מידה חדש: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette, ו-hint, בתוספת קבועי image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST ודוגמאות חדשות של מיזוג-אלפא / טבלת-צבעים / קנה-מידה.

  • ImageReader.next_frame() קיבל מילת מפתח pause להשבתת השהיית ההשמעה בזמן אמת.

  • נוספו דוגמאות אודיו של Portenta (audio_fft.py, micro_speech.py) ודוגמת התעוררות-מ-stop של ExtInt.

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

  • הדוגמאות המובנות אורגנו מחדש תחת scripts/examples/Arduino/; ה-framebuffer מתעדכן כעת מיידית לאחר טעינת/יצירת תמונות עם copy_to_fb=True (אין צורך ב-flush ידני); ה-heap של ה-Portenta הוקטן מעט כדי להכיל יותר מצב מנהל-התקן סטטי.

תיקוני באגים

מצלמה והדמיה:

  • תוקן היפוך אדום/כחול (סדר בתים של RGB565) בתמונות שנלכדו, עיגול ציור של DMA2D כך שיתאים לשאר קוד הציור, השחתת fb_alloc בהקצאות רקורסיביות (find_blobs()), ו-top_hat() / black_hat() הותנו בכך ששתי הפעולות הבינאריות והמתמטיות מופעלות.

תצוגה ואודיו:

  • תוקנו פלט מגן ה-LCD ומצב האודיו המונו חד-ערוצי של ה-Portenta.

Portenta:

  • נמצא פתרון עוקף לבעיית Ethernet/SDRAM (הנעת rst_eth ל-high) ותוקנה תצורת תזמון ה-SDRAM.

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

  • Arduino Portenta H7 — לכידת אודיו ממיקרופון PDM מובנה (SAI / PDM2PCM).

  • LCD — בקר תצוגת RGB-מקבילי חדש (LTDC הופעל בבניית ה-H7), פלט HDMI דרך ה-TFP410, ותמיכת LCD במסך מגע FT5X06.

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

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

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

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

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

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

ספריות סיוע מתמטיות מדור קודם הוסרו (minor)

ספריות הסיוע mtx, rv, ulinalg, umatrix, ו-vec הוסרו מ-scripts/libraries לטובת ulab. סקריפטים שמבצעים import לאחת מאלה ייכשלו ויש להעבירם ל-ulab.

Commits: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() הוסרו (minor)

image.remove_shadows(), image.chrominvar(), ו-image.illuminvar() נמחקו ללא תחליף. סקריפטים שקוראים למתודות אלה חייבים להסיר את הקריאות.

Commits: 3173c2bb3

החתימה של image.draw_image() עוצבה מחדש (minor)

image.draw_image() נכתב מחדש על גבי צינור קנה-מידה חדש. הארגומנטים הישנים של alpha מיקומי / scale יחיד והסדר המיקומי הקודם אינם חלים עוד; השתמשו בצורת מילות המפתח החדשה (x_scale= / y_scale= או x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits: 3439f8824

כתיבה מחדש של מודול LCD (minor)

מודול ה-lcd נכתב מחדש עבור בקר התצוגה החדש. lcd.init() מקבל כעת type של תצוגה (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) וארגומנטים חדשים של מילות מפתח, ומשטח הקבועים / ה-API אורגן מחדש באופן ניכר. סקריפטים ישנים מבוססי-מגן ברובם עדיין עובדים, אך ברירות המחדל וההתנהגות השתנו — בדקו סקריפטי LCD מול ה-API החדש של type / framesize.

Commits: 185538207

yuv_to_* אינו מחסר עוד 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() מתייחסים כעת לאיבר ה-Y של ה-tuple כערך ללא-סימן בטווח 0–255 במקום לחסר 128. הקוראים חייבים להעביר Y ללא ההיסט הקודם של −128 כדי לקבל את אותם הצבעים כמו קודם.

Commits: dcf141192

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

למעבר נקי ל-v3.7.0, העבודה הטיפוסית היא:

  1. העבירו שימוש ב-mtx / rv / ulinalg / umatrix / vec אל ulab (הסרת ספריית המתמטיקה).

  2. הסירו קריאות ל-image.remove_shadows() / chrominvar() / illuminvar() (מתודות התמונה שהוסרו).

  3. עדכנו קריאות ל-image.draw_image() לחתימת מילות המפתח החדשה (עיצוב מחדש של draw_image).

  4. בדקו סקריפטי LCD מול ה-API החדש של lcd type / framesize (כתיבה מחדש של LCD).

  5. הסירו את ההיסט של −128 בעת העברת Y ל-yuv_to_* (שינוי yuv_to_*).

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