v4.5.3

v4.5.3 este o lansare amplă: autofocus OV5640, desenare de linii cu anti-aliasing, un decodor JPEG hardware integrat în mainline, câștiguri importante de capabilități pe i.MX RT (RT1060) și un set larg de remedieri pentru cameră/ISP. Câteva metode de imagine folosite rar au fost eliminate, iar unele API-uri ISP/display s-au schimbat — citiți modificările incompatibile de mai jos.

Aspecte importante

  • Autofocus OV5640 — activat pe OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), cu un exemplu.

  • draw_line() cu anti-aliasing și un decodor JPEG hardware STM32 integrat în mainline (decompresie JPEG mai rapidă).

  • OpenMV RT1060 a primit ulab, operații ISP, set_framerate() / set_frame_callback(), un tampon de cadre (frame buffer) mult mai mare și driverul CAN.

  • Incompatibil: Image.div() / cartoon() / mul() au fost eliminate, iar unele API-uri ISP/display s-au schimbat — vedeți modificările incompatibile.

Funcționalități noi

  • Autofocus OV5640 — firmware-ul de autofocus este activat pe OPENMV4, OPENMV4P și OPENMV RT1060; declanșați-l cu sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). A fost adăugat un nou exemplu 07-Sensor-Control/autofocus.py.

  • Desenare de linii cu anti-aliasingdraw_line() a primit anti-aliasing.

  • Controlere de display SPI personalizateSPIDisplay acceptă acum un cuvânt cheie controller= și expune un hook bus_write pentru secvențe personalizate de inițializare/comandă.

  • Îmbunătățire Image.ccm() — acceptă acum matrice imbricate 3x3 / 4x3 / 3x4 / 4x4 și tablouri ulab (cu un rând opțional de offset pe canal); a fost adăugat un exemplu de corecție a culorilor.

  • Captură JPEG pe i.MX RT — captură sensor.JPEG pe Arduino Portenta/Nicla Vision/Giga, plus set_framerate() și set_frame_callback() pe portul mimxrt.

  • Validarea modelelor TFLite — modelele poartă acum un hash de ordine a operatorilor și dimensiunea setului de operatori.

  • WiFi — au fost adăugate constante pentru modul de securitate CYW43; noi scripturi exemplu de control al plăcii pentru i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

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

  • MicroPython actualizat la 1.22; CMSIS actualizat la 5.9.0.

  • Decodor JPEG hardware STM32 integrat în mainline — decompresie JPEG mai rapidă pe codecul de pe cip.

  • Au fost optimizate Image.invert() / negate() și operațiile binare/matematice pe imagini (intrinseci CMSIS).

  • Bibliotecile rpc și vl53l1x au fost făcute portabile (folosesc machine / time în loc de pyb), așa că rulează pe porturi non-STM32.

  • Memcpy al tamponului de cadre (frame buffer) accelerat prin DMA pe OpenMV H7 / H7 Plus / Pro / Pure Thermal și Arduino Giga / Nicla Vision / Portenta H7; STM32 scanează acum dispozitivele I2C o singură dată per scanare, pentru o pornire mai rapidă.

Remedieri de erori

Cameră și senzori:

  • Au fost corectate XCLK-ul camerei STM32 la un factor de umplere real de 50% și o eroare apărută când frecvența ceasului camerei este setată la zero; au fost remediate Bayer crop+transpose, deplasarea de culoare YUV422 și set_windowing() pe portul mimxrt.

  • Au fost corectate sondarea ID-ului de cip GC2145 și hmirror/vflip pe montaje rotite; au fost remediate PAJ6100 pe RT1062 și o depășire de tampon SPI la PixArt PAJ7620/PAW3902.

Procesare de imagine:

  • Au fost corectate decuparea (clipping) a roi în find_rects(), trunchierea offsetului fracționar în morph(), valorile implicite de contrast/luminozitate din image.gamma(), offset-urile A/B din get_threshold() pe RGB565 și decodarea JPEG a dimensiunilor care nu sunt multipli de 8.

