v3.9.0

v3.9.0 adalah rilis besar. Ini menambahkan port nRF dengan Arduino Nano 33 BLE Sense (kamera, modul audio PDM, ulab, driver sensor beku), membawa sensor termal FLIR Lepton plus MLX90641 / MLX90621 dan modul fir yang dirombak besar-besaran, ioctls autofokus OV5640, dan tipe streaming baru image.ImageIO. Modul CMSIS-NN nn lama dan kelas ImageReader / ImageWriter lama dihapus — baca perubahan yang merusak kompatibilitas di bawah.

Sorotan

  • Arduino Nano 33 BLE Sense — port nRF52840 baru dengan kamera, modul audio PDM, ulab, dan driver sensor beku.

  • Termal — dukungan FLIR Lepton, MLX90641, dan MLX90621 dengan modul fir yang dirombak (palet, pencerminan, penskalaan, radiometri, FFC).

  • OV5640 autofokus — ioctls sensor.IOCTL_*_AUTO_FOCUS baru.

  • image.ImageIO — tipe aliran citra terpadu (memori atau file; baca/tulis/cari/ukuran/tutup) yang menggantikan ImageReader / ImageWriter.

  • Perubahan merusak: modul CMSIS-NN nn dan image.ImageReader / image.ImageWriter dihapus, serta perilaku find_lines() / fir berubah — lihat perubahan yang merusak kompatibilitas.

