v2.1.0

v2.1.0 adalah rilis modernisasi API yang masif. Rilis ini mengganti deskriptor titik kunci FREAK dengan ORB, merombak find_blobs() / histogram / statistik menjadi API berbasis objek, mengganti nama fungsi eksposur otomatis/gain/keseimbangan putih sensor, menambahkan deteksi kode QR dan koreksi lensa OV7725, serta menghadirkan dukungan awal papan OpenMV Cam M7. Banyak API yang berubah — baca perubahan yang merusak kompatibilitas di bawah ini.

Highlights

  • Titik kunci ORB — deskriptor FREAK diganti dengan ORB (find_keypoints() / match_descriptor() dirombak).

  • API Objekfind_blobs(), get_histogram(), get_statistics() kini mengembalikan objek dengan aksessor bernama.

  • Kode QR — deteksi image.find_qrcodes() ditambahkan.

  • OpenMV Cam M7 — dukungan papan awal.

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (diganti nama) dan set_lens_correction().

  • Merusak kompatibilitas: titik kunci/deskriptor, blob/histogram/statistik, fungsi otomatis sensor, dan beberapa API lainnya berubah — lihat perubahan yang merusak kompatibilitas.

Fitur baru

  • OpenMV Cam M7 — ditambahkan dukungan papan OpenMV 3 (M7) awal.

  • Kode QR — ditambahkan image.find_qrcodes() dengan contoh qrcodes.py.

  • Titik kunci ORB — sistem deskriptor ORB baru: find_keypoints() dengan argumen corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() dengan kata kunci filter_outliers dan perkiraan rotasi; simpan/muat titik kunci.

  • API Objekimage.get_histogram() / get_statistics() / get_percentile() mengembalikan objek histogram/statistik; find_blobs() mengembalikan objek blob (rect() / cx() / cy() / code() / area() / pixels()) dengan area_threshold / pixels_threshold / merge / margin / invert dan x_stride / y_stride.

  • Sensor — ditambahkan sensor.set_lens_correction(enable, radi, coef) untuk shading lensa OV7725, sensor.set_windowing() kini juga menerima tuple (w, h) (dipusatkan otomatis), dan image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Ditambahkan skrip contoh untuk pelacakan warna, SPI/I2C-slave Arduino, titik kunci, dan histogram/statistik.

Perubahan dan peningkatan lainnya

  • IDE kini dapat menginterupsi main.py yang sedang berjalan; find_blobs() / find_qrcodes() / get_statistics() lebih cepat; ORB menggunakan jarak Hamming popcount; koreksi lensa menggunakan lebih sedikit RAM; aturan udev Linux mencegah ModemManager mengambil alih port serial.

Perbaikan bug

Kamera dan pencitraan:

  • Memperbaiki pembersihan/invalidasi cache DMA M7 (bingkai yang rusak), baris ekstra yang muncul di akhir setiap bingkai, overflow batas buffer bingkai JPEG, pembebasan buffer bingkai saat kegagalan compress(), akurasi ORB / ROI / penanganan set kosong, dan geometri load_image(copy_to_fb=True).

Sistem:

  • Memperbaiki dukungan ADC F7, nama register OV7725, waktu bootloader/USB, menggunakan WFI saat menunggu snapshot, dan membuat contoh streamer MJPEG tidak memblokir dengan batas waktu per klien.

Dukungan perangkat keras dan papan

  • OpenMV Cam M7 (OpenMV 3) — dukungan papan awal.

  • OV7725 — dukungan koreksi lensa (shading).

Perubahan API yang merusak kompatibilitas

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

Setiap perubahan diberi tag dengan dampaknya:

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

  • minor — API sempit; hanya mempengaruhi 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 mem-port kode, langsung ke daftar periksa migrasi di akhir. Setiap hash commit menautkan ke diff-nya di GitHub.

FREAK diganti dengan ORB; API deskriptor dirombak (major)

