v3.0.0¶
v3.0.0 este lansarea majoră v2 → v3. Introduce OpenMV Cam M7 (STM32F7) și noul modul de rețea neuronală CMSIS-NN nn (înlocuind vechile metode codate fix find_number() / classify_object()), adaugă suport pentru senzorii MT9V034 global-shutter și FLIR Lepton, dimensiunile de cadru sensor.WVGA și actualizează nucleul la MicroPython 1.9.4. Mai multe comportamente image / sensor / WiFi s-au modificat — citiți modificările incompatibile de mai jos.
Aspecte importante¶
OpenMV Cam M7 — placă STM32F7 nouă.
Modulul
nn— inferență CMSIS-NN:nn.load(),Net.forward(),Net.search(), cu un convertor de model și exemple.Senzori noi — MT9V034 global-shutter (declanșat prin FSIN) și FLIR Lepton.
Actualizarea nucleului la MicroPython 1.9.4.
Incompatibil: metodele codate fix
image.find_number()/image.classify_object()au fost eliminate,sensor.sleep()generează acum o excepție, socket-urile WINC returnează numere reale de octeți,image.binary()returnează o imagine nouă, iarfind_apriltags()este limitat la 64K pixeli — consultați modificările incompatibile.
Funcționalități noi¶
nn— un nou modul de rețea neuronală CMSIS-NN:nn.load(path),Net.forward(img, roi=, softmax=, dry_run=)(returnează valori float între 0.0 și 1.0),Net.search()pentru detectare multi-scară/poziție șiNet.test(), plus un convertor de model CMSIS-NN (nn_convert.py/nn_quantizer.py), modelele incluse CIFAR-10 / LeNet / smile și scripturi exemplu pentru NN / NN-search.Senzori — suport MT9V034 global-shutter (captură declanșată prin FSIN) pe OpenMV 4, un driver FLIR Lepton actualizat cu captură Lepton și noile dimensiuni de cadru
sensor.WVGA(720x480) /sensor.WVGA2(752x480).Imagistică —
image.find_circles()a primit cuvintele-cheier_min/r_max/r_step(Hough mai rapid),find_keypoints()șifind_features()Haar acceptă acum imagini RGB, iarimage.compress()/ codificarea JPEG acceptă acum imagini binare (bitmap).Boot —
boot.pyrulează acum înainte de inițializarea USB, astfel încât poate suprascrie modul USB (de exemplu HID).Exemple — s-au adăugat exemple AprilTag de rezoluție mică/mare, un exemplu I2C LIDAR-Lite V3 și instrumente pentru seturi de date (
augment_images.py/make_patches.py).
Alte modificări și îmbunătățiri¶
S-a actualizat MicroPython inclus la 1.9.4 (cu o revenire a parse/compile/exec din pyexec și o corectare PendSV); mesaje de eroare de memorie insuficientă mai clare pentru
fb_alloc/xalloc; s-a eliminat zgomotul printf al modululuinnîn timpul încărcării rețelei; s-a reorganizat depozitul (exemple →scripts/, instrumente →tools/, cascade Haar →ml/). Modululnnnu este disponibil pe OpenMV 2 (memorie flash insuficientă).
Corectări de erori¶
Imagistică:
S-au corectat
fast_atan2fpentru x≤0 (anterior întotdeauna 0 — reverificați unghiurile de blob / linie / punct-cheie), gestionarea memoriei pentrufind_apriltags()(conținut pierdut și un realloc defect la lipsa de memorie), pointerii de rând per-bpp pentru binar/bitmap (rezultate binare corupte),find_edges(EDGE_CANNY)cu un ROI, macro-ulTO_GS_PIXEL(integral / morph), streaming-ul bitmap/JPEG pentru cadrele în tonuri de gri (bpp==0),pop_frontal listei de puncte-cheie/blob-uri și rezultatelematch_descriptor.
Sistem și cameră:
S-au corectat numerele de interfață/endpoint USB HID, modificarea dinamică a frecvenței XCLK în timpul execuției,
Net.forward()care returna numărul corect de ieșiri și o eroare hardfault la întreruperea analizării scriptului.
Suport hardware și plăci¶
OpenMV Cam M7 (STM32F7) — placă nouă.
Senzor MT9V034 global-shutter (OpenMV 4, declanșat prin FSIN).
FLIR Lepton — driver actualizat cu suport pentru captură.
Modificări incompatibile ale API-ului¶
Modificări incompatibile ale API-ului vizibile pentru utilizator între v2.9.0 și v3.0.0. Domeniu de aplicare: module C Python din modules/ și biblioteci Python din scripts/libraries/.
Fiecare modificare este etichetată cu impactul său:
major — afectează majoritatea scripturilor care au folosit funcționalitatea; va trebui să portați codul.
minor — API restrâns; afectează doar scripturile care l-au folosit.
comportament — același API, rezultate diferite; reverificați scripturile ajustate.
Modificările sunt grupate după impact în această ordine. Dacă doriți doar să vă portați codul, săriți la lista de verificare pentru migrare de la final. Fiecare hash de commit are un link către diff-ul său de pe GitHub.
image.find_number() / image.classify_object() eliminate (major)¶
Metodele codate fix image.find_number() (LeNet) și image.classify_object() (CMSIS CNN) au fost eliminate în favoarea noului modul nn. Înlocuiți-le cu net = nn.load('/model.network'); out = net.forward(img).
Commit-uri: d151f7e38
sensor.sleep() / sensor.reset() generează excepții la eșec (minor)¶
sensor.sleep() și sensor.reset() generează acum o excepție la eșec în loc să returneze True / False. Codul care verifica valoarea booleană returnată de sensor.sleep() trebuie să încadreze în schimb apelul într-un try / except.
Commit-uri: 7d16d008f
Socket-urile WINC returnează numărul real de octeți (comportament)¶
Metodele socket WINC1500 send / recv / sendto / recvfrom returnau anterior întotdeauna 0; acum returnează numărul real de octeți transferați. Codul care presupunea o valoare returnată de 0 (sau care intra în buclă/se bloca pe ea) trebuie să gestioneze numerele reale.
Commit-uri: a07fb2f60
image.binary() returnează o imagine nouă (comportament)¶
image.binary() a primit cuvintele-cheie to_bitmap / copy și returnează acum un nou obiect imagine în loc să returneze/modifice imaginea sursă pe loc. Codul care se baza pe binary() pentru a modifica imaginea originală ar trebui să folosească obiectul returnat (și să transmită copy=True pentru un comportament care nu este pe loc).
Commit-uri: 8a44f0cd9
Lista de verificare pentru migrare¶
Pentru o portare curată la v3.0.0, munca tipică este:
Înlocuiți
image.find_number()/image.classify_object()cu modululnn(migrarea nn).Încadrați
sensor.sleep()/sensor.reset()într-untry/exceptîn loc să verificați o valoare booleană returnată (modificarea sensor.sleep).Gestionați numerele reale de octeți de la
send/recvale socket-ului WINC (modificarea socket-ului WINC).Folosiți imaginea returnată de
image.binary()în loc să vă așteptați la o modificare pe loc (modificarea binary).Reduceți dimensiunea imaginilor înainte de
find_apriltags()pentru a rămâne sub 64K pixeli (limita find_apriltags).
Toate celelalte scripturi rulează nemodificate.