v3.9.0

v3.9.0 là bản phát hành lớn. Nó bổ sung cổng nRF với Arduino Nano 33 BLE Sense (camera, mô-đun audio PDM, ulab, driver cảm biến đóng băng), mang lại hỗ trợ cảm biến nhiệt FLIR Lepton cùng MLX90641 / MLX90621 và mô-đun fir được cải tiến hoàn toàn, ioctls tự động lấy nét OV5640, và kiểu streaming mới image.ImageIO. Mô-đun CMSIS-NN nn cũ và các class ImageReader / ImageWriter đã bị xóa — hãy đọc phần thay đổi không tương thích bên dưới.

Điểm nổi bật

  • Arduino Nano 33 BLE Sense — cổng nRF52840 mới với camera, mô-đun audio PDM, ulab và driver cảm biến đóng băng.

  • Nhiệt — hỗ trợ FLIR Lepton, MLX90641 và MLX90621 với mô-đun fir được cải tiến (bảng màu, phản chiếu, chia tỷ lệ, đo phóng xạ, FFC).

  • Tự động lấy nét OV5640 — các ioctls sensor.IOCTL_*_AUTO_FOCUS mới.

  • image.ImageIO — kiểu luồng ảnh thống nhất (bộ nhớ hoặc tệp; đọc/ghi/tìm kiếm/kích thước/đóng) thay thế cho ImageReader / ImageWriter.

  • Thay đổi không tương thích: mô-đun CMSIS-NN nnimage.ImageReader / image.ImageWriter đã bị xóa, và hành vi của find_lines() / fir đã thay đổi — xem phần thay đổi không tương thích.

Tính năng mới

  • Cổng nRF / Arduino Nano 33 BLE Sense — cổng nRF52840 mới và hỗ trợ bo mạch, với mô-đun audio mới (audio.init(), audio.start_streaming(), audio.stop_streaming()), bật ulab, và driver cảm biến apds9960 / lps22h / lsm9ds1 / hts221 đóng băng.

  • image.ImageIO — kiểu luồng ảnh mới hỗ trợ cả luồng bộ nhớ và tệp với read() / write() / seek() / size() / close(), cùng các ví dụ đọc/ghi/bộ nhớ ImageIO.

  • FLIR Lepton — đã thêm hỗ trợ FIR_LEPTON với fir.radiometric(), fir.trigger_ffc()fir.register_vsync_cb().

  • Cảm biến nhiệt — đã thêm hỗ trợ MLX90641 (FIR_MLX90641) và thermopile MLX90621 (driver Melexis chính thức).

  • Bảng màu / hướng fir — đã thêm các hằng số fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565, và fir.read_ir() giờ chấp nhận hmirror / vflip / transpose.

  • Tự động lấy nét OV5640 — đã thêm sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • Đã tổ chức lại các ví dụ Arduino vào các thư mục theo bo mạch.

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

  • Chuyển sang thông báo lỗi MicroPython nén (chuỗi ngoại lệ ngắn hơn); tham số type của fir.init() giờ tự phát hiện qua quét bus I2C khi bỏ qua; ngoại lệ xalloc giờ báo cáo số byte được yêu cầu; UART 8 đã được bật trên Portenta; các ví dụ FIR đã được hợp nhất thành thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. Để vừa flash, image.get_similarity() và tìm kiếm có chọn lọc đã bị vô hiệu hóa trong bản OpenMV 4, và thư viện ảnh giờ có thể được xây dựng mà không cần filesystem (cho các bo mạch không có filesystem).

Sửa lỗi

Camera và cảm biến:

  • Đã sửa tính toán PCLK OV5640, thêm các xử lý IRQ I2C bị thiếu (sửa treo chuyển giao I2C), cải tiến đọc/ghi I2C cambus để tăng độ tin cậy, làm cho bus I2C Lepton có thể chọn được, chuyển các chân khôi phục bus cambus sang cấu hình theo bo mạch, thử lại quét cambus một lần trước khi thất bại, và làm cho OpenMV PT (Lepton + camera dùng chung I2C) hoạt động.

Nhiệt:

  • Đã sửa tính toán giá trị lớn nhất trong get_ir() / draw_ir()image.get_similarity() của fir (FLT_MIN-FLT_MAX), xử lý 12→16-bit AMG8833, và độ chính xác MLX90621 (driver Melexis chính thức).

Màn hình, âm thanh và hệ thống:

  • Đã chuyển các chuyển giao SPI LCD STM32 sang callbacks HAL SPI (độ tin cậy màn hình), sửa audio.init() Nano 33 (bộ dao động HF + tỷ lệ PDM để microphone hoạt động), trạng thái bộ định thời H7 với HAL mới, gc_collect nRF và khởi tạo/deinit bo mạch sớm, và ngừng in thông báo nhiễu "uh oh, no preference for overlapping detection" trong quá trình find_apriltags() / find_rects().

