v4.8.0

v4.8.0 adalah rilis fitur utama. Sorotan utamanya: modul kamera csi berbasis kelas yang baru dengan dukungan multi-kamera, papan OpenMV N6 (STM32N6) dengan NPU Neural-ART, backend inferensi NPU, mode RAW event GenX320, modul crc baru, pustaka pasca-pemrosesan ML yang direorganisasi, dan MicroPython 1.26. Rilis ini juga menghapus beberapa API lama — modul buzzer dan kontrol FLIR Lepton pada modul fir — jadi baca perubahan yang merusak di bawah ini.

Sorotan

  • Modul kamera csi baru. API csi.CSI berbasis kelas dengan dukungan beberapa kamera simultan, diperkenalkan berdampingan dengan modul sensor lama.

  • OpenMV N6. Papan STM32N6 dengan NPU Neural-ART, triple buffering, Soft-CSI, dan modul ToF.

  • Inferensi NPU. Backend ST Neural-ART (STAI) untuk inferensi model yang dipercepat oleh perangkat keras.

  • Mode event GenX320. Output RAW event ditambah draw_event_histogram() untuk rendering kamera event.

  • Pasca-pemrosesan ML yang direorganisasi — subpaket vendor (ml.postprocessing.ultralytics, mediapipe, edgeimpulse, darknet) dengan detektor BlazeFace / BlazePalm / titik kunci tangan dan wajah yang baru.

  • Modul crc baru — CRC-16 / CRC-32 yang dipercepat oleh perangkat keras.

  • MicroPython diperbarui ke 1.26.0.

  • Perubahan yang merusak: modul buzzer dan kontrol Lepton pada modul fir telah dihapus (Lepton kini merupakan kamera biasa). Lihat perubahan fir/Lepton dan penghapusan buzzer.

Fitur baru

  • Modul kamera csi baru — objek csi.CSI berbasis kelas dengan beberapa kamera simultan (hingga tiga pada N6), snapshot non-blocking, ukuran bingkai (w, h) kustom, dan print() / repr yang informatif. Diperkenalkan berdampingan dengan modul sensor lama (bukan pengganti langsung).

  • crccrc.crc16() dan crc.crc32(), dipercepat perangkat keras dengan fallback perangkat lunak, pada OpenMV N6 dan AE3.

  • image.Image.draw_image() mendapatkan kata kunci transform= (matriks ndarray float 2D untuk warp affine/perspektif, dipercepat GPU pada STM32 dan Alif); transformasi yang sama tersedia dalam konversi citra.

  • draw_event_histogram() — merender histogram kamera event.

  • Mode RAW event GenX320csi.IOCTL_GENX320_SET_MODE dengan csi.GENX320_MODE_HISTO / csi.GENX320_MODE_EVENT, csi.IOCTL_GENX320_READ_EVENTS, csi.IOCTL_GENX320_CALIBRATE, konstanta tipe event, dan skrip contoh baru.

  • ML — backend inferensi NPU ST Neural-ART (STAI); ml.Model mendapatkan kata kunci postprocess= (pasca-pemroses kini berjalan otomatis di dalam predict() bahkan tanpa callback); ml.postprocessing direorganisasi menjadi subpaket vendor — ml.postprocessing.ultralytics (YoloV5, YoloV8), ml.postprocessing.darknet (YoloV2, YoloLC), ml.postprocessing.edgeimpulse (Fomo), dan ml.postprocessing.mediapipe (BlazeFace, BlazePalm, HandLandmarks, FaceLandmarks) — nama snake_case lama tetap tersedia sebagai alias; ml.utils.draw_keypoints() dan ml.utils.draw_skeleton() ditambahkan; model ROMFS bawaan bertambah (BlazeFace, YOLO-LC, YOLOv8n, landmark tangan/telapak/wajah).

  • audio — input mikrofon digital MDF pada STM32N6.

  • Display — driver OLED SSD1351 dan contoh penggunaannya; kontroler SPIDisplay dapat mengoverride perintah inisialisasinya; konstruktor display SPI mendapatkan kata kunci hmirror / vflip.

  • Profiler pada perangkat — SysTick + penghitung siklus/event PMU Armv8.1-M dengan instrumentasi tingkat fungsi, dapat dibaca melalui tautan debug (pyopenmv mendapatkan dukungan profiling dan simbol ELF).

  • Dukungan sensor baru — PixArt PS5520; FLIR BOSON pada OpenMV H7 Plus; deteksi otomatis GenX320.