Fitur baru

  • Port nRF / Arduino Nano 33 BLE Sense — port nRF52840 baru dan dukungan papan, dengan modul audio baru (audio.init(), audio.start_streaming(), audio.stop_streaming()), ulab diaktifkan, dan driver sensor apds9960 / lps22h / lsm9ds1 / hts221 yang dibekukan.

  • image.ImageIO — tipe aliran citra baru yang mendukung aliran memori dan file dengan read() / write() / seek() / size() / close(), ditambah contoh baca/tulis/memori ImageIO.

  • FLIR Lepton — dukungan FIR_LEPTON ditambahkan dengan fir.radiometric(), fir.trigger_ffc(), dan fir.register_vsync_cb().

  • Sensor termal — dukungan termopile MLX90641 (FIR_MLX90641) dan MLX90621 ditambahkan (driver resmi Melexis).

  • Palet / orientasi fir — konstanta fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565 ditambahkan, dan fir.read_ir() kini menerima hmirror / vflip / transpose.

  • OV5640 autofokussensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS ditambahkan (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • Contoh Arduino diorganisasi ulang ke dalam direktori per-papan.

Perubahan dan peningkatan lainnya

  • Beralih ke pesan error MicroPython yang dikompresi (string exception lebih pendek); argumen type dari fir.init() kini mendeteksi otomatis melalui pemindaian bus I2C jika dihilangkan; exception xalloc kini melaporkan jumlah byte yang diminta; UART 8 diaktifkan pada Portenta; contoh FIR dikonsolidasikan ke thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. Untuk muat dalam flash, image.get_similarity() dan pencarian selektif dinonaktifkan pada build OpenMV 4, dan pustaka citra kini dapat dibangun tanpa filesystem (untuk papan tanpa filesystem).

Perbaikan bug

Kamera dan sensor:

  • Memperbaiki perhitungan PCLK OV5640, menambahkan handler IRQ I2C yang hilang (memperbaiki hang transfer I2C), merombak pembacaan/penulisan I2C cambus untuk keandalan, membuat bus I2C Lepton dapat dipilih, memindahkan pin bus-recovery cambus ke konfigurasi per-papan, mencoba ulang pemindaian cambus sekali sebelum gagal, dan membuat OpenMV PT (Lepton + kamera berbagi I2C) bekerja.

Termal:

  • Memperbaiki komputasi nilai-maksimum dalam fir get_ir() / draw_ir() dan image.get_similarity() (FLT_MIN-FLT_MAX), penanganan 12→16-bit AMG8833, dan akurasi MLX90621 (driver resmi Melexis).

Tampilan, audio, dan sistem:

  • Memindahkan transfer LCD SPI STM32 ke callback HAL SPI (keandalan tampilan), memperbaiki audio.init() Nano 33 (osilator HF + rasio PDM agar mikrofon berfungsi), kondisi timer H7 dengan HAL baru, gc_collect nRF dan inisialisasi/de-inisialisasi papan awal, serta menghentikan pencetakan pesan "uh oh, no preference for overlapping detection" yang tidak perlu selama find_apriltags() / find_rects().

Dukungan perangkat keras dan papan

  • Arduino Nano 33 BLE Sense — papan nRF52840 baru (kamera, audio PDM, ulab, driver sensor beku).

  • Sensor termal FLIR Lepton, MLX90641, dan MLX90621.

  • OV5640 autofokus — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — UART 8 diaktifkan.

Perubahan API yang merusak kompatibilitas

Perubahan API yang terlihat oleh pengguna antara v3.8.0 dan v3.9.0. Cakupan: C-modul Python dalam modules/ dan pustaka Python dalam scripts/libraries/.

Setiap perubahan diberi tag dengan dampaknya:

  • major — memengaruhi sebagian besar skrip yang menggunakan fitur tersebut; Anda perlu mem-port kode.

  • minor — API yang sempit; hanya memengaruhi skrip yang menggunakannya.

  • behavior — API sama, hasil berbeda; periksa ulang skrip yang sudah disetel.

Perubahan dikelompokkan berdasarkan dampak dalam urutan tersebut. Jika Anda hanya ingin mem-port kode Anda, langsung ke daftar periksa migrasi di bagian akhir. Setiap hash commit menautkan ke diff-nya di GitHub.

Modul CMSIS-NN nn dihapus (major)

Modul CMSIS-NN nn dihapus, termasuk nn.load(), net.forward(), net.search(), dan pembantu nn_class. Inferensi model berpindah ke modul TensorFlow Lite (tf). Skrip yang memuat model .network dengan nn harus diport ke tf dengan model TensorFlow Lite.

Commits: fbc767b36

ImageReader / ImageWriter digantikan oleh image.ImageIO (major)

image.ImageReader / image.ImageWriter dan metode next_frame() / add_frame() mereka dihapus dan digantikan oleh tipe image.ImageIO baru, yang mendukung aliran memori dan file melalui read() / write() / seek() / size() / close(). Kode yang menggunakan kelas reader/writer lama harus diport ke image.ImageIO (lihat contoh imageio_read.py / imageio_write.py yang diganti nama).

Commits: 783a78754

Kata kunci scale dari fir.draw_ir() dihapus (minor)

fir.draw_ir() ditulis ulang di atas pipeline gambar baru. Kata kunci scale=(min, max) dihapus, dan argumen hint, x_scale, y_scale, roi, serta argumen offset posisional x/y ditambahkan. Skrip yang meneruskan scale=(min, max) ke fir.draw_ir() harus menghapusnya dan menggunakan argumen baru.

Commits: 0a29103b1

Aproksimasi find_lines() (behavior)

image.find_lines() kini mengaproksimasi magnitudo gradien sebagai (abs(gx) + abs(gy)) / 2 dan melewati magnitudo di bawah 126. Ini lebih cepat tetapi mengubah himpunan garis yang terdeteksi dan nilai akumulator, jadi setel ulang threshold / theta_margin / rho_margin.

Commits: 902ae3c98

fir.snapshot() dirombak (behavior)

fir.snapshot() dirombak secara substansial dengan API kata kunci baru (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), dan contoh yang disertakan ditulis ulang. Perilaku posisional/pixformat-only sebelumnya berubah; port skrip FIR ke bentuk kata kunci baru (lihat contoh thermopile-shield yang diperbarui).

Commits: 53f2248b8

fir.init() menimbulkan exception saat gagal (behavior)

fir.init() kini menimbulkan exception (dan melakukan de-init dengan bersih) ketika sensor termal tidak terdeteksi, alih-alih melanjutkan secara diam-diam. Bungkus fir.init() dalam try / except (atau pastikan sensor terhubung) di tempat Anda sebelumnya mengandalkannya untuk tidak menimbulkan exception.

Commits: 4b2f972f3

Daftar periksa migrasi

Untuk port yang bersih ke v3.9.0, pekerjaan umum yang perlu dilakukan adalah:

  1. Port inferensi model CMSIS-NN nn ke modul TensorFlow Lite tf (penghapusan nn).

  2. Ganti image.ImageReader / image.ImageWriter dengan image.ImageIO (perubahan ImageIO).

  3. Hapus kata kunci scale=(min, max) dari fir.draw_ir() dan gunakan argumen baru (perubahan draw_ir).

  4. Setel ulang parameter find_lines() terhadap metrik magnitudo aproksimasi (perubahan find_lines).

  5. Port skrip FIR ke API kata kunci fir.snapshot() baru (perubahan fir.snapshot) dan tangani fir.init() yang menimbulkan exception saat sensor tidak ada (perubahan fir.init).

Semua skrip lainnya berjalan tanpa perubahan.