v3.7.0

v3.7.0 เป็นรุ่นใหญ่ เพิ่มโมดูล audio (ไมโครโฟน PDM ของ Portenta H7) พร้อม API คอลแบ็กแบบ non-blocking ใหม่, โมดูลการจดจำเสียงพูด TensorFlow micro_speech, คอนโทรลเลอร์ LCD parallel-RGB ใหม่ (พร้อมเอาต์พุต HDMI และการสัมผัส FT5X06), เมธอด image.flush() พร้อมค่าคงที่รูปแบบพิกเซล และ pipeline การปรับขนาด image.draw_image() ที่เขียนใหม่ ไลบรารีช่วยเหลือแบบ legacy บางส่วนและเมธอด image ถูกลบออก และคณิตศาสตร์ yuv_to_* มีการเปลี่ยนแปลง — อ่านการเปลี่ยนแปลงที่ทำให้เกิดความเสียหายด้านล่าง

Highlights

  • โมดูล audio — การบันทึกไมโครโฟน PDM บนบอร์ด Portenta H7 พร้อม API start_streaming(callback) แบบ non-blocking

  • micro_speech — โมดูลการจดจำเสียงพูด TensorFlow micro-speech

  • คอนโทรลเลอร์ LCD ใหม่ — รองรับการแสดงผล parallel RGB, เอาต์พุต HDMI (TFP410) และการสัมผัส FT5X06

  • image.draw_image() — เขียนใหม่พร้อม pipeline การปรับขนาด/alpha/palette แบบครบถ้วน (x_scale / y_scale / hint / color_palette …)

  • image.flush() พร้อมค่าคงที่รูปแบบพิกเซล (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG)

  • ความเสียหาย: ไลบรารีช่วยคณิตศาสตร์แบบ legacy และเมธอด image บางส่วนถูกลบออก draw_image() / LCD APIs ถูกปรับใหม่ และ yuv_to_* ไม่ลบ 128 อีกต่อไป — ดูการเปลี่ยนแปลงที่ทำให้เกิดความเสียหาย

New features

  • audio — โมดูล audio ใหม่สำหรับ Portenta H7 สำหรับการบันทึกไมโครโฟน PDM: audio.init(), audio.start_streaming(callback) แบบ non-blocking และ audio.stop_streaming() (ความถี่ระบุเป็น Hz)

  • micro_speech — โมดูลใหม่พร้อมคลาส MicroSpeech, audio_callback() และ micro_speech() สำหรับการจดจำเสียงพูด TensorFlow; listen() ใช้ค่าเฉลี่ยแบบ running-window และรับ keyword filter เพื่อจำกัดผลลัพธ์ให้อยู่ในรายการป้ายกำกับ

  • LCD — คอนโทรลเลอร์ LCD ใหม่พร้อมรองรับการแสดงผล parallel RGB, ประเภท LCD_NONE / LCD_SHIELD / LCD_DISPLAY, ค่าคงที่ขนาดเฟรมหลายค่า, triple_buffer / framesize / refresh / bgr / deinit, display ที่ขยายใหญ่ขึ้น, เอาต์พุต HDMI ผ่าน TFP410 และรองรับหน้าจอสัมผัส FT5X06

  • image.flush() — เพิ่มเมธอด image.flush() และค่าคงที่รูปแบบพิกเซล (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG)

  • image.draw_image() — เขียนใหม่พร้อม pipeline การปรับขนาดใหม่: 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 และตัวอย่างการ alpha-blending / color-table / scaling ใหม่

  • ImageReader.next_frame() ได้รับ keyword pause เพื่อปิดใช้งานการหน่วงการเล่นแบบ real-time

  • เพิ่มตัวอย่าง audio ของ Portenta (audio_fft.py, micro_speech.py) และตัวอย่าง ExtInt wake-from-stop

Other changes and improvements

  • ตัวอย่างในตัวถูกจัดระเบียบใหม่ภายใต้ scripts/examples/Arduino/; บัฟเฟอร์เฟรมตอนนี้อัปเดตทันทีหลังจากโหลด/สร้างภาพด้วย copy_to_fb=True (ไม่ต้อง flush เอง); heap ของ Portenta ถูกลดลงเล็กน้อยเพื่อให้มีพื้นที่สำหรับสถานะ driver แบบ static มากขึ้น

Bug fixes