Sistem și biblioteci:

  • machine.LED.value() fără argument returnează acum starea LED-ului în loc să o șteargă; au fost corectate deinit-ul SPI SSEL pe o magistrală partajată, machine.deepsleep() pe RT1062, o blocare TF la operatori lipsă și auto-activarea NIC WINC1500/ninaw10 la connect().

Suport hardware și plăci

  • OpenMV RT1060 — ulab și operații ISP activate, tampon de cadre (frame buffer) mai mare (10M→20M) / fb_alloc (2M→11M), driver CAN restaurat, mai mult heap.

  • Arduino GIGA — suport pentru camera GC2145, cu detectare automată GC2145/OV5640 (împart aceeași adresă I2C).

  • i.MX RT — suport pentru captură sensor.JPEG.

Modificări incompatibile de API

Modificări de API vizibile pentru utilizator între v4.5.2 și v4.5.3. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

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

  • behavior — același API, rezultate diferite; reverificați scripturile ajustate fin.

Modificările sunt grupate după impact în această ordine. Dacă vreți doar să portați codul, săriți la lista de verificare pentru migrare de la final. Fiecare hash de commit duce la diff-ul său de pe GitHub.

Metode de imagine eliminate (minor)

Image.div(), Image.cartoon() (și exemplul său) și Image.mul() au fost eliminate.

Commits: 7c932602e, 055a468b8, 4fe7fb63b

API-ul modulului de display (minor)

Vechiul fallback la numele de modul udisplay a fost eliminat — modulul este înregistrat doar ca display. Metodele dsi_write() / dsi_read() specifice DSI au fost înlocuite cu bus_write() / bus_read(), care sunt acum disponibile pe toate controlerele de display.

Commits: 7df6694c3, 7d1f378a0

Modificări de API pentru MQTT și tf.regression (minor)

MQTTClient din biblioteca mqtt a fost reproiectat: port este acum obligatoriu, au fost adăugate noile cuvinte cheie de constructor ssl_params / callback și un argument timeout la connect(), vechile valori implicite ssl= / port=0 au fost eliminate, iar check_msg() este acum neblocant. tf.regression() a fost rescris — semnătura sa este acum regression(model, array) și gestionează modele 1D/2D/3D și cuantizate (int8).

Commits: d12874c63, c5ec576c1

Modificări de comportament ISP / senzor (behavior)

Image.awb() a fost reproiectat — gray-world (implicit) vs white-patch (max=True) este acum explicit, iar argumentul max plus argumentele gamma / contrast / brightness ale lui Image.gamma() sunt acum doar prin cuvânt cheie (apelurile poziționale trebuie actualizate). Transpunerea imaginii este acum dezactivată pentru YUV422 (anterior producea ieșire incorectă), iar deplasarea de culoare YUV422 a fost corectată pentru a se potrivi cu Bayer. Calea JPEG STM32 ridică acum o eroare la o nepotrivire de geometrie JPEG în loc să producă o imagine coruptă, iar modul AP WiFi aplică acum un mod de securitate implicit pe porturile STM32 și i.MX RT.

Commits: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Lista de verificare pentru migrare

Pentru un port curat la v4.5.3, munca tipică este:

  1. Renunțați la folosirea Image.div() / cartoon() / mul() (metodele eliminate).

  2. Importați modulul de display ca display și treceți de la dsi_write/ dsi_read la bus_write/bus_read (modificarea API-ului de display).

  3. Actualizați construcția MQTTClient (port este obligatoriu; ssl_params/callback) și orice apeluri tf.regression() (modificările de API ale bibliotecilor).

  4. Transmiteți awb() max și gamma() gamma/contrast/ brightness ca argumente prin cuvânt cheie și reverificați presupunerile despre YUV422/transpose și securitatea modului AP (modificările ISP/senzor).