v4.7.0

v4.7.0 on merkittävä ominaisuusjulkaisu. Sen kärkenä: uusi OpenMV AE3 (Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) -kortti kaksiytimisellä openamp-ohjelmointimallilla, vain luku -tilainen ROMFS (/rom) -tiedostojärjestelmä mukana toimitetuilla malleilla ja kaskadeilla, VL53L8CX 8x8 -aikalentotuki, uudet YOLOv8- / YOLO-LC-jälkikäsittelijät sekä MicroPython 1.25. Se muuttaa myös sisäänrakennettujen mallien ja Haar-kaskadien lataustapaa, joten lue alla olevat rikkovat muutokset.

Kohokohdat

  • OpenMV AE3 -kortti — Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) -kortti, mukana täysi portti, käynnistyslatain ja ROMFS.

  • Kaksiytiminen openamp -moduuli — siirrä työtä toiselle Alif-ytimelle RPMsg:n kautta (@async_remote-koriste, Endpoint/ EndpointIO).

  • ROMFS — vain luku -tilainen /rom-tiedostojärjestelmä, jossa on sisäänrakennetut TFLite-mallit ja Haar-kaskadit, sekä uusi tools/mkromfs.py-isäntärakentaja.

  • VL53L8CX 8x8 -monivyöhykkeisen aikalentosensorin tuki.

  • Uudet ML-jälkikäsittelijätyolo_v8_postprocess ja yolo_lc_postprocess.

  • MicroPython päivitetty versioon 1.25.0.

  • Rikkova: sisäänrakennetut mallit ja Haar-kaskadit ladataan nyt /rom-hakemistosta polun perusteella (katso ml.Model-muutos ja Haar-kaskadin muutos).

Uudet ominaisuudet

  • OpenMV AE3 — uusi Alif Ensemble -kortti (Cortex-M55-sovellusydin + Ethos-U55 NPU), mukana portti, käynnistyslatain, korttimääritys, RGB-LED ja ROMFS-tuki.

  • openamp — uusi moduuli Alifin kaksiytimiselle (Open-AMP / RPMsg) RPC-mallille: Endpoint, EndpointIO, new_service_callback ja @async_remote-koriste marshalloitujen funktioiden siirtämiseen toiselle ytimelle. HE-/HP-ytimet toimittavat oletusarvoisen asyncio-pohjaisen _boot.py-tehtäväajurin.

  • audio — Alif-portti lisää audiomoduulin (PDM-mikrofoni) takaisinkutsupohjaisella suoratoisto-API:lla (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) AE3:lla.

  • ROMFS — vain luku -tilainen /rom-tiedostojärjestelmä, jossa on sisäänrakennetut resurssit (TFLite-mallit, Haar-kaskadit, …) korttikohtaisesti paketoituna, uusi tools/mkromfs.py-isäntätyökalu (tflite, tflite+vela, Haar-kaskadi, teksti, binääri) sekä scripts/libraries/romfs.py-apukirjasto, joka tarjoaa ls_romfs().

  • ML-jälkikäsittely — uudet yolo_v8_postprocess (YOLOv8) ja yolo_lc_postprocess (kevyt tiny-YOLOv2-variantti sulautetuille järjestelmille optimoiduilla oletusankkureilla) -luokat, joista kukin ottaa threshold-, nms_threshold- ja nms_sigma-parametrit.

  • GenX320-välkynnänesto — uusi IOCTL_GENX320_SET_AFK -ioctl tapahtumasensorin välkynnänestosuodattimen käyttöönottoon ja määritykseen (välkynnän vähimmäis-/enimmäistaajuus Hz:ssä), mukana genx320_grayscale_set_afk.py-esimerkki.

  • VL53L8CX — tuki 8x8-monivyöhykkeiselle aikalentosensorille tof-moduulin kautta (automaattisesti tunnistettu, 8x8 taajuudella 15 Hz).

Muut muutokset ja parannukset

  • MicroPython päivitetty versioon 1.25.0 (STM32- ja i.MX RT -portit), mukana lisätty upstream-Alif-portti ja vanhat BT-HCI-ajurit poistettu STM32- / i.MX RT -porteista.

  • GenX320 — uusi ISSD-sekvenssi kaksinkertaistaa sisäisen pikselikellon (24 → 48 MHz) korkeampia kehysnopeuksia varten.

  • STM32N6 / ST Edge AI — pohjatyö STM32N6:n Neural-ART-mallien käyttöönotolle (ST Edge AI -työkalut ja ROMFS-tuki).

  • PAG7936 — CSI PHY -bittinopeus asetetaan nyt, mikä parantaa kyseisen sensorin toimintaa.

Korjatut virheet

Kamera ja sensorit:

  • Korjattu IMU I2C:n yli — kortit, joissa LSM6DSx-IMU on kytketty I2C:hen, alustavat ja lukevat nyt oikein (I2C-polku käytti aiemmin rikkinäistä lukupolkua ja vääriä vakioita).

  • FLIR Bosonin alustus yrittää nyt jopa 10 kertaa vanhemmilla (< IDD 4.x) sensoreilla, joiden käynnistyminen kestää ~10 s, ja tehdasoletusasetukset palautetaan nollauksessa, jotta ulkoisesti ladatut asetukset eivät voi rikkoa videolähtöä.

  • Korjattu GenX320:n psee_ehc_activate_override, joka kirjoitti väärän (nolla) kertymäajan.

  • STM32-korteilla, joissa ei ole FastMode+-laitteistoa, I2C:n nopean tilan pyytäminen on nyt asianmukaisesti suojattu sen sijaan, että väylä määritettäisiin hiljaisesti väärin.

