v5.0.0¶
v5.0.0 adalah rilis besar. Fitur utamanya: OpenMV Protocol V2 yang dibangun ulang untuk koneksi host, API kamera csi berbasis kelas yang dapat diskalakan ke papan multi-kamera, target simulator yang dapat dijalankan, estimasi pose tunggal MoveNet, MicroPython 1.28, dan banyak perbaikan kamera, ML, dan ToF. Rilis ini juga membawa sejumlah perubahan API yang merusak kompatibilitas — setiap perubahan yang terlihat pengguna sejak v4.8.1 tercantum di bawah, beserta cara migrasinya.
Sorotan¶
OpenMV Protocol V2. Koneksi host/IDE dibangun ulang dari awal: dibingkai, diurutkan, diperiksa CRC, dengan kanal terpisah untuk stdio, pratinjau stream, dan data pengguna. Modul
protocolbaru memungkinkan skrip membuat transport dan kanal data sendiri. Lihat perubahan modul protocol.API kamera
csiberbasis kelas.import sensormenjadiimport csi/csi.CSI, dengan dukungan multi-kamera bawaan. Lihat migrasi csi.Target simulator. Firmware kini dapat dibangun dan dijalankan di bawah simulator Arm FVP / QEMU (MPS2/MPS3), termasuk emulasi NPU, ROMFS, dan PSRAM — skrip visi mesin dan ML dapat berjalan tanpa perangkat keras terpasang.
Estimasi pose MoveNet. Post-processor
MoveNetbaru beserta modelmovenet_singlepose_192.tfliteyang disertakan pada OpenMV AE3 dan N6.MicroPython 1.28 dan ulab 6.12.0, ST Edge AI 4.0 tooling, serta OpenMV SDK yang dieksternalisasi (lihat perubahan build / tooling).
Fitur baru¶
Modul
protocol— membuat transport dan kanal data khusus dari Python:protocol.init(),protocol.register(),protocol.is_active(), dan kelasprotocol.ProtocolChanneldengansend_event(), beserta konstantaCHANNEL_FLAG_*danCHANNEL_ID_*. Tanda tangan akhirprotocol.init()didokumentasikan di perubahan modul protocol.protocol.CBORChannel— paket ekstensiprotocolbeku yang menyerialisasi kolom bernama ke CBOR dengan widget tampilan (label, kedalaman) dan kontrol interaktif (toggle, slider, select).Introspeksi memori host dan stream — perintah protokol
SYS_MEMORYbaru mengekspos statistik memori runtime per-pool ke IDE, dan ioctl streamSTREAM_SOURCEbaru memungkinkan host memilih kamera mana yang mengumpankan pratinjau pada papan multi-kamera (versi protokol 1.0.1).Streaming multi-kamera —
csi.CSImenerima argumenstream=yang memilih sensor mana yang mengumpankan pratinjau IDE; header bingkai stream kini membawa FPS yang diperhalus dengan EMA sehingga IDE menampilkan laju bingkai tanpa boilerplateclock.fps(). Lihat migrasi csi dan tindak lanjut csi.Sensor event GenX320 — filter Spatio-Temporal Contrast baru (
csi.IOCTL_GENX320_SET_STCdengan modecsi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLY, dancsi.GENX320_STC_TRAIL) dan pembacaan event mentah (csi.IOCTL_GENX320_READ_EVENTS_RAW), dengan skrip contoh baru.MoveNet— post-processor pose tunggal MediaPipe baru (kwargsthreshold,nms_threshold,nms_sigma) yang mengembalikan((x, y, w, h), score, keypoints)dengan array titik kunci COCO 17 sendi; modelmovenet_singlepose_192.tflitedan contoh disertakan pada AE3 dan N6.ml.utils.draw_predictions()— argumen opsionalscores=baru menambahkan keyakinan per-label, font dan ketebalan kotak kini otomatis menyesuaikan lebar citra, serta modeformat="point"baru menggambar penanda tengah untuk detektor centerpoint/peak.Kelas
display.TVDisplaybaru (denganioctl()generik) menggantikan modultvyang berdiri sendiri. Lihat perubahan modul display.Detektor
find_line_segments()baru (ED-Lines) — kini tersedia di semua build, dengan argumenthreshold=baru. Lihat perubahan modul image.
Perubahan dan peningkatan lainnya¶
MicroPython diperbarui ke 1.28.0 dari basis v4.8.1. Menambahkan mode kartu SD kecepatan tinggi pada H5/H7/N6, clocking AHB5 dalam mode daya rendah, dan pin JTAG yang dapat dikontrol sebagai GPIO pada OPENMV_AE3.
ulab diperbarui ke 6.12.0 — operator
%bawaan pada ndarray (pembantuml.utils.mod()dihapus; lihat perubahan pustaka ML).ST Edge AI tooling diperbarui ke 4.0 — memengaruhi kompilasi dan deployment model ST pada perangkat.
ml.Model— argumen kata kunciload_to_fbdihapus; memori model ditangani secara otomatis oleh pengalokasi terpadu.image.Image.scale()di tempat — melakukan penskalaan citra ke atas di tempat (misalnyaimg.scale(x_scale=2.0, y_scale=2.0)) kini memperbesar buffer bingkai agar sesuai, bukan gagal.Buffer stdio yang lebih besar — buffer teks default ke IDE bertambah dari 512 menjadi 1024 byte pada OpenMV 2/3/4, Nicla Vision, AE3, dan N6, sehingga ledakan
print()yang lebih besar tidak terpotong.Aliran event host yang lebih halus — event NOTIFY stdout ke host dibatasi maksimum satu per pembacaan host, bukan satu per
print()yang melewati tanda air ring buffer.Operasi panjang yang dapat diinterupsi — loop tunggu gambar-panjang, GPU (Nema/Dave2D), dan NPU kini melayani event pada interval yang deterministik, sehingga skrip tetap responsif terhadap tombol Stop IDE selama pekerjaan berat.
Perbaikan bug¶
Kamera dan sensor:
find_apriltags()tidak lagi merusak hasil pada papan D-cache/GPU (N6, AE3), dan kini berfungsi pada AE3.Memperbaiki output citra Bayer dari STM32 N6 ISP setelah beralih format piksel.
Memperbaiki ledakan auto-white-balance hijau pada adegan cerah dan kasus statistik AWB bingkai pertama yang tidak diinisialisasi; meningkatkan batas gamma STM32 ISP (32 menjadi 63) untuk rentang gamma/kontras/kecerahan yang lebih luas.
Auto-exposure PS5520 tidak lagi berosilasi dalam cahaya terang; perilaku AEC/AGC PAG7936 dirombak (kontrol gabungan, plafon gain yang dikoreksi).
Unggahan firmware autofokus OV5640 dipulihkan pada Portenta/Nicla (perbaikan MIMXRT I2C SUSPEND).
Memperbaiki deadlock pengambilan kamera saat batas laju bingkai dikombinasikan dengan pengambilan JPEG (STM32).
Pembacaan
csi.IOCTL_GENX320_READ_EVENTS_RAWGenX320 tidak lagi mengacak pratinjau IDE.csi.IOCTL_LEPTON_SET_MODEFLIR Lepton melaluicsi.CSI.ioctl()kini berfungsi saat dipanggil dengan satu argumen.
Pemrosesan citra:
Memperbaiki blending alpha
draw_image()/blend()saat mask disertakan.Memperbaiki urutan bit encode/decode PNG 1-bit (BINARY) dan dekoding skala abu-abu dari 1-bit.
Memperbaiki metadata durasi/FPS perekaman
mjpeg.Mjpeg.Memperbaiki stack overflow dekode JPEG perangkat lunak pada papan dengan tumpukan kecil (OpenMV M7).
Memperbaiki deteksi otomatis format file JPEG/PNG pada host non-ARM (simulator).
Time-of-Flight:
tof.read_depth()tidak lagi menghasilkan exception pada error ranging sementara dan memulihkan diri secara otomatis dari kesalahan bus; timeout defaulttof.read_depth()/tof.snapshot()kini 100 ms (lihat perubahan tof).Memperbaiki korupsi data kedalaman multi-zona VL53L5CX / VL53L8CX.
ML dan sistem:
NPU dibersihkan dengan benar saat inferensi diinterupsi pada N6.
Wakeup deep-sleep / standby dipulihkan pada N6; hang jump-to-bootloader pada AE3 diperbaiki.
Memperbaiki kebocoran memori pada soft-reset (STM32 Nema GPU) dan buffer bingkai tambahan yang dikumpulkan terlalu dini.
Kanal protokol Python kustom kini bertahan dari soft-reboot, transport USB pulih dari reset bus / endpoint yang macet, dan banjir interupsi USB SOF diperbaiki.
Dukungan perangkat keras dan papan¶
OpenMV N6 — Ethernet diaktifkan (jaringan kabel); NPU AXI SRAM (1,75 MB) digabungkan ke pool transien bersama untuk lebih banyak RAM di antara inferensi; wakeup deep-sleep/standby; model TFLite dan Haar cascade yang disertakan dalam ROMFS.
OpenMV AE3 — model dan cascade yang disertakan dalam ROMFS;
cbor2dibekukan ke dalam firmware.Alif (AE3, N6) — wakeup
machine.RTCdaya rendah.AprilTags resolusi tinggi —
find_apriltags()dengan resolusi sensor penuh pada AE3, Arduino Giga, dan Arduino Portenta H7.Target simulator — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), dengan emulasi NPU, ROMFS, dan PSRAM.
Perubahan API yang merusak kompatibilitas¶
Perubahan API yang terlihat pengguna antara v4.8.1 dan v5.0.0. Cakupan: modul C Python di modules/ dan pustaka Python di scripts/libraries/.
Setiap perubahan diberi tag dampaknya:
besar — sebagian besar skrip perlu diedit.
kecil — API yang sempit; hanya memengaruhi skrip yang menggunakannya.
perilaku — API sama, hasil berbeda; periksa ulang skrip yang telah disetel.
tooling — hanya memengaruhi pembangunan dari sumber / fork downstream.
Perubahan dikelompokkan berdasarkan dampak dalam urutan tersebut — besar lebih dulu, kemudian kecil, perilaku, dan tooling. Jika Anda hanya ingin memindahkan kode Anda, langsung ke daftar periksa migrasi di akhir untuk daftar tugas yang ringkas. Setiap hash commit tertaut ke diff-nya di GitHub.
sensor digantikan oleh csi (besar)¶
Setiap contoh resmi ditulis ulang untuk mengganti import sensor dengan import csi. API fungsional lama di tingkat modul (sensor.reset(), sensor.set_pixformat(), ...) digantikan oleh API berbasis kelas csi.CSI, yang dapat diskalakan secara alami ke papan dengan beberapa kamera (csi0, csi1, ...) dan diperlukan untuk semua fitur baru (kwarg stream=, streaming multi-sensor, ...).
Qstr sensor masih terhubung di modules/py_csi.c untuk build firmware yang kompatibel mundur, tetapi tidak akan mendapatkan fitur baru, dan semua contoh, dokumentasi, serta kode pustaka kini mengasumsikan csi.
Modul ke kelas
Sebelum (sensor):
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()
Setelah (csi):
import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()
Pasangan setter/getter diciutkan menjadi accessor gabungan
Dalam API baru, metode yang dipanggil tanpa argumen mengembalikan nilai saat ini; dipanggil dengan nilai akan mengaturnya. Prefiks set_*/get_* dihapus. Nama metode juga kehilangan sufiks ing di mana itu redundan (windowing → window). Kolom API baru tertaut ke dokumentasi referensi.
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fungsi tanpa padanan langsung
|
Yang harus digunakan sebagai gantinya |
|---|---|
|
|
|
|
|
Dipindahkan ke konstruktor |
|
|
|
Dihapus. Citra yang dikembalikan oleh |
|
|
Baru pada csi.CSI
csi.CSI(stream=True|False)— selektor waktu konstruksi yang memilih CSI mana yang mengumpankan buffer bingkai pratinjau (menggantikan kwargupdate=per-snapshot, lihat tindak lanjut csi).csi.CSI(cid=N)/csi.devices()— dukungan multi-CSI untuk papan dengan lebih dari satu sensor citra.
Modul image — perombakan tanda tangan (besar)¶
Modul image mengalami perubahan API terluas setelah csi — tanda tangan gambar, objek hasil, dan beberapa detektor semuanya berubah.
Argumen koordinat harus berupa tuple
modules/py_image.c ditulis ulang di atas mp_arg_parse_all. Semua metode gambar/piksel yang sebelumnya menerima argumen posisional x, y, ... terpisah kini mengharuskan koordinat tersebut dikemas ke dalam satu tuple.
Commit: d18bbc472, 0c60c94b9 (PR #3061)
Sebelum |
Setelah |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Semua adalah metode dari image.Image.
Objek hasil dikonversi ke attrtuple
Tipe-tipe ini kini merupakan objek attrtuple MicroPython: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. Akses atribut tanpa tanda kurung kini menjadi bentuk kanonik.
Commit: 3399d302e
Sebelum (gaya metode):
img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())
Setelah (gaya atribut):
img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)
blob dan histogram tidak berubah — keduanya tetap menggunakan tipe yang ada dan accessor () (sebuah attrtuple tidak dapat mengekspresikan nilai yang dihitung secara malas dari blob atau accessor bertargumen dari histogram).
Penggantian nama parameter haar find_features
image.Image.find_features() — scale_factor= diubah namanya menjadi scale=.
Commit: be4c5cd73
get_regression — kini selalu robust, target_size ditambahkan
image.Image.get_regression() kini selalu menggunakan regresi robust (Theil-Sen). Jalur least-squares cepat lama dihapus, sehingga kata kunci robust= dihilangkan — yang dulu membutuhkan robust=True kini menjadi satu-satunya perilaku. Kwarg target_size=(w, h) baru (default (80, 60)) melakukan penskalaan area ROI ke bawah sebelum fit Theil-Sen O(N^2) sehingga selalu berjalan pada ukuran citra yang wajar; titik akhir garis yang difit dipetakan kembali ke koordinat sumber. Contoh linear_regression_robust.py dihapus dan linear_regression_fast.py diganti nama menjadi linear_regression.py.
find_line_segments — algoritma baru
image.Image.find_line_segments() — detektor LSD lama digantikan oleh ED-Lines, dan mendapatkan kwarg threshold=50 baru. Output skrip yang sebelumnya disetel akan berbeda.
Pustaka AprilTag diganti
image.Image.find_apriltags() — detektor AprilTag diganti dengan implementasi baru. Set family berubah:
Dihapus |
Ditambahkan |
|---|---|
|
|
Commit: e813bada7
Tindak lanjut modul csi (kecil)¶
Tindak lanjut csi yang lebih kecil di atas migrasi csi.
snapshot(update=...) dihapus
Kwarg update pada csi.CSI.snapshot() dihilangkan. Untuk mencegah perangkat CSI mengumpankan buffer bingkai pratinjau, nonaktifkan saat konstruksi:
csi0 = csi.CSI(stream=False) # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img) # was: ...(update=False, ...)
Argumen expand framebuffers() dihapus
csi.CSI.framebuffers() — argumen posisional ketiga (expand) dihilangkan; tanda tangannya kini framebuffers([count]).
Commit: 86cb3a5de
Modul protocol (kecil)¶
Hanya memengaruhi skrip yang mengendalikan tautan host secara langsung. Lihat protocol.
timer_ms diganti nama menjadi poll_ms
protocol.init() — argumen timer_ms diganti namanya menjadi poll_ms.
protocol.init(..., poll_ms=10) # was: timer_ms=10
protocol.poll() dihapus
Tugas protokol dijadwalkan secara internal sekarang. Panggilan ke protocol.poll() akan memunculkan AttributeError.
Commit: 8a0635e8c
Argumen konfigurasi soft_reboot dihapus
protocol.init() — argumen soft_reboot dihilangkan. Semua transport saat ini mentoleransi soft-reboot, sehingga perilakunya kini tidak bersyarat.
Commit: 0bf766aa2
Modul display (kecil)¶
Output TV kini melalui objek display.TVDisplay sebagai ganti modul tv yang berdiri sendiri. display juga mendapatkan ioctl() generik.
Modul tof (perilaku)¶
API sama seperti sebelumnya; default dan penanganan error berubah. Lihat tof.
Timeout default berubah
tof.read_depth() dan tof.snapshot() (dipanggil dengan timeout=-1) kini default ke 100 ms alih-alih menunggu tanpa batas. Berikan nilai yang lebih besar secara eksplisit jika Anda memerlukan perilaku lama.
Commit: b6772b80d
Pemulihan otomatis
Driver kini melakukan hard-reset pada bus I2C dan sensor pada error ranging/timeout. Contoh tidak lagi memanggil tof.reset() di handler exception mereka — kode pengguna yang melakukan pemulihan manual harus menghapusnya (akan bertentangan dengan pemulihan otomatis baru).
Pustaka ML (perilaku)¶
API sama, angka berbeda — periksa ulang pipeline ML yang telah disetel.
Preprocessing kini meregangkan alih-alih letterbox
Normalization kini menggunakan image.SCALE_ASPECT_IGNORE (regang) alih-alih image.SCALE_ASPECT_EXPAND (letterbox). Post-processing NMS juga beralih ke penskalaan x/y independen.
Catatan
Dampak. Detektor gaya YOLO dan regressor titik kunci umumnya meningkat. Contoh BlazeFace, BlazePalm, FaceLandmarks, dan HandLandmarks kini memerlukan pemotongan persegi manual pada ROI input — skrip contoh telah diperbarui; kode pengguna kustom harus melakukan hal yang sama.
Commit: 68dc29a33
Pembantu ml.utils.mod() dihapus
ulab 6.12.0 mendukung % pada ndarray secara bawaan. Kode yang mengimpor mod dari ml.utils harus menggunakan a % b.
Build / tooling (tooling)¶
Tidak ada yang memengaruhi skrip MicroPython. Membangun firmware dari sumber kini memerlukan OpenMV SDK eksternal (1.6.0, sebelumnya dalam pohon). Beberapa alat build dalam pohon dihapus dan N6 beralih ke tumpukan TinyUSB; fork downstream harus meninjau riwayat repositori firmware — terutama tanda tangan file_open() yang menghapus argumen buffered-nya.
Daftar periksa migrasi¶
Untuk port bersih ke v5.0.0, pekerjaan tipikal adalah:
Ganti
import sensordenganimport csi; csi0 = csi.CSI()dan terjemahkan setiap panggilanset_*/get_*ke accessorcsi.CSI-nya (migrasi csi).Bungkus argumen koordinat ke
img.draw_*,get_pixel(), danset_pixel()dalam tuple (perubahan modul image).Hapus
()dari accessor hasil attrtuple jika Anda menginginkan bentuk idiomatik baru, atau biarkan gaya lama apa adanya karena attrtuple masih mendukung accessor yang dapat dipanggil (perubahan modul image).Audit
find_line_segments(),get_regression(), dan pilihan familyfind_apriltags()mana pun (perubahan modul image).Ganti nama
timer_ms→poll_msdalam panggilanprotocol.init(); hapusprotocol.poll()dansoft_reboot=(perubahan modul protocol).Untuk alur kerja ML: tinjau ulang model yang memerlukan input letterboxed (perubahan pustaka ML).