v2.4.0

v2.4.0 menulis ulang find_lines() sebagai detektor transformasi Hough, menambahkan find_line_segments(), dekoding data-matrix find_datamatrices(), sensor.set_vsync_output(), baca/tulis irisan citra, dan banyak ukuran bingkai bertingkat baru untuk FPS yang lebih tinggi. find_lines(), match_descriptor(), dan skip_frames() berubah — baca perubahan yang merusak kompatibilitas di bawah ini.

Highlights

  • find_lines() — ditulis ulang sebagai detektor garis transformasi Hough yang mengembalikan objek garis (kini bekerja pada RGB565, bukan hanya skala abu-abu).

  • find_line_segments() — mendeteksi segmen garis terbatas.

  • find_datamatrices() — dekoding data-matrix.

  • sensor.set_vsync_output() — menggerakkan VSYNC pada pin I/O untuk sinkronisasi kamera.

  • Lebih banyak ukuran bingkai — banyak resolusi bertingkat tambahan untuk FPS yang lebih tinggi.

  • Merusak kompatibilitas: find_lines(), match_descriptor(), dan skip_frames() berubah — lihat perubahan yang merusak kompatibilitas.

Fitur baru

  • image.find_line_segments() — menemukan segmen garis non-tak-hingga; objek garis mendapatkan aksessor .length().

  • image.find_datamatrices() — dekoding data-matrix, dengan skrip contoh.

  • sensor.set_vsync_output(pin) — mengeluarkan sinyal VSYNC pada pin GPIO untuk sinkronisasi kamera (OpenMV 2 / OpenMV 3).

  • Irisan citra — protokol subskrip / buffer citra kini mendukung pembacaan dan penulisan irisan data citra.

  • Ditambahkan banyak kombinasi resolusi / ukuran bingkai bertingkat tambahan untuk mendukung laju bingkai yang lebih tinggi; clock.fps() kini mereset akumulatornya setiap 2 detik sehingga FPS yang dilaporkan mencerminkan laju terkini.

Perubahan dan peningkatan lainnya

  • OV7725 di-window ke QVGA ketika resolusi ≤ VGA (lebih sedikit bingkai yang dijatuhkan pada laju pengambilan gambar tinggi) dan PLL-nya diatur ke 6× dengan clock eksternal yang dikurangi (OpenMV 2 48 MHz, OpenMV 3 54 MHz), mengubah waktu bingkai sensor.

Perbaikan bug

Pencitraan:

  • Memperbaiki error ukuran buffer compress_for_ide() (marker awal/akhir), dekoding QR (plus perbaikan upstream quirc untuk pengindeksan bitmap sel dan batas pola penyelarasan).

Sensor dan konektivitas:

  • Menurunkan clock sensor OpenMV 2 agar berfungsi dengan PLL sensor yang lebih tinggi (inisialisasi/sinkronisasi kamera) dan membuat socket.recvfrom() WINC mengembalikan ukuran yang sebenarnya diterima (mengeluarkan error pada ukuran non-positif alih-alih mengembalikan nilai basi).

Dukungan perangkat keras dan papan

  • Output VSYNC pada pin GPIO (OpenMV 2 / OpenMV 3) yang mendukung sensor.set_vsync_output().

  • OpenMV 3 — mengaktifkan pyb.UART UART1.

Perubahan API yang merusak kompatibilitas

Perubahan API yang terlihat oleh pengguna antara v2.3.0 dan v2.4.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.

find_lines() ditulis ulang sebagai detektor Hough (major)

image.find_lines() ditulis ulang sebagai detektor transformasi Hough. Fungsi ini tidak lagi mengembalikan daftar tuple (x1, y1, x2, y2) — melainkan mengembalikan objek garis (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — dan kini juga bekerja pada RGB565 (bukan hanya skala abu-abu). Argumen threshold berubah dari float 0,0–1,0 menjadi jumlah magnitudo tepi integer, line.magnitude kini berupa integer, dan kata kunci baru theta_margin / rho_margin ditambahkan. Port kode pembongkaran tuple ke objek garis dan setel ulang threshold.

Commits: 31b7b5bf3, f4a9c6154

match_descriptor() mengembalikan objek kecocokan (minor)

image.match_descriptor() (ORB) kini mengembalikan objek kptmatch dengan aksessor .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() alih-alih tuple 8-elemen biasa. Objek ini masih dapat disubskrip/diiris sehingga pengindeksan posisional tetap berfungsi, tetapi kode yang melakukan isinstance(result, tuple) (atau menggunakan metode tuple) harus menggunakan aksessor baru.

Commits: e960546b6

sensor.skip_frames() kini berbasis waktu (behavior)

sensor.skip_frames() dirombak untuk menerima kata kunci time= (default ~300 ms) dan kini berbasis waktu secara default alih-alih menjalankan hitungan bingkai tetap, berhenti lebih awal setelah waktu berlalu. Skrip yang mengandalkan hitungan bingkai yang tepat harus melewatkan hitungan eksplisit dan/atau mengatur time= yang sesuai.

Commits: a039b5d1c

Daftar periksa migrasi

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

  1. Port pembongkaran tuple find_lines() ke objek garis dan setel ulang threshold integer (penulisan ulang find_lines).

  2. Gunakan aksessor kptmatch alih-alih memperlakukan hasil match_descriptor() sebagai tuple (perubahan match_descriptor).

  3. Lewatkan hitungan eksplisit dan/atau time= ke sensor.skip_frames() jika Anda mengandalkan hitungan bingkai tetap (perubahan skip_frames).

Semua skrip lainnya berjalan tanpa perubahan.