v3.7.0

v3.7.0 là một bản phát hành lớn. Bổ sung module audio (micro PDM Portenta H7) với API callback không chặn mới, module nhận dạng giọng nói TensorFlow micro_speech, bộ điều khiển LCD RGB song song hoàn toàn mới (với đầu ra HDMI và cảm ứng FT5X06), phương thức image.flush() với các hằng số định dạng điểm ảnh, và pipeline scaling image.draw_image() được viết lại. Một số thư viện trợ giúp kế thừa và phương thức ảnh đã bị xóa và phép tính yuv_to_* đã thay đổi — hãy đọc phần thay đổi không tương thích bên dưới.

Điểm nổi bật

  • Module audio — thu âm từ micro PDM tích hợp Portenta H7 với API start_streaming(callback) không chặn.

  • micro_speech — một module nhận dạng giọng nói micro TensorFlow.

  • Bộ điều khiển LCD mới — hỗ trợ màn hình RGB song song, đầu ra HDMI (TFP410), và cảm ứng FT5X06.

  • image.draw_image() — được viết lại với pipeline scaling/alpha/palette đầy đủ (x_scale / y_scale / hint / color_palette …).

  • image.flush() cùng các hằng số định dạng điểm ảnh (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Không tương thích: các thư viện toán học trợ giúp kế thừa và một số phương thức ảnh đã bị xóa, API draw_image() / LCD đã được làm lại, và yuv_to_* không còn trừ 128 — xem phần thay đổi không tương thích.

Tính năng mới

  • audio — module audio mới cho Portenta H7 để thu âm từ micro PDM: audio.init(), audio.start_streaming(callback) không chặn, và audio.stop_streaming() (tần số được chỉ định theo Hz).

  • micro_speech — module mới với lớp MicroSpeech, audio_callback(), và micro_speech() cho nhận dạng giọng nói TensorFlow; listen() sử dụng trung bình cửa sổ trượt và chấp nhận từ khóa filter để giới hạn kết quả theo danh sách nhãn.

  • LCD — bộ điều khiển LCD mới với hỗ trợ màn hình RGB song song, các kiểu LCD_NONE / LCD_SHIELD / LCD_DISPLAY, nhiều hằng số kích thước khung hình, triple_buffer / framesize / refresh / bgr / deinit, display mở rộng, đầu ra HDMI qua TFP410, và hỗ trợ màn hình cảm ứng FT5X06.

  • image.flush() — đã thêm phương thức image.flush() và các hằng số định dạng điểm ảnh (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — được viết lại với pipeline scaling mới: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette, và hint, cùng các hằng số image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST và các ví dụ mới về alpha-blending / color-table / scaling.

  • ImageReader.next_frame() đã thêm từ khóa pause để tắt độ trễ phát lại thời gian thực.

  • Đã thêm các ví dụ audio Portenta (audio_fft.py, micro_speech.py) và một ví dụ wake-from-stop với ExtInt.

Các thay đổi và cải tiến khác

  • Các ví dụ tích hợp đã được tổ chức lại trong scripts/examples/Arduino/; bộ đệm khung hình hiện cập nhật tức thì sau khi tải/tạo ảnh với copy_to_fb=True (không cần flush thủ công); heap Portenta được giảm nhẹ để chứa thêm trạng thái driver tĩnh.

Sửa lỗi

Camera và xử lý ảnh:

  • Đã sửa lỗi hoán đổi đỏ/xanh (thứ tự byte RGB565) trong ảnh chụp, làm tròn vẽ DMA2D để phù hợp với code vẽ khác, lỗi hỏng fb_alloc trong các phân bổ đệ quy (find_blobs()), và đặt điều kiện top_hat() / black_hat() sau khi cả hai phép toán nhị phân và toán học đều được bật.

Hiển thị và âm thanh:

  • Đã sửa đầu ra LCD shield và chế độ âm thanh mono 1 kênh Portenta.

Portenta:

  • Đã xử lý sự cố Ethernet/SDRAM (đặt rst_eth cao) và sửa cấu hình thời gian SDRAM.

Phần cứng và hỗ trợ board

  • Arduino Portenta H7 — thu âm micro PDM tích hợp (SAI / PDM2PCM).

  • LCD — bộ điều khiển màn hình RGB song song mới (LTDC được bật trong bản build H7), đầu ra HDMI qua TFP410, và hỗ trợ LCD màn hình cảm ứng FT5X06.

Thay đổi API không tương thích

Các thay đổi API hiển thị với người dùng giữa v3.6.9 và v3.7.0. Phạm vi: các C-module Python trong modules/ và các thư viện Python trong scripts/libraries/.

Mỗi thay đổi được gắn nhãn theo mức độ ảnh hưởng:

  • nhỏ — API hẹp; chỉ ảnh hưởng đến các tập lệnh đã sử dụng nó.

  • hành vi — API giống nhau, kết quả khác; hãy kiểm tra lại các tập lệnh đã tinh chỉnh.

Các thay đổi được nhóm theo mức độ ảnh hưởng theo thứ tự đó. Nếu bạn chỉ muốn chuyển đổi code, hãy chuyển đến danh sách kiểm tra chuyển đổi ở cuối. Mỗi hash commit liên kết đến diff trên GitHub.

Đã xóa các thư viện toán học trợ giúp kế thừa (nhỏ)

Các thư viện trợ giúp mtx, rv, ulinalg, umatrix, và vec đã bị xóa khỏi scripts/libraries nhường chỗ cho ulab. Các tập lệnh import bất kỳ thư viện nào trong số này sẽ thất bại và phải được chuyển sang ulab.

Commits: 1f7da9272

Đã xóa remove_shadows() / chrominvar() / illuminvar() (nhỏ)

image.remove_shadows(), image.chrominvar(), và image.illuminvar() đã bị xóa mà không có thay thế. Các tập lệnh gọi các phương thức này phải xóa các lệnh gọi đó.

Commits: 3173c2bb3

Chữ ký image.draw_image() đã được làm lại (nhỏ)

image.draw_image() đã được viết lại trên pipeline scaling mới. Các đối số vị trí alpha / scale đơn cũ và thứ tự vị trí trước đó không còn áp dụng; hãy sử dụng dạng từ khóa mới (x_scale= / y_scale= hoặc x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits: 3439f8824

Viết lại module LCD (nhỏ)

Module lcd đã được viết lại cho bộ điều khiển màn hình mới. lcd.init() hiện nhận type màn hình (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) và các đối số từ khóa mới, và bề mặt hằng số / API đã được tổ chức lại đáng kể. Các tập lệnh chỉ dùng shield cũ hầu hết vẫn hoạt động, nhưng các giá trị mặc định và hành vi đã thay đổi — hãy xem lại các tập lệnh LCD với API type / framesize mới.

Commits: 185538207

yuv_to_* không còn trừ 128 (hành vi)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() hiện xử lý phần tử tuple Y là giá trị không dấu 0–255 thay vì trừ 128. Người gọi phải truyền Y mà không có độ lệch −128 trước đó để có màu sắc tương tự như trước.

Commits: dcf141192

Danh sách kiểm tra chuyển đổi

Để chuyển đổi sạch sang v3.7.0, công việc thông thường là:

  1. Chuyển đổi các cách dùng mtx / rv / ulinalg / umatrix / vec sang ulab (việc xóa thư viện toán học).

  2. Xóa các lệnh gọi image.remove_shadows() / chrominvar() / illuminvar() (các phương thức ảnh đã xóa).

  3. Cập nhật các lệnh gọi image.draw_image() theo chữ ký từ khóa mới (việc làm lại draw_image).

  4. Xem lại các tập lệnh LCD với API type / framesize của lcd mới (việc viết lại LCD).

  5. Bỏ độ lệch −128 khi truyền Y vào yuv_to_* (thay đổi yuv_to_*).

Tất cả các tập lệnh khác chạy bình thường.