v5.0.0¶
v5.0.0 on suuri julkaisu. Sen kärkiuutiset: uudelleenrakennettu OpenMV Protocol V2 -isäntälinkki, luokkapohjainen csi-kamerarajapinta, joka skaalautuu monikamerakorteille, ajettava simulaattorikohde, MoveNet-yhden-asennon estimointi, MicroPython 1.28 ja suuri joukko kamera-, ML- ja ToF-korjauksia. Mukana on myös useita rajapinnan rikkovia muutoksia — kaikki käyttäjälle näkyvät muutokset version v4.8.1 jälkeen on lueteltu alla, samoin kuin tarkat siirtymisohjeet.
Kohokohdat¶
OpenMV Protocol V2. Isäntä-/IDE-linkki rakennettiin uudelleen pohjalta alkaen: kehystetty, sekvensoitu, CRC-tarkistettu, ja siinä on multipleksoidut kanavat stdio:lle, virran esikatselulle ja käyttäjän datalle. Uuden
protocol-moduulin avulla skriptit voivat luoda omia siirtolinkkejä ja datakanavia. Katso protocol-moduulin muutokset.Luokkapohjainen
csi-kamerarajapinta.import sensormuuttuu muotoonimport csi/csi.CSI, ja siinä on natiivi monikameratuki. Katso csi-siirtymä.Simulaattorikohde. Laiteohjelmisto rakentuu ja toimii nyt Arm FVP / QEMU -simulaattorissa (MPS2/MPS3), mukaan lukien NPU-, ROMFS- ja PSRAM-emulointi — konenäkö- ja ML-skriptejä voi ajaa ilman kytkettyä laitteistoa.
MoveNet-asennon estimointi. Uusi
MoveNet-jälkikäsittelijä sekä mukana toimitettavamovenet_singlepose_192.tflite-malli OpenMV AE3:lla ja N6:lla.MicroPython 1.28 ja ulab 6.12.0, ST Edge AI 4.0 -työkalut sekä ulkoistettu OpenMV SDK (katso rakennus-/työkalumuutokset).
Uudet ominaisuudet¶
The
protocolmodule — create custom transports and data channels from Python:protocol.init(),protocol.register(),protocol.is_active(), and aprotocol.ProtocolChannelclass withsend_event(), plusCHANNEL_FLAG_*andCHANNEL_ID_*constants. The finalprotocol.init()signature is documented in the protocol module changes.protocol.CBORChannel— jäädytettyprotocol-laajennuspaketti, joka serialisoi nimettyjä kenttiä CBOR-muotoon näyttöelementtien (luokkanimi, syvyys) ja vuorovaikutteisten ohjainten (vaihtokytkin, liukusäädin, valinta) kanssa.Isännän muistin ja virran introspektio — uusi
SYS_MEMORY-protokollakomento paljastaa poolikohtaiset ajonaikaiset muistitilastot IDE:lle, ja uusiSTREAM_SOURCE-virran ioctl antaa isännän valita, mikä kamera syöttää esikatselun monikamerakorteilla (protokollaversio 1.0.1).Monikameravirtaus —
csi.CSIottaastream=-argumentin, joka valitsee, mikä sensori syöttää IDE:n esikatselun; virran kehysotsake kuljettaa nyt EMA-tasoitetun FPS:n, joten IDE näyttää kehystaajuuden ilmanclock.fps()-täytekoodia. Katso csi-siirtymä ja csi-jatkotoimet.GenX320-tapahtumasensori — uusi spatiotemporaalinen kontrastisuodatin (
csi.IOCTL_GENX320_SET_STCtiloineencsi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLYjacsi.GENX320_STC_TRAIL) sekä raakatapahtumien luku (csi.IOCTL_GENX320_READ_EVENTS_RAW), uusien esimerkkiskriptien kera.MoveNet— uusi MediaPipe-yhden-asennon jälkikäsittelijä (threshold-,nms_threshold-,nms_sigma-avainsanat), joka palauttaa((x, y, w, h), score, keypoints)ja 17-nivelisen COCO-avainpistetaulukon;movenet_singlepose_192.tflite-malli ja esimerkki toimitetaan mukana AE3:lla ja N6:lla.ml.utils.draw_predictions()— uusi valinnainenscores=-argumentti lisää luokkakohtaisen luottamuksen, fontti ja laatikon viivanpaksuus skaalautuvat nyt automaattisesti kuvan leveyteen, ja uusiformat="point"-tila piirtää keskimerkin centerpoint-/huipputunnistimille.Uusi
display.TVDisplay-luokka (geneeriselläioctl():lla) korvaa erillisentv-moduulin. Katso display-moduulin muutokset.Uusi
find_line_segments()-tunnistin (ED-Lines) — nyt saatavilla kaikissa käännöksissä, uudellathreshold=-argumentilla. Katso image-moduulin muutokset.
Muut muutokset ja parannukset¶
MicroPython päivitetty versioon 1.28.0 v4.8.1-pohjasta. Lisää suurnopeustilan SD-kortille H5:llä/H7:llä/N6:lla, AHB5-kellotuksen virransäästötilassa ja ohjattavat JTAG-nastat GPIO:ina OPENMV_AE3:lla.
ulab päivitetty versioon 6.12.0 — natiivi
%-operaattori ndarray-taulukoille (ml.utils.mod()-aputoiminto on poistettu; katso ML-kirjaston muutokset).ST Edge AI -työkalut päivitetty versioon 4.0 — vaikuttaa laitteessa tapahtuvaan ST-mallien kääntämiseen ja käyttöönottoon.
ml.Model—load_to_fb-avainsana-argumentti poistettiin; mallin muisti käsitellään automaattisesti yhtenäisellä varaajalla.image.Image.scale()paikallaan — kuvan skaalaus suuremmaksi paikallaan (esimerkiksiimg.scale(x_scale=2.0, y_scale=2.0)) kasvattaa nyt kehyspuskuria sopivaksi epäonnistumisen sijaan.Suurempi stdio-puskuri — oletustekstipuskuri IDE:lle kasvoi 512:sta 1024 tavuun OpenMV 2/3/4:llä, Nicla Visionilla, AE3:lla ja N6:lla, joten suuremmat
print()-purskeet eivät katkea.Sujuvampi isäntätapahtumien virtaus — stdout NOTIFY -tapahtumat isännälle rajoitetaan enintään yhteen isäntälukua kohden sen sijaan, että niitä lähetettäisiin yksi jokaista rengaspuskurin vesirajan ylittävää
print()-kutsua kohden.Keskeytettävät pitkät operaatiot — pitkät kuvanpiirto-, GPU- (Nema/Dave2D) ja NPU-odotussilmukat huoltavat nyt tapahtumia määräajoin, joten skriptit pysyvät reagoivina IDE:n Stop-painikkeelle raskaan työn aikana.
Virhekorjaukset¶
Kamerat ja sensorit:
find_apriltags()ei enää turmele tuloksia D-cache-/GPU-korteilla (N6, AE3), ja se toimii nyt AE3:lla.Korjattu Bayer-kuvan ulostulo STM32 N6 ISP:stä pikseliformaattien vaihdon jälkeen.
Korjattu vihreä automaattisen valkotasapainon ylivuoto kirkkaissa kohteissa sekä alustamaton ensimmäisen kehyksen AWB-tilastotapaus; nostettu STM32 ISP:n gamma-rajoitus (32 → 63) laajemman gamma-/kontrasti-/kirkkausvälin saamiseksi.
PS5520-automaattivalotus ei enää värähtele kirkkaassa valossa; PAG7936:n AEC/AGC-toimintaa muokattiin (yhdistetty ohjaus, korjattu vahvistuskatto).
OV5640-automaattitarkennuksen laiteohjelmiston lataus palautettu Portentalla/Niclalla (MIMXRT I2C SUSPEND -korjaus).
Korjattu kameran kaappauksen lukkiutuma, kun kehystaajuusraja yhdistetään JPEG-kaappaukseen (STM32).
GenX320
csi.IOCTL_GENX320_READ_EVENTS_RAW-luvut eivät enää sekoita IDE:n esikatselua.FLIR Lepton
csi.IOCTL_LEPTON_SET_MODEcsi.CSI.ioctl():n kautta toimii nyt yhdellä argumentilla kutsuttaessa.
Kuvankäsittely:
Korjattu
draw_image()/blend()-alfasekoitus, kun maski annetaan.Korjattu 1-bittisen (BINARY) PNG:n koodauksen/dekoodauksen bittijärjestys sekä harmaasävydekoodaus 1-bittisestä.
Korjattu
mjpeg.Mjpeg-tallennuksen keston/FPS:n metatiedot.Korjattu ohjelmistopohjaisen JPEG-dekoodauksen pinon ylivuoto pienipinoisilla korteilla (OpenMV M7).
Korjattu JPEG-/PNG-tiedostomuotojen automaattinen tunnistus ei-ARM-isännillä (simulaattori).
Time-of-Flight:
tof.read_depth()ei enää nosta poikkeusta ohimenevistä mittausvirheistä ja palautuu automaattisesti väyläongelmista; oletusaikakatkaisutof.read_depth():lle /tof.snapshot():lle on nyt 100 ms (katso tof-muutokset).Korjattu VL53L5CX-/VL53L8CX-monivyöhykkeisen syvyysdatan turmeltuminen.
ML ja järjestelmä:
NPU siivotaan oikein, kun päättely keskeytetään N6:lla.
Syväunesta/valmiustilasta herääminen palautettu N6:lla; AE3:n hyppy-käynnistyslataimeen-jumi on korjattu.
Korjattu muistivuotoja pehmeällä nollauksella (STM32 Nema GPU) sekä ennenaikaisesti kerätty apukehyspuskuri.
Mukautetut Python-protokollakanavat selviävät nyt pehmeästä uudelleenkäynnistyksestä, USB-siirtolinkki palautuu väylänollauksesta / juuttuneista päätepisteistä, ja USB SOF -keskeytystulva on korjattu.
Laitteisto- ja korttituki¶
OpenMV N6 — Ethernet käytössä (langallinen verkko); NPU AXI SRAM (1,75 MB) yhdistetty jaettuun ohimenevään pooliin lisämuistin saamiseksi päättelyjen välillä; syväuni-/valmiustilasta herääminen; mukana toimitettavat TFLite-mallit ja Haar-kaskadit ROMFS:ssä.
OpenMV AE3 — mukana toimitettavat mallit ja kaskadit ROMFS:ssä;
cbor2jäädytetty laiteohjelmistoon.Alif (AE3, N6) — virransäästöinen
machine.RTC-herätys.Korkearesoluutioiset AprilTagit — täyden sensoriresoluution
find_apriltags()AE3:lla, Arduino Gigalla ja Arduino Portenta H7:llä.Simulaattorikohteet — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), NPU-, ROMFS- ja PSRAM-emuloinnilla.
Rajapinnan rikkovat muutokset¶
Käyttäjälle näkyvät rajapinnan rikkomiset versioiden v4.8.1 ja v5.0.0 välillä. Laajuus: Python-C-moduulit hakemistossa modules/ ja Python-kirjastot hakemistossa scripts/libraries/.
Jokainen muutos on merkitty vaikutuksensa mukaan:
major — useimmat skriptit vaativat muokkauksia.
minor — kapea rajapinta; vaikuttaa vain sitä käyttäneisiin skripteihin.
behavior — sama rajapinta, eri tulokset; tarkista viritetyt skriptit uudelleen.
tooling — vaikuttaa vain lähdekoodista rakentamiseen / johdettuihin haaroihin.
Muutokset on ryhmitelty vaikutuksen mukaan tässä järjestyksessä — ensin major, sitten minor, behavior ja tooling. Jos haluat vain siirtää koodisi, hyppää lopussa olevaan siirtymän tarkistuslistaan, jossa on tiivistetty tehtävälista. Jokainen commit-tiiviste linkittää diffiinsä GitHubissa.
sensor korvattu csi:llä (major)¶
Jokainen virallinen esimerkki kirjoitettiin uudelleen pudottamaan import sensor import csi:n hyväksi. Vanha moduulitason funktionaalinen rajapinta (sensor.reset(), sensor.set_pixformat(), …) on korvattu luokkapohjaisella csi.CSI-rajapinnalla, joka skaalautuu luontevasti useita kameroita sisältäville korteille (csi0, csi1, …) ja on välttämätön kaikille uusille ominaisuuksille (stream=-avainsana, monisensorivirtaus, …).
sensor-qstr on edelleen kytkettynä tiedostossa modules/py_csi.c taaksepäin yhteensopivia laiteohjelmistokäännöksiä varten, mutta se ei saa uusia ominaisuuksia, ja kaikki esimerkit, dokumentit ja kirjastokoodi olettavat nyt csi:n.
Commitit: 945c5853c, 61f835b7e
Moduulista luokaksi
Ennen (sensor):
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()
Jälkeen (csi):
import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()
Asetin/lukija-parit yhdistetty yhdistetyiksi käyttömenetelmiksi
Uudessa rajapinnassa ilman argumentteja kutsuttu metodi palauttaa nykyisen arvon; arvon kanssa kutsuttuna se asettaa sen. set_*-/get_*-etuliitteet ovat poissa. Metodien nimistä poistui myös ing-pääte siellä, missä se oli tarpeeton (windowing → window). Uuden rajapinnan sarake linkittää viitedokumentteihin.
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Funktiot ilman suoraa vastinetta
|
Mitä käyttää sen sijaan |
|---|---|
|
|
|
|
|
Siirretty |
|
|
|
Poistettu. |
|
|
Uutta csi.CSI:ssä
csi.CSI(stream=True|False)— rakennusajan valitsin, joka valitsee, mikä CSI syöttää esikatselun kehyspuskuria (korvaa tilannekuvakohtaisenupdate=-avainsanan, katso csi-jatkotoimet).csi.CSI(cid=N)/csi.devices()— moni-CSI-tuki korteille, joissa on useampi kuin yksi kuvasensori.
image-moduuli — allekirjoitusten uudistus (major)¶
image-moduuliin tuli laajin rajapintamuutos csi:n jälkeen — piirtoallekirjoitukset, tulosobjektit ja useat tunnistimet kaikki muuttuivat.
Koordinaattiargumenttien on oltava monikoita
modules/py_image.c kirjoitettiin uudelleen mp_arg_parse_all:n päälle. Kaikki piirto-/pikselimetodit, jotka aiemmin ottivat erilliset x, y, ... -sijaintiargumentit, vaativat nyt nämä koordinaatit pakattuna yhteen monikkoon.
Commitit: d18bbc472, 0c60c94b9 (PR #3061)
Ennen |
Jälkeen |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaikki ovat image.Image:n metodeja.
Tulosobjektit muunnettu attrtuple-muotoon
Nämä tyypit ovat nyt MicroPythonin attrtuple-objekteja: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. Attribuuttien käyttö ilman sulkeita on nyt kanoninen.
Commit: 3399d302e
Ennen (metodityyli):
img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())
Jälkeen (attribuuttityyli):
img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)
blob ja histogram ovat muuttumattomia — ne säilyttävät nykyiset tyyppinsä ja ()-käyttömenetelmänsä (attrtuple ei voi ilmaista blobin laiskasti laskettuja arvoja eikä histogrammin argumentteja ottavia käyttömenetelmiä).
find_features haar -parametrin uudelleennimeäminen
image.Image.find_features() — scale_factor= nimettiin uudelleen muotoon scale=.
Commit: be4c5cd73
get_regression — nyt aina robusti, target_size lisätty
image.Image.get_regression() käyttää nyt aina robustia (Theil-Sen) regressiota. Vanha nopea pienimmän neliösumman polku poistettiin, joten robust=-avainsana on poissa — se mitä ennen vaati robust=True:n, on nyt ainoa toimintatapa. Uusi target_size=(w, h)-avainsana (oletus (80, 60)) pienentää ROI:n pinta-alaa ennen O(N^2) Theil-Sen-sovitusta, jotta se ajetaan aina järkevällä kuvakoolla; sovitetun viivan päätepisteet kartoitetaan takaisin lähdekoordinaatteihin. linear_regression_robust.py-esimerkki poistettiin ja linear_regression_fast.py nimettiin uudelleen muotoon linear_regression.py.
Commitit: c7c2e69a0, 0ff2afa72
find_line_segments — uusi algoritmi
image.Image.find_line_segments() — vanha LSD-tunnistin korvattiin ED-Lines-tunnistimella, ja se sai uuden threshold=50-avainsanan. Aiemmin viritettyjen skriptien tuloste poikkeaa.
Commitit: 87da2a7b7, 2c47b5735
AprilTag-kirjasto korvattu
image.Image.find_apriltags() — AprilTag-tunnistin korvattiin uudella toteutuksella. Perhejoukko muuttui:
Poistettu |
Lisätty |
|---|---|
|
|
Commit: e813bada7
csi-moduulin jatkotoimet (minor)¶
Pienempiä csi-jatkotoimia csi-siirtymän päälle.
snapshot(update=…) poistettu
update-avainsana csi.CSI.snapshot():ssa on poissa. Estääksesi CSI-laitetta syöttämästä esikatselun kehyspuskuria, kytke se pois rakennusvaiheessa:
csi0 = csi.CSI(stream=False) # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img) # was: ...(update=False, ...)
Commitit: 9a8077827, 26b79a2c5
framebuffers() expand -argumentti poistettu
csi.CSI.framebuffers() — kolmas sijaintiargumentti (expand) on poissa; allekirjoitus on nyt framebuffers([count]).
Commit: 86cb3a5de
protocol-moduuli (minor)¶
Vaikuttaa vain skripteihin, jotka ohjasivat isäntälinkkiä suoraan. Katso protocol.
timer_ms nimetty uudelleen poll_ms:ksi
protocol.init() — timer_ms-argumentti nimettiin uudelleen muotoon poll_ms.
protocol.init(..., poll_ms=10) # was: timer_ms=10
Commitit: 8a0635e8c, 95a290607
protocol.poll() poistettu
Protokollatehtävä ajoitetaan nyt sisäisesti. protocol.poll()-kutsut nostavat AttributeError-poikkeuksen.
Commit: 8a0635e8c
soft_reboot-asetusargumentti poistettu
protocol.init() — soft_reboot-argumentti on poissa. Kaikki nykyiset siirtolinkit sietävät pehmeitä uudelleenkäynnistyksiä, joten toiminta on nyt ehdotonta.
Commit: 0bf766aa2
display-moduulit (minor)¶
TV-ulostulo kulkee nyt display.TVDisplay-objektin kautta erillisen tv-moduulin sijaan. display sai myös geneerisen ioctl():n.
tof-moduuli (behavior)¶
Sama rajapinta kuin ennen; oletukset ja virheenkäsittely muuttuivat. Katso tof.
Oletusaikakatkaisu muuttui
tof.read_depth() ja tof.snapshot() (kutsuttuna timeout=-1:llä) käyttävät nyt oletuksena 100 ms:ää loputtoman odottamisen sijaan. Anna eksplisiittisesti suurempi arvo, jos tarvitset vanhaa toimintaa.
Commit: b6772b80d
Automaattinen palautuminen
Ajuri nollaa nyt I2C-väylän ja sensorin kovasti mittaus-/aikakatkaisuvirheissä. Esimerkit eivät enää kutsu tof.reset():iä poikkeuskäsittelijöissään — manuaalisen palautuksen tehnyt käyttäjäkoodi tulisi poistaa (se taistelee uutta automaattista palautusta vastaan).
ML-kirjasto (behavior)¶
Sama rajapinta, eri luvut — tarkista uudelleen jokainen viritetty ML-putki.
Esikäsittely venyttää nyt letterbox-täytön sijaan
Normalization käyttää nyt image.SCALE_ASPECT_IGNORE:tä (venytys) image.SCALE_ASPECT_EXPAND:n (letterbox) sijaan. NMS-jälkikäsittely vaihtoi myös riippumattomaan x/y-skaalaukseen.
Muista
Vaikutus. YOLO-tyyliset tunnistimet ja avainpisteregressorit yleensä paranevat. BlazeFace-, BlazePalm-, FaceLandmarks- ja HandLandmarks-esimerkit vaativat nyt manuaalisen neliörajauksen syöte-ROI:lle — esimerkkiskriptit päivitettiin; mukautetun käyttäjäkoodin on tehtävä sama.
Commit: 68dc29a33
ml.utils.mod()-aputoiminto poistettu
ulab 6.12.0 tukee %:ää ndarray-taulukoilla natiivisti. Koodin, joka toi mod:n ml.utils:sta, on käytettävä a % b:tä.
Rakennus / työkalut (tooling)¶
Mikään tästä ei vaikuta MicroPython-skripteihin. Laiteohjelmiston rakentaminen lähdekoodista vaatii nyt ulkoisen OpenMV SDK:n (1.6.0, aiemmin puurakenteessa). Useita puunsisäisiä rakennustyökaluja poistettiin ja N6 siirtyi TinyUSB-pinoon; johdettujen haarojen tulisi tarkistaa laiteohjelmistorepositorion historia — erityisesti file_open()-allekirjoitus, joka pudotti buffered-argumenttinsa.
Siirtymän tarkistuslista¶
Puhtaaseen v5.0.0-siirtoon tyypillinen työ on:
Korvaa
import sensormuodollaimport csi; csi0 = csi.CSI()ja käännä jokainenset_*-/get_*-kutsu sencsi.CSI-käyttömenetelmäksi (csi-siirtymä).Kääri koordinaattiargumentit metodeille
img.draw_*,get_pixel()jaset_pixel()monikkoihin (image-moduulin muutokset).Pudota
()attrtuple-tulosten käyttömenetelmistä, jos haluat uuden idiomaattisen muodon, tai jätä vanha tyyli ennalleen, koska attrtuplet tukevat edelleen kutsuttavia käyttömenetelmiä (image-moduulin muutokset).Tarkasta
find_line_segments(),get_regression()ja kaikkifind_apriltags()-perhevalinnat (image-moduulin muutokset).Nimeä
timer_ms→poll_msuudelleenprotocol.init()-kutsuissa; poistaprotocol.poll()jasoft_reboot=(protocol-moduulin muutokset).ML-työnkuluissa: tarkastele uudelleen jokaista mallia, joka tarvitsi letterbox-täytettyä syötettä (ML-kirjaston muutokset).