Koneoppiminen:

  • Korjattu rajauslaatikoiden kerääminen ja np.nonzero-käsittely YOLOv2- / YOLOv5-jälkikäsittelijöissä, mikä parantaa tunnistuksen luotettavuutta.

Laitteisto- ja korttituki

  • OpenMV AE3 — uusi Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) -kortti.

  • VL53L8CX — 8x8-monivyöhykkeinen aikalentosensori; AE3:n ToF-sensori vaihdettiin VL53L5CX:stä VL53L8CX:ään.

  • STM32N6 — ST Edge AI (Neural-ART) -mallien käyttöönoton pohjatyö.

Rikkovat API-muutokset

Käyttäjälle näkyvät API-rikkoutumiset versioiden v4.6.20 ja v4.7.0 välillä. Laajuus: Python-C-moduulit hakemistossa modules/ ja Python-kirjastot hakemistossa scripts/libraries/.

Jokainen muutos on merkitty vaikutuksensa mukaan:

  • major — useimmat sitä käyttäneet skriptit vaativat muokkauksia.

  • minor — kapea API; vaikuttaa vain sitä käyttäneisiin skripteihin.

  • behavior — sama API, eri tulokset; tarkista viritetyt skriptit uudelleen.

Muutokset on ryhmitelty vaikutuksen mukaan tässä järjestyksessä. Jos haluat vain siirtää koodisi, siirry lopussa olevaan siirtymän tarkistuslistaan, jossa on tiivistetty tehtävälista. Jokainen commit-tunniste linkittää diffiinsä GitHubissa.

Sisäänrakennetut mallit ladataan polun, ei nimen, perusteella (major)

ml.Model ei enää lataa sisäänrakennettua mallia pelkän nimimerkkijonon perusteella. Mallit ladataan nyt tiedostojärjestelmästä / ROMFS:stä polun perusteella:

model = ml.Model("/rom/person_detect.tflite")   # was: ml.Model("person_detect")

C-puolen model.labels-attribuutti poistettiin; luokkanimet ladataan nyt Python-puolen ml.Model -kääreellä erillisestä <model>.txt-tiedostosta (None, jos puuttuu). Kaikki mukana toimitetut esimerkit ja ml/apps.py päivitettiin käyttämään /rom/*.tflite-polkuja.

Commits: 978fa436c, 3f55d956c, 416bc4613

Haar-kaskadit ladataan ROMFS:stä (minor)

image.HaarCascade() lataa nyt sisäänrakennetut kaskadit VFS:n / ROMFS:n kautta. Oletusarvoinen kasvojen etupuolen kaskaditiedosto nimettiin uudelleen muodosta haarcascade_frontalface_default.xml muotoon haarcascade_frontalface.xml, ja latausvirhe nostaa nyt RuntimeError-poikkeuksen (”Failed to load Haar cascade”) OSError-poikkeuksen sijaan.

Commit: 9de1220d8

tof.reset() / tof.deinit() -semantiikka (behavior)

tof-moduulissa reset() oli aiemmin init()-aliaksen ja todellista deinit-toimintoa ei ollut. tof.reset() suorittaa nyt todellisen sensorin nollauksen ja tof.deinit() sammuttaa sensorin asianmukaisesti (VL53L5CX:n sammutustuella). Koodi, joka luotti siihen, että reset() alustaa sensorin uudelleen, tulisi tarkistaa uudelleen.

Commits: 20d6b53f8, c743cab6a

GenX320:n ajoitus- ja tapahtumatilarajoitukset (behavior)

Uusi GenX320 ISSD -sekvenssi muuttaa sensorin aikaperustaa: kehysnopeus- ja valotusargumentit ilmaistaan nyt 1 MHz:n yksiköissä kelloskaalauksen sijaan, ja HSYNC-pimennystä säädetään dynaamisesti pyydetyn kehysnopeuden mukaan. Skriptit, joihin GenX320:n ajoitusarvot oli kovakoodattu, on viritettävä uudelleen. Tapahtumatilakaappaus nostaa nyt virheen, kun kuvan transpose on käytössä (se ei ole tuettu kyseisessä määrityksessä).

Commits: 660a783d6, 7a718c6af

Siirtymän tarkistuslista

Puhtaaseen siirtymiseen versioon v4.7.0 tyypillinen työ on:

  1. Vaihda sisäänrakennetun mallin lataus nimimerkkijonosta /rom/<name>.tflite-polkuun ja tarjoa luokkanimet erillisen <name>.txt-tiedoston kautta (ml.Model-muutos).

  2. Päivitä haarcascade_frontalface_default.xml muotoon haarcascade_frontalface.xml ja nappaa RuntimeError (ei OSError) kaskadin latausvirheessä (Haar-kaskadin muutos).

  3. Poista koodi, joka luotti siihen, että tof.reset() alustaa sensorin uudelleen (tof-muutos).

  4. Viritä kaikki kovakoodatut GenX320:n kehysnopeus- / valotusarvot uudelleen 1 MHz:n yksiköihin äläkä ota transposea käyttöön tapahtumatilassa (GenX320-muutos).