Deskriptor titik kunci FREAK dihapus dan diganti dengan ORB: image.FREAK tidak lagi ada (gunakan image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() tidak lagi mengambil argumen tipe deskriptor di depan (disimpulkan dari objek), match_descriptor() kini mengembalikan tuple 8-elemen (cx, cy, x, y, w, h, match_count, rotation) (elemen terakhir adalah hitungan mentah, bukan persentase), dan draw_keypoints() memerlukan objek titik kunci alih-alih daftar (x, y, angle) mentah. find_keypoints() mendapatkan corner_detector / max_keypoints / scale_factor dengan nilai default yang berubah.

Commits: e2d0c4840, bba8e5a9e, 6000684cb

Penggantian nama fungsi otomatis sensor (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() diganti nama menjadi sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (nama lama dihapus). Masing-masing mendapatkan kata kunci opsional value= untuk menetapkan nilai manual alih-alih otomatis.

Commits: 1b22a2961

Histogram / statistik dirombak menjadi API objek (major)

Antarmuka histogram/statistik dirombak menjadi image.get_histogram() / get_statistics() / get_percentile() berbasis objek yang mengembalikan objek histogram/statistik. Hasil histogram/statistik datar yang lama dan metode bin_count / l_bin_count / a_bin_count / b_bin_count dihapus (gunakan len(histogram.bins()) dll.).

Commits: 011108412, 9f37c83de

scale pada find_features() diganti nama (major)

image.find_features() (Haar) mengganti nama kata kunci scale= menjadi scale_factor=. Perbarui panggilan find_features(cascade, scale=...) menjadi scale_factor=....

Commits: 96e4f770c

find_blobs() mengembalikan objek; find_markers() dihapus (minor)

image.find_blobs() kini mengembalikan objek blob dengan aksessor bernama (akses indeks masih berfungsi untuk kompatibilitas mundur), dan image.find_markers() dihapus — gunakan find_blobs(..., merge=True, margin=...) sebagai gantinya. Callback filter blob berwarna lanjutan tidak lagi didukung.

Commits: af15ec6eb

img.copy_to_fb() digantikan (minor)

Metode img.copy_to_fb() digantikan oleh kata kunci copy_to_fb= pada image.Image / load_image(). Gunakan image.Image(path, copy_to_fb=True) untuk memuat citra besar langsung ke buffer bingkai.

Commits: 1645ab94b

compress() menolak kualitas di luar rentang (behavior)

image.compress() / compressed() kini mengeluarkan error ketika quality berada di luar rentang 1–100 alih-alih secara diam-diam membatasi nilainya. Batasi quality ke 1–100 sebelum memanggil. Secara terpisah, buffer JPEG OpenMV 3 dikurangi dari 64 KB menjadi 23000 byte, sehingga bingkai besar kini dapat mengeluarkan error kehabisan memori — kurangi kualitas JPEG atau ukuran bingkai.

Commits: 9efd7474a, 9a7c3defc

Zoom lens_corr() kini berfungsi (behavior)

image.lens_corr() kini benar-benar menerapkan argumen zoom-nya (sebelumnya diurai tetapi tidak efektif), sehingga output berbeda untuk skrip yang melewatkan zoom non-default. Periksa kembali penyetelan lens_corr().

Commits: d6b49adef

Daftar periksa migrasi

Untuk port yang bersih ke v2.1.0, pekerjaan umum yang perlu dilakukan adalah:

  1. Ganti image.FREAK dengan image.ORB, hapus argumen tipe deskriptor, dan perbarui pembongkaran tuple match_descriptor() / draw_keypoints() ke objek titik kunci (perombakan ORB).

  2. Ganti nama sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() ke bentuk set_auto_* (penggantian nama fungsi otomatis).

  3. Pindahkan kode histogram/statistik ke metode objek (perombakan histogram/statistik).

  4. Ganti nama scale= pada find_features() menjadi scale_factor= (penggantian nama find_features).

  5. Gunakan aksessor objek blob dan ganti find_markers() dengan find_blobs(merge=True, ...) (perubahan find_blobs); ganti img.copy_to_fb() dengan kata kunci copy_to_fb= (perubahan copy_to_fb).

  6. Batasi kualitas compress() ke 1–100 dan periksa kembali ukuran JPEG pada OpenMV 3 (perubahan compress); setel ulang zoom lens_corr() (perubahan lens_corr).

Semua skrip lainnya berjalan tanpa perubahan.