v3.3.0

v3.3.0 este o versiune majoră. Adaugă suport complet pentru camera termică FLIR Lepton printr-o nouă interfață sensor.ioctl() și palete de culori, un modul de ieșire video SPI tv, modul declanșat cu obturator global, un set mare de noi metode de desenare/analiză image (gamma_corr(), draw_ellipse(), draw_edges(), multe proprietăți de blob), precum și noi biblioteci ToF / motoare / linalg. API-ul cpufreq a fost rescris, iar sensor.set_framesize() ridică acum o excepție — citește modificările incompatibile de mai jos.

Aspecte importante

  • FLIR Lepton — suport complet pentru camera termică prin noua interfață sensor.ioctl(), palete de culori și image.to_rainbow().

  • Modulul tv — ieșire video SPI TV / compozit.

  • Mod declanșat cu obturator global — captură declanșată MT9V034 prin sensor.ioctl().

  • Imagisticăgamma_corr(), draw_ellipse(), draw_edges(), amestecare alfa în draw_image() și multe proprietăți noi de blob.

  • Biblioteci noi — distanță ToF VL53L1X, driver de motor TB6612, micro-linalg.

  • Incompatibil: API-ul cpufreq a fost rescris, sensor.set_framesize() ridică acum o excepție la eșec, sensor.alloc_extra_fb() a eliminat Bayer/JPEG, iar argumentele poziționale ale image.replace() s-au deplasat — vezi modificările incompatibile.

Funcționalități noi

  • FLIR Lepton — s-a adăugat sensor.ioctl() pentru control specific senzorului și un set complet de ioctl-uri Lepton (radiometrie, reîmprospătare/rezoluție, run-command, set/get atribut, temperatură FPA/AUX în °C, mod/interval de măsurare, lățime/înălțime), sensor.set_color_palette() / sensor.get_color_palette() cu sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow() și scripturi de exemplu Lepton (27-Lepton).

  • Mod declanșatIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE pentru captura declanșată cu obturator global MT9V034, cu exemple de FPS ridicat și mod declanșat.

  • Modulul tv — s-au adăugat legături pentru ieșire video SPI TV / compozit.

  • Imagistică — s-au adăugat image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), amestecare alfa în draw_image(), un cuvânt cheie mask= în clear(), s-au readăugat mask_rectangle() / mask_circle() / mask_ellipse(), cuvinte cheie de rotație / hmirror / vflip în draw_string() / draw_text(), un cuvânt cheie transpose (și aliasurile assign / set) în replace(), x_scale / y_scale în copy() plus crop() / scale(), un constructor Image() din dimensiuni, formatul de pixel sensor.BINARY, funcții exportate de conversie a spațiului de culoare și multe proprietăți noi de blob (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, rotație).

  • Biblioteci — s-au adăugat driverul senzorului de distanță ToF vl53l1x, driverul de motor tb6612 (cu exemple Motor-Shield pentru motor DC și pas cu pas) și o bibliotecă micro-linalg (ulinalg / umatrix).

  • S-a actualizat FatFS la FF13C (compatibil exFAT).

Alte modificări și îmbunătățiri

  • S-a îmbunătățit calitatea JPEG implicită (valoarea de mijloc între joasă și ridicată în locul unei valori codificate fix); operațiile de imagine pe loc nu mai necesită repetarea imaginii ca prim argument; draw_string() acceptă valori de scalare neîntregi.

Remedieri de erori

Camera și senzorii:

  • S-au remediat blocarea la pornire a Lepton 3.5 (timeout + recuperare) și fiabilitatea resetării, MT9V034 set_framesize() înainte de set_pixformat() (ordinea apelurilor nu mai contează), MT9V034 WVGA pe STM32H7, intervalul de expunere automată MT9V034 și actualizările registrelor shadow, precum și eroarea ADC a H7.

Imagistică:

  • S-au remediat un acces de memorie invalid în find_apriltags(), copy() la copierea unei imagini scalate în framebuffer-ul principal, alocarea framebuffer-ului pentru to_grayscale() / to_rgb565(), len() al obiectului keypoint, gestionarea limitelor MCU JPEG, analiza listei de praguri în binary() și draw_keypoints() care acceptă tupluri de puncte-cheie.

Sistem:

  • S-au remediat scurgerile de dezechilibru mark/free fb_alloc în metodele image / fir / lcd / tv / nn, s-a făcut ca py_assert să elibereze memoria framebuffer la excepțiile prinse (#417), s-a șters indicatorul de depășire UART (ORE) astfel încât depășirile să nu mai blocheze citirile UART, s-a remediat handlerul IRQ al RTC și s-a remediat utilitarul Windows cascade_convert.py.

Suport hardware și plăci

  • Camera termică FLIR Lepton.

  • TV shield — ieșire video SPI TV / compozit.

  • Mod declanșat cu obturator global (MT9V034).

Modificări incompatibile de API

Modificări de API vizibile pentru utilizator între v3.2.0 și v3.3.0. Domeniu: 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ă portezi codul.

  • minor — API restrâns; afectează doar scripturile care l-au folosit.

  • behavior — același API, rezultate diferite; reverifică scripturile reglate.

Modificările sunt grupate după impact în această ordine. Dacă vrei doar să-ți portezi codul, sari la lista de verificare pentru migrare de la final. Fiecare hash de commit duce la diferența sa pe GitHub.

API-ul cpufreq rescris (major)

Modulul cpufreq a fost rescris pentru suport H7. Constantele cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ și cpufreq.get_frequency() au fost eliminate. cpufreq.set_frequency() acceptă acum un întreg simplu în MHz (de ex. cpufreq.set_frequency(120)), iar cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies() au fost adăugate.

Commit-uri: 6babf84a1

Argumentele poziționale ale image.replace() s-au deplasat (minor)

image.replace() a primit un argument transpose, deplasând argumentul pozițional mask de la poziția 4 la poziția 5. Codul care transmitea mask pozițional (de ex. img.replace(src, hmirror, vflip, mask)) trebuie să treacă la forma cu cuvânt cheie img.replace(src, mask=mask).

Commit-uri: dbe7bf059

sensor.alloc_extra_fb() nu mai acceptă Bayer/JPEG (minor)

sensor.alloc_extra_fb() nu mai acceptă sensor.BAYER sau sensor.JPEG (acum suportă și sensor.BINARY). Codul care aloca framebuffere suplimentare în format Bayer sau JPEG trebuie să folosească GRAYSCALE / RGB565 (sau să aloce tamponul în alt mod).

Commit-uri: f9e6b3fe0

sensor.set_framesize() ridică o excepție la eșec (behavior)

sensor.set_framesize() ridică acum o excepție ValueError când dimensiunea cadrului nu este suportată, în loc să returneze False. Codul care verifica valoarea de retur False trebuie în schimb să prindă excepția ValueError.

Commit-uri: b0442633e

Lista de verificare pentru migrare

Pentru o portare curată la v3.3.0, munca tipică este:

  1. Portează codul cpufreq la set_frequency() cu întreg-MHz și get_current_frequencies() / get_supported_frequencies() (rescrierea cpufreq).

  2. Transmite mask către image.replace() ca cuvânt cheie (modificarea replace).

  3. Alocă framebuffere suplimentare ca GRAYSCALE / RGB565 în loc de Bayer/JPEG (modificarea alloc_extra_fb).

  4. Prinde ValueError în jurul sensor.set_framesize() în loc să verifici False (modificarea set_framesize).

Toate celelalte scripturi rulează neschimbate.