v3.0.0

v3.0.0 adalah rilis utama v2 → v3. Rilis ini memperkenalkan OpenMV Cam M7 (STM32F7) dan modul jaringan saraf CMSIS-NN nn yang baru (menggantikan metode hard-coded find_number() / classify_object() yang lama), menambahkan dukungan sensor MT9V034 global-shutter dan FLIR Lepton, framesize sensor.WVGA, serta memperbarui inti ke MicroPython 1.9.4. Beberapa perilaku image / sensor / WiFi berubah — baca perubahan yang tidak kompatibel di bawah.

Sorotan

  • OpenMV Cam M7 — papan STM32F7 baru.

  • Modul nn — inferensi CMSIS-NN: nn.load(), Net.forward(), Net.search(), dengan konverter model dan contoh.

  • Sensor baru — MT9V034 global-shutter (dipicu FSIN) dan FLIR Lepton.

  • Pembaruan inti MicroPython 1.9.4.

  • Perubahan tidak kompatibel: hard-coded image.find_number() / image.classify_object() dihapus, sensor.sleep() kini melempar pengecualian, socket WINC mengembalikan jumlah byte sebenarnya, image.binary() mengembalikan citra baru, dan find_apriltags() dibatasi pada 64K piksel — lihat perubahan yang tidak kompatibel.

Fitur baru

  • nn — modul jaringan saraf CMSIS-NN baru: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (mengembalikan float 0.0–1.0), Net.search() untuk deteksi multi-skala/posisi, dan Net.test(), ditambah konverter model CMSIS-NN (nn_convert.py / nn_quantizer.py), model CIFAR-10 / LeNet / smile bawaan, dan skrip contoh NN / NN-search.

  • Sensor — dukungan MT9V034 global-shutter (snapshot dipicu FSIN) pada OpenMV 4, driver FLIR Lepton yang diperbarui dengan dukungan snapshot Lepton, dan framesize baru sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • Pencitraanimage.find_circles() mendapatkan kata kunci r_min / r_max / r_step (Hough lebih cepat), find_keypoints() dan Haar find_features() kini menerima citra RGB, dan image.compress() / encoding JPEG kini mendukung citra biner (bitmap).

  • Bootboot.py kini berjalan sebelum inisialisasi USB sehingga dapat mengganti mode USB (mis. HID).

  • Contoh — ditambahkan contoh AprilTag resolusi kecil/tinggi, contoh I2C LIDAR-Lite V3, dan alat dataset (augment_images.py / make_patches.py).

Perubahan dan peningkatan lainnya

  • MicroPython bawaan diperbarui ke 1.9.4 (dengan revert pyexec parse/compile/exec dan perbaikan PendSV); pesan error out-of-memory fb_alloc / xalloc yang lebih jelas; noise printf nn selama pemuatan jaringan ditekan; repositori direorganisasi (contoh → scripts/, alat → tools/, Haar cascades → ml/). Modul nn tidak tersedia pada OpenMV 2 (flash tidak mencukupi).

Perbaikan bug

Pencitraan:

  • Memperbaiki fast_atan2f untuk x≤0 (sebelumnya selalu 0 — periksa kembali sudut blob / garis / titik kunci), penanganan memori find_apriltags() (konten yang hilang dan realloc buruk saat OOM), pointer baris per-bpp biner/bitmap (hasil biner yang rusak), find_edges(EDGE_CANNY) dengan ROI, makro TO_GS_PIXEL (integral / morph), streaming bitmap/JPEG untuk bingkai skala abu-abu (bpp==0), pop_front daftar titik kunci/blob, dan hasil match_descriptor.

Sistem dan kamera:

  • Memperbaiki nomor interface/endpoint USB HID, perubahan frekuensi XCLK secara dinamis saat runtime, Net.forward() yang mengembalikan jumlah output yang benar, dan hardfault saat menginterupsi parsing skrip.

Dukungan hardware dan board

  • OpenMV Cam M7 (STM32F7) — papan baru.

  • Sensor MT9V034 global-shutter (OpenMV 4, dipicu FSIN).

  • FLIR Lepton — driver yang diperbarui dengan dukungan snapshot.

Perubahan API yang tidak kompatibel

Perubahan API yang terlihat pengguna antara v2.9.0 dan v3.0.0. Cakupan: modul C Python di modules/ dan pustaka Python di scripts/libraries/.

Setiap perubahan ditandai dengan dampaknya:

  • major — memengaruhi sebagian besar skrip yang menggunakan fitur tersebut; Anda perlu melakukan porting kode.

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

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

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

image.find_number() / image.classify_object() dihapus (major)

Metode hard-coded image.find_number() (LeNet) dan image.classify_object() (CMSIS CNN) telah dihapus demi modul nn yang baru. Gantikan dengan net = nn.load('/model.network'); out = net.forward(img).

Commit: d151f7e38

sensor.sleep() / sensor.reset() melempar pengecualian saat gagal (minor)

sensor.sleep() dan sensor.reset() kini melempar pengecualian saat gagal alih-alih mengembalikan True / False. Kode yang memeriksa nilai boolean dari sensor.sleep() harus membungkus panggilan dalam try / except.

Commit: 7d16d008f

Socket WINC mengembalikan jumlah byte sebenarnya (behavior)

Metode send / recv / sendto / recvfrom pada socket WINC1500 sebelumnya selalu mengembalikan 0; kini mengembalikan jumlah byte yang sebenarnya ditransfer. Kode yang mengasumsikan kembalian 0 (atau melakukan loop/blokir padanya) harus menangani jumlah byte yang sebenarnya.

Commit: a07fb2f60

image.binary() mengembalikan citra baru (behavior)

image.binary() mendapatkan kata kunci to_bitmap / copy dan kini mengembalikan objek citra baru alih-alih mengembalikan/memutasi citra sumber secara in-place. Kode yang mengandalkan binary() untuk memutasi citra asli harus menggunakan objek yang dikembalikan (dan meneruskan copy=True untuk perilaku non-in-place).

Commit: 8a44f0cd9

find_apriltags() dibatasi pada 64K piksel (behavior)

image.find_apriltags() kini melempar pengecualian jika citra (atau ROI) melebihi 64K piksel dan mengembalikan daftar kosong untuk citra yang lebih kecil dari 4x4. Perkecil citra besar (gunakan framesize yang lebih kecil atau teruskan roi eksplisit) sebelum memanggil find_apriltags().

Commit: bd77afbc0

Daftar periksa migrasi

Untuk porting yang bersih ke v3.0.0, pekerjaan umumnya adalah:

  1. Gantikan image.find_number() / image.classify_object() dengan modul nn (migrasi nn).

  2. Bungkus sensor.sleep() / sensor.reset() dalam try / except alih-alih memeriksa nilai boolean (perubahan sensor.sleep).

  3. Tangani jumlah byte sebenarnya dari socket WINC send / recv (perubahan socket WINC).

  4. Gunakan citra yang dikembalikan oleh image.binary() alih-alih mengharapkan mutasi in-place (perubahan binary).

  5. Perkecil citra sebelum find_apriltags() agar tetap di bawah 64K piksel (batas find_apriltags).

Semua skrip lainnya berjalan tanpa perubahan.