Camera and imaging:

  • แก้ไขการสลับแดง/น้ำเงิน (ลำดับไบต์ RGB565) ในภาพที่บันทึก, การปัดเศษ DMA2D draw เพื่อให้ตรงกับโค้ด draw อื่นๆ, การเสียหายของ fb_alloc ในการจัดสรรแบบ recursive (find_blobs()), และปิดการใช้งาน top_hat() / black_hat() หลังจากเปิดใช้งานทั้ง binary และ math ops

Display and audio:

  • แก้ไขเอาต์พุต LCD shield และโหมด mono audio 1 channel ของ Portenta

Portenta:

  • แก้ไขปัญหา Ethernet/SDRAM (ดึง rst_eth ให้สูง) และแก้ไขการตั้งค่า timing ของ SDRAM

Hardware and board support

  • Arduino Portenta H7 — การบันทึก audio ด้วยไมโครโฟน PDM บนบอร์ด (SAI / PDM2PCM)

  • LCD — คอนโทรลเลอร์การแสดงผล parallel-RGB ใหม่ (เปิดใช้งาน LTDC ใน H7 build), เอาต์พุต HDMI ผ่าน TFP410 และรองรับ LCD หน้าจอสัมผัส FT5X06

Breaking API changes

การเปลี่ยนแปลง API ที่ผู้ใช้มองเห็นได้ระหว่าง v3.6.9 และ v3.7.0 ขอบเขต: Python C-modules ใน modules/ และ Python libraries ใน scripts/libraries/

การเปลี่ยนแปลงแต่ละอย่างถูกแท็กด้วยผลกระทบ:

  • minor — API แคบ; มีผลกระทบเฉพาะสคริปต์ที่ใช้งาน

  • behavior — API เดิม ผลลัพธ์ต่างกัน ตรวจสอบสคริปต์ที่ปรับแต่งอีกครั้ง

การเปลี่ยนแปลงถูกจัดกลุ่มตามผลกระทบในลำดับนั้น หากต้องการพอร์ตโค้ดของคุณ ไปที่ migration checklist ที่ท้ายเอกสาร แต่ละ commit hash เชื่อมโยงไปยัง diff บน GitHub

ลบไลบรารีช่วยคณิตศาสตร์แบบ legacy ออกแล้ว (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

ปรับ signature ของ image.draw_image() ใหม่ (minor)

image.draw_image() ถูกเขียนใหม่บน pipeline การปรับขนาดใหม่ อาร์กิวเมนต์ตำแหน่ง alpha / scale เดิมและลำดับตำแหน่งก่อนหน้าไม่ใช้แล้ว ให้ใช้รูปแบบ keyword ใหม่ (x_scale= / y_scale= หรือ x_size= / y_size=, alpha=, color_palette=, hint= …)

Commits: 3439f8824

เขียน LCD module ใหม่ (minor)

โมดูล lcd ถูกเขียนใหม่สำหรับคอนโทรลเลอร์การแสดงผลใหม่ lcd.init() ตอนนี้รับ type การแสดงผล (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) และ keyword arguments ใหม่ และพื้นผิว constant / API ถูกจัดระเบียบใหม่อย่างมาก สคริปต์ shield เดิมส่วนใหญ่ยังคงทำงานได้ แต่ค่าเริ่มต้นและพฤติกรรมมีการเปลี่ยนแปลง — ตรวจสอบสคริปต์ LCD กับ API type / framesize ใหม่

Commits: 185538207

yuv_to_* ไม่ลบ 128 อีกต่อไป (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() ตอนนี้ถือว่า element Y ของ tuple เป็นค่า unsigned 0–255 แทนที่จะลบ 128 ผู้เรียกต้องส่ง Y โดยไม่มี bias −128 เดิมเพื่อให้ได้สีเหมือนเดิม

Commits: dcf141192

Migration checklist

สำหรับการพอร์ตไปยัง v3.7.0 อย่างราบรื่น งานทั่วไปคือ:

  1. พอร์ตการใช้งาน mtx / rv / ulinalg / umatrix / vec ไปยัง ulab (การลบไลบรารีคณิตศาสตร์)

  2. ลบการเรียก image.remove_shadows() / chrominvar() / illuminvar() (เมธอด image ที่ถูกลบ)

  3. อัปเดตการเรียก image.draw_image() เป็น signature keyword ใหม่ (การปรับ draw_image ใหม่)

  4. ตรวจสอบสคริปต์ LCD กับ API type / framesize ของ lcd ใหม่ (การเขียน LCD ใหม่)

  5. ลบ bias −128 เมื่อส่ง Y ไปยัง yuv_to_* (การเปลี่ยนแปลง yuv_to_*)

สคริปต์อื่นๆ ทั้งหมดทำงานได้โดยไม่ต้องแก้ไข