Phần cứng và hỗ trợ bo mạch

  • Arduino Nano 33 BLE Sense — bo mạch nRF52840 mới (camera, audio PDM, ulab, driver cảm biến đóng băng).

  • Cảm biến nhiệt FLIR Lepton, MLX90641MLX90621.

  • Tự động lấy nét OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — UART 8 đã được bật.

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.8.0 và v3.9.0. Phạm vi: các C-module Python trong modules/ và thư viện Python trong scripts/libraries/.

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

  • lớn — ảnh hưởng đến hầu hết các tập lệnh đã sử dụng tính năng; bạn sẽ cần chuyển đổi code.

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

  • hành vi — cùng API, 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 di chuyển ở cuối trang. Mỗi mã băm commit liên kết đến diff trên GitHub.

Mô-đun CMSIS-NN nn đã bị xóa (lớn)

Mô-đun CMSIS-NN nn đã bị xóa, bao gồm nn.load(), net.forward(), net.search() và trợ giúp nn_class. Suy luận mô hình (ML) chuyển sang mô-đun TensorFlow Lite (tf). Các tập lệnh tải mô hình .network bằng nn phải được chuyển đổi sang tf với mô hình TensorFlow Lite.

Commits: fbc767b36

ImageReader / ImageWriter được thay thế bởi image.ImageIO (lớn)

image.ImageReader / image.ImageWriter và các phương thức next_frame() / add_frame() đã bị xóa và thay thế bằng kiểu image.ImageIO mới, hỗ trợ cả luồng bộ nhớ và tệp qua read() / write() / seek() / size() / close(). Code sử dụng các class reader/writer cũ phải được chuyển đổi sang image.ImageIO (xem các ví dụ đã đổi tên imageio_read.py / imageio_write.py).

Commits: 783a78754

Từ khóa scale của fir.draw_ir() đã bị xóa (nhỏ)

fir.draw_ir() đã được viết lại trên pipeline vẽ ảnh mới. Từ khóa scale=(min, max) đã bị xóa, và các đối số hint, x_scale, y_scale, roi và x/y offset theo vị trí đã được thêm vào. Các tập lệnh truyền scale=(min, max) vào fir.draw_ir() phải bỏ nó và dùng các đối số mới.

Commits: 0a29103b1

Xấp xỉ find_lines() (hành vi)

image.find_lines() giờ xấp xỉ độ lớn gradient là (abs(gx) + abs(gy)) / 2 và bỏ qua các độ lớn dưới 126. Điều này nhanh hơn nhưng thay đổi tập hợp các đường được phát hiện và giá trị bộ tích lũy, vì vậy hãy kiểm tra lại và điều chỉnh lại threshold / theta_margin / rho_margin.

Commits: 902ae3c98

fir.snapshot() được cải tiến (hành vi)

fir.snapshot() đã được cải tiến đáng kể với API từ khóa mới (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), và các ví dụ đi kèm đã được viết lại. Hành vi theo vị trí/chỉ pixformat trước đây đã thay đổi; hãy chuyển đổi các tập lệnh FIR sang dạng từ khóa mới (xem các ví dụ thermopile-shield đã cập nhật).

Commits: 53f2248b8

fir.init() gây ra ngoại lệ khi thất bại (hành vi)

fir.init() giờ gây ra ngoại lệ (và deinit sạch) khi cảm biến nhiệt không được phát hiện, thay vì tiếp tục âm thầm. Hãy bọc fir.init() trong try / except (hoặc đảm bảo cảm biến đã được kết nối) ở những nơi bạn trước đây dựa vào việc nó không gây ra ngoại lệ.

Commits: 4b2f972f3

Danh sách kiểm tra di chuyển

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

  1. Chuyển đổi suy luận mô hình (ML) CMSIS-NN nn sang mô-đun TensorFlow Lite tf (phần xóa nn).

  2. Thay thế image.ImageReader / image.ImageWriter bằng image.ImageIO (thay đổi ImageIO).

  3. Bỏ từ khóa scale=(min, max) khỏi fir.draw_ir() và dùng các đối số mới (thay đổi draw_ir).

  4. Điều chỉnh lại các tham số find_lines() theo phương pháp đo độ lớn xấp xỉ (thay đổi find_lines).

  5. Chuyển đổi các tập lệnh FIR sang API từ khóa mới của fir.snapshot() (thay đổi fir.snapshot) và xử lý fir.init() gây ra ngoại lệ khi thiếu cảm biến (thay đổi fir.init).

Tất cả các tập lệnh khác chạy không thay đổi.