Perubahan dan peningkatan lainnya

  • MicroPython diperbarui ke 1.26.0.

  • Startup kamera — clock sensor dipisahkan dari status CSI, deteksi kamera saat boot lebih cepat (konfigurasi paling umum dicoba lebih dulu), dan clock default OV7725 OpenMV 3 dikoreksi.

  • Kualitas citra — koreksi gamma ISP perangkat lunak (Alif dan STM32) dan koreksi piksel buruk (STM32) aktif secara default; sensor PAG7936 dan PS5520 mendapatkan kontrol auto-white-balance.

  • Performaimage.Image.to_ndarray() dipercepat dengan Helium SIMD dan pasca-pemroses FOMO divektorkan dengan ulab.

  • Driver FLIR Lepton ditulis ulang untuk menerima bingkai secara asinkron di background — rotasi/transpose kini berfungsi, gambar diupscale secara bilinear, dan reset lebih cepat.

  • Throughput capture — CSI i.MX RT1062 kini menggunakan full DMA offload, dan STM32 N6 memiliki draw_image() hardware-GPU.

Perbaikan bug

Kamera dan sensor:

  • Memperbaiki mode RGB565 / GRAYSCALE / BAYER / YUV422 pada sensor STM32, PAJ6100 pada OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565, dan konfigurasi mono / RGB-YUV N6 CSI; kamera uji perangkat lunak kini mereset secara deterministik.

  • Auto-white-balance tidak lagi membuat citra menjadi hijau pada frame rate rendah atau bervariasi (rata-rata bergerak 250 ms menggantikan sampel setiap 100 bingkai), dan flicker luminansi PS5520 diperbaiki.

Pemrosesan citra:

  • Memperbaiki glitch rendering garis gambar; image.Image.flush() kini memflush buffer JPEG dari citra yang dipanggilnya; Normalization kini menerapkan mean/stdev pada input float; alokasi citra-dari-file diperbaiki.

Pengambilan gambar kamera:

  • Memperbaiki korupsi citra yang parah pada transfer non-JPEG (interupsi bingkai kini hanya diaktifkan dalam mode JPEG), dukungan mode JPEG-3, serta lockup ukuran baris DMA dan buffer kecil pada STM32; sinkronisasi VOSPI / Lepton lebih andal, terutama pada N6.

Lain-lain:

  • omv.board_id() mengembalikan UID yang benar pada RT1060; YoloV2 tidak lagi crash saat dikonstruksi tanpa anchor eksplisit.

Dukungan perangkat keras dan papan

  • OpenMV N6 — STM32N6 dengan NPU Neural-ART, triple buffering, output SPI LCD/TV, Soft-CSI, modul tof, dan model ROMFS bawaan.

  • Arduino GIGA — output display MIPI DSI.

  • Sensor baru — PixArt PS5520; FLIR BOSON pada OpenMV H7 Plus; deteksi otomatis GenX320.

  • OpenMV Pure Thermal — FLIR Lepton kini merupakan sensor kamera (sekunder) biasa.

  • Alif AE3 — koreksi gamma ISP perangkat lunak, modul crc, dan perbaikan SPI.

Perubahan API yang merusak

Perubahan API yang terlihat pengguna antara v4.7.0 dan v4.8.0. Cakupan: C-modul Python di modules/ dan pustaka Python di scripts/libraries/.

Setiap perubahan diberi tag sesuai dampaknya:

  • mayor — sebagian besar skrip yang menggunakannya perlu diedit.

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

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

  • tooling — hanya memengaruhi alat host / pembuatan dari sumber.

Perubahan dikelompokkan berdasarkan dampak dalam urutan tersebut — mayor lebih dulu, lalu minor, behavior, dan tooling. Jika Anda hanya ingin memindahkan kode, langsung ke daftar periksa migrasi di akhir untuk daftar tugas yang ringkas. Setiap hash commit tertaut ke diff-nya di GitHub.

FLIR Lepton dipindahkan dari modul fir (mayor)

FLIR Lepton kini dikendalikan sebagai sensor kamera biasa, bukan melalui modul fir. Kontrol Lepton dihapus dari fir: tipe FIR_LEPTON serta metode radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available(), dan trigger_ffc() telah dihapus. Ambil gambar dari Lepton seperti kamera lainnya (muncul sebagai sensor sekunder pada OpenMV Pure Thermal); contoh Pure Thermal telah ditulis ulang ke API baru. Sensor fir non-Lepton (Grid-EYE, MLX, AMG8833) tidak berubah.

Commit: bacfb7aeb, 117710566, 592a22902, 1a614202e

Modul buzzer dihapus (minor)

Modul buzzer dihapus dari port STM32 dan i.MX RT. Gunakan machine.PWM sebagai penggantinya; contoh buzzer Pure Thermal menggunakan PWM telah ditambahkan.

Commit: ccb947924, 444120f2d

omv.disable_fb() dihapus (minor)

Fungsi omv.disable_fb() dihapus; streaming buffer bingkai kini dikontrol melalui API kamera. Skrip desktop RPC lama yang mengandalkannya juga dihapus.

Commit: 84c3db58a, 6fe99051c

csi baru — API-nya belum dibekukan (minor)

Modul csi diperkenalkan di v4.8.0 dan API-nya berkembang selama rilis: csi.fb() dihapus, dan csi.CSI.snapshot() (image=...) kini memerlukan citra yang dapat diubah dan menggambar/menskala bingkai yang ditangkap ke dalamnya, bukan melakukan deep copy mentah. Pengguna awal modul baru ini sebaiknya menguji ulang; API sensor lama tidak terpengaruh.

Commit: 0bc0385eb, 8cd7a309f

Mode stream dan close() pada image.ImageIO (minor)

image.ImageIO — argumen mode kini hanya menerima 'r' / 'w' huruf kecil (huruf besar ditolak dengan pesan kesalahan yang diperbarui), dan membuka dengan 'w' selalu memotong/membuat ulang file alih-alih mempertahankan stream yang ada. ImageIO.close() kini idempoten (menutup stream yang sudah tertutup tidak lagi menimbulkan exception) dan mengembalikan None alih-alih objek stream.

Commit: 715c4cbba, 21ceec422

Nilai kembalian BlazeFace / BlazePalm (minor)

Pasca-pemroses BlazeFace dan BlazePalm (baru di rilis ini) kini mengembalikan satu daftar kotak pembatas alih-alih daftar lengkap per kelas — pemanggil mengindeks hasil secara langsung tanpa [0].

Commit: 75e16b573

Callback pasca-pemroses ML menerima tensor mentah (behavior)

Callback pasca-pemroses predict() pada ml.Model kini menerima referensi tensor output mentah (terkuantisasi) alih-alih ndarray float yang telah dikonversi sebelumnya — ini menghindari kehabisan memori pada model besar. Jika tidak ada callback yang diberikan, ndarray float tetap dikembalikan. Callback kustom harus melakukan dequantisasi tensor sendiri (pasca-pemroses bawaan sudah melakukan ini).

Commit: 84e6ee650

Clock kamera dipisahkan dari status CSI (behavior)

Clock sensor kini independen dari status CSI. set_clock / set_frequency hanya mengonfigurasi ulang clock ketika frekuensi yang diminta berbeda lebih dari toleransi, dan get_clk_frequency menerima boolean untuk mengembalikan frekuensi yang tepat (bukan nominal). Clock default adalah 24 MHz pada OpenMV N6 dan AE3, sehingga tidak diperlukan set_clock() eksplisit saat boot. Skrip yang mengalihkan clock untuk capture yang sensitif terhadap waktu sebaiknya diperiksa ulang.

Commit: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca

Protokol debug USB dan target firmware (tooling)

Tidak ada yang memengaruhi skrip MicroPython. Perintah USBDBG yang sudah usang (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) dihapus dan perintah yang tidak didukung dari IDE lama kini di-flush alih-alih menyebabkan TinyUSB crash saat terhubung; target firmware STM32 UVC lama dihapus. Alat host lama sebaiknya diperbarui; lihat riwayat repositori firmware untuk detailnya.

Commit: 90bd11e93, 657c9a632, 35182f035

Daftar periksa migrasi

Untuk migrasi bersih ke v4.8.0, pekerjaan yang biasanya diperlukan adalah:

  1. Jika Anda menggunakan FLIR Lepton melalui fir, beralih ke menangkapnya sebagai sensor kamera (perubahan fir/Lepton).

  2. Ganti semua penggunaan buzzer dengan machine.PWM (penghapusan buzzer).

  3. Hapus panggilan omv.disable_fb() (penghapusan omv.disable_fb()).

  4. Untuk image.ImageIO: gunakan huruf kecil 'r'/'w' dan perkirakan 'w' akan memotong (perubahan ImageIO).

  5. Untuk callback pasca-pemroses ML kustom: lakukan dequantisasi referensi tensor mentah sendiri, atau andalkan jalur float default (perubahan callback).

  6. Periksa ulang skrip apa pun yang mengendalikan clock sensor untuk capture yang sensitif terhadap waktu (perubahan clock).