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 sensor muuttuu muotoon import 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 toimitettava movenet_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

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.Modelload_to_fb-avainsana-argumentti poistettiin; mallin muisti käsitellään automaattisesti yhtenäisellä varaajalla.

  • image.Image.scale() paikallaan — kuvan skaalaus suuremmaksi paikallaan (esimerkiksi img.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_MODE csi.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; oletusaikakatkaisu tof.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ä; cbor2 jää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 (windowingwindow). Uuden rajapinnan sarake linkittää viitedokumentteihin.

sensor (vanha)

csi.CSI (uusi)

set_pixformat(fmt) / get_pixformat()

pixformat([fmt])

set_framesize(sz) / get_framesize()

framesize([sz])

set_framerate(fps) / get_framerate()

framerate([fps])

set_windowing(roi) / get_windowing()

window([roi])

set_framebuffers(n) / get_framebuffers()

framebuffers([n])

set_gainceiling(g)

gainceiling([g])

set_brightness(v)

brightness([v])

set_contrast(v)

contrast([v])

set_saturation(v)

saturation([v])

set_quality(v)

quality([v])

set_colorbar(b)

colorbar([b])

set_special_effect(e)

special_effect([e])

set_lens_correction(...)

lens_correction(...)

set_hmirror(b) / get_hmirror()

hmirror([b])

set_vflip(b) / get_vflip()

vflip([b])

set_transpose(b) / get_transpose()

transpose([b])

set_auto_rotation(b) / get_auto_rotation()

auto_rotation([b])

set_auto_gain(b, [db, ceiling]) / get_gain_db()

auto_gain(...) / gain_db()

set_auto_exposure(b, [us]) / get_exposure_us()

auto_exposure(...) / exposure_us()

set_auto_whitebal(b, [rgb]) / get_rgb_gain_db()

auto_whitebal(...) / rgb_gain_db()

set_auto_blc(b, [regs]) / get_blc_regs()

auto_blc(...) / blc_regs()

set_color_palette(p) / get_color_palette()

color_palette([p])

set_frame_callback(cb)

frame_callback(cb)

set_vsync_callback(cb)

vsync_callback(cb)

get_id()

cid()

Funktiot ilman suoraa vastinetta

sensor (poistettu)

Mitä käyttää sen sijaan

sensor.alloc_extra_fb(w, h, pixfmt) / sensor.dealloc_extra_fb()

image.Image (w, h, pixfmt) — tavallinen keosta varattu kuva. Kehyspuskuria ei enää pilkota käyttäjän puskureiksi.

sensor.skip_frames(time=..., frames=...)

csi.CSI.snapshot() — kehysten ohitus sulautettu snapshot:iin sen time=-/frames=-argumenttien kautta.

sensor.disable_delays(...) / sensor.disable_full_flush(...)

Siirretty csi.CSI-konstruktoriin: csi.CSI(delays=False) / csi.CSI(fflush=False).

sensor.get_frame_available()

csi.CSI.readable()

sensor.get_fb()

Poistettu. csi.CSI.snapshot():n palauttama kuva on kanoninen kahva.

sensor.set_framebuffers(n, expand=True)

csi.CSI.framebuffers()expand-argumentti poistettiin (katso csi-jatkotoimet).

Uutta csi.CSI:ssä

  • csi.CSI(stream=True|False) — rakennusajan valitsin, joka valitsee, mikä CSI syöttää esikatselun kehyspuskuria (korvaa tilannekuvakohtaisen update=-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

img.draw_arrow(x0, y0, x1, y1, color=...)

img.draw_arrow((x0, y0, x1, y1), color=...)

img.draw_line(x0, y0, x1, y1, ...)

img.draw_line((x0, y0, x1, y1), ...)

img.draw_cross(x, y, ...)

img.draw_cross((x, y), ...)

img.draw_circle(x, y, r, ...)

img.draw_circle((x, y, r), ...)

img.draw_rectangle(x, y, w, h, ...)

img.draw_rectangle((x, y, w, h), ...)

img.draw_string(x, y, "txt", ...)

img.draw_string((x, y), "txt", ...)

img.draw_ellipse(x, y, rx, ry, rot, ...)

img.draw_ellipse((x, y, rx, ry, rot), ...)

img.flood_fill(x, y, ...)

img.flood_fill((x, y), ...)

img.get_pixel(x, y, rgbtuple=...)

img.get_pixel((x, y), rgbtuple=...)

img.set_pixel(x, y, color)

img.set_pixel((x, y), color)

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:

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.

Commitit: f0accb389, 1a5a87121, 920c097a0, 9eac55098

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).

Commitit: b6772b80d, 80ffaa5c3

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ä.

Commitit: 35ece5728, 82fbd858c

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:

  1. Korvaa import sensor muodolla import csi; csi0 = csi.CSI() ja käännä jokainen set_*-/get_*-kutsu sen csi.CSI-käyttömenetelmäksi (csi-siirtymä).

  2. Kääri koordinaattiargumentit metodeille img.draw_*, get_pixel() ja set_pixel() monikkoihin (image-moduulin muutokset).

  3. 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).

  4. Tarkasta find_line_segments(), get_regression() ja kaikki find_apriltags()-perhevalinnat (image-moduulin muutokset).

  5. Nimeä timer_mspoll_ms uudelleen protocol.init()-kutsuissa; poista protocol.poll() ja soft_reboot= (protocol-moduulin muutokset).

  6. ML-työnkuluissa: tarkastele uudelleen jokaista mallia, joka tarvitsi letterbox-täytettyä syötettä (ML-kirjaston muutokset).