v5.0.0

A v5.0.0 egy jelentős kiadás. A fő újdonságok: az újraépített OpenMV Protocol V2 host-kapcsolat, egy osztályalapú csi kamera API, amely a több kamerás kártyákra is jól skálázódik, egy futtatható szimulátor célplatform, a MoveNet egyalakos póz-becslés, a MicroPython 1.28, valamint kamera-, ML- és ToF-javítások nagy adagja. Számos visszafelé nem kompatibilis API-változást is hoz — minden, a felhasználó számára látható változás a v4.8.1 óta alább szerepel, azzal együtt, hogy pontosan hogyan kell migrálni.

Kiemelt újdonságok

  • OpenMV Protocol V2. A host/IDE kapcsolat alapjaiból lett újraépítve: keretezett, sorszámozott, CRC-vel ellenőrzött, multiplexelt csatornákkal a stdio, a stream-előnézet és a felhasználói adatok számára. Egy új protocol modul lehetővé teszi, hogy a szkriptek saját transzportokat és adatcsatornákat hozzanak létre. Lásd a protocol modul változásait.

  • Osztályalapú csi kamera API. Az import sensor helyébe az import csi / csi.CSI lép, natív több kamerás támogatással. Lásd a csi migrációt.

  • Szimulátor célplatform. A firmware mostantól lefordítható és futtatható az Arm FVP / QEMU szimulátor alatt (MPS2/MPS3), beleértve az NPU, ROMFS és PSRAM emulációt is — a gépi látás és ML szkriptek hardver csatlakoztatása nélkül is futtathatók.

  • MoveNet póz-becslés. Egy új MoveNet utófeldolgozó, valamint egy mellékelt movenet_singlepose_192.tflite modell az OpenMV AE3 és N6 kártyákon.

  • MicroPython 1.28 és ulab 6.12.0, ST Edge AI 4.0 eszközkészlet, valamint a külső csomaggá tett OpenMV SDK (lásd a build- / eszközkészlet-változásokat).

Új funkciók

  • A protocol modul — egyéni transzportok és adatcsatornák létrehozása Pythonból: protocol.init(), protocol.register(), protocol.is_active(), valamint egy protocol.ProtocolChannel osztály a send_event() metódussal, továbbá CHANNEL_FLAG_* és CHANNEL_ID_* konstansok. A protocol.init() végleges szignatúráját a protocol modul változásai dokumentálják.

  • protocol.CBORChannel — egy befagyasztott protocol bővítménycsomag, amely a megnevezett mezőket CBOR formátumba szerializálja megjelenítő widgetekkel (címke, mélység) és interaktív vezérlőkkel (kapcsoló, csúszka, választó).

  • Host memória- és stream-vizsgálat — egy új SYS_MEMORY protokollparancs poolonkénti futásidejű memóriastatisztikákat tár fel az IDE számára, egy új STREAM_SOURCE stream ioctl pedig lehetővé teszi, hogy a host kiválassza, melyik kamera táplálja az előnézetet a több kamerás kártyákon (protokollverzió 1.0.1).

  • Több kamerás streamelés — a csi.CSI egy stream= argumentumot fogad, amely kiválasztja, melyik érzékelő táplálja az IDE előnézetét; a stream képkocka-fejléce mostantól egy EMA-val simított FPS-értéket is hordoz, így az IDE a clock.fps() sablonkód nélkül is megmutatja a képkockasebességet. Lásd a csi migrációt és a csi utólagos módosításait.

  • GenX320 eseményérzékelő — egy új Spatio-Temporal Contrast szűrő (csi.IOCTL_GENX320_SET_STC a csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY és csi.GENX320_STC_TRAIL módokkal) és nyers eseményolvasás (csi.IOCTL_GENX320_READ_EVENTS_RAW), új példaszkriptekkel.

  • MoveNet — egy új MediaPipe egyalakos póz-utófeldolgozó (threshold, nms_threshold, nms_sigma kulcsszavas argumentumokkal), amely ((x, y, w, h), score, keypoints) értéket ad vissza egy 17 ízületes COCO kulcspont-tömbbel; egy movenet_singlepose_192.tflite modell és példa van mellékelve az AE3 és N6 kártyákon.

  • ml.utils.draw_predictions() — egy új, opcionális scores= argumentum címkénkénti megbízhatóságot fűz hozzá, a betűtípus és a doboz vonalvastagsága mostantól automatikusan a kép szélességéhez igazodik, egy új format="point" mód pedig középponti jelölőt rajzol a középpont/csúcs detektorokhoz.

  • Az új display.TVDisplay osztály (egy általános ioctl() metódussal) felváltja a különálló tv modult. Lásd a display modul változásait.

  • Egy új find_line_segments() detektor (ED-Lines) — mostantól minden buildben elérhető, egy új threshold= argumentummal. Lásd az image modul változásait.

Egyéb változások és fejlesztések

  • A MicroPython 1.28.0-ra frissült a v4.8.1 alaphoz képest. Hozzáadja a nagy sebességű SD-kártya módot a H5/H7/N6 kártyákon, az AHB5 órajelet kis fogyasztású módban, valamint a vezérelhető JTAG lábakat GPIO-ként az OPENMV_AE3-on.

  • Az ulab 6.12.0-ra frissült — natív % operátor ndarray-eken (a ml.utils.mod() segédfüggvény eltávolításra került; lásd az ML könyvtár változásait).

  • Az ST Edge AI eszközkészlet 4.0-ra frissült — érinti az eszközön történő ST modell-fordítást és -telepítést.

  • ml.Model — a load_to_fb kulcsszavas argumentum eltávolításra került; a modell memóriáját automatikusan az egységes allokátor kezeli.

  • image.Image.scale() helyben — egy kép helyben történő felnagyítása (például img.scale(x_scale=2.0, y_scale=2.0)) mostantól a képkocka-puffert is megnöveli, hogy elférjen, hibázás helyett.

  • Nagyobb stdio puffer — az IDE-hez irányuló alapértelmezett szöveges puffer 512-ről 1024 bájtra nőtt az OpenMV 2/3/4, Nicla Vision, AE3 és N6 kártyákon, így a nagyobb print() kitörések nem csonkolódnak.

  • Simább host-eseményfolyam — a host felé irányuló stdout NOTIFY események hostonkénti olvasásonként legfeljebb egyre vannak fojtva, ahelyett, hogy minden print() hívásnál egy keletkezne, amely átlépi a gyűrűpuffer vízszintjelzőjét.

  • Megszakítható hosszú műveletek — a hosszú képrajzolási, GPU- (Nema/Dave2D) és NPU-várakozási ciklusok mostantól determinisztikus időközönként kiszolgálják az eseményeket, így a szkriptek nehéz munka közben is reagálnak az IDE Stop gombjára.

Hibajavítások

Kamera és érzékelők:

  • find_apriltags() többé nem rontja el az eredményeket a D-cache/GPU kártyákon (N6, AE3), és mostantól működik az AE3-on is.

  • Javítva a Bayer képkimenet a STM32 N6 ISP-ből a képpontformátumok váltása után.

  • Javítva a zöld automatikus fehéregyensúly-kifehéredés a fényes jeleneteknél és egy inicializálatlan első képkocka AWB-statisztika eset; megemelve a STM32 ISP gamma-korlát (32-ről 63-ra) a szélesebb gamma/kontraszt/fényerő tartományért.

  • A PS5520 automatikus expozíciója többé nem oszcillál erős fényben; a PAG7936 AEC/AGC viselkedése át lett dolgozva (kombinált vezérlés, javított erősítési felső határ).

  • Az OV5640 autofókusz firmware-feltöltése helyreállítva a Portenta/Nicla kártyákon (MIMXRT I2C SUSPEND javítás).

  • Javítva egy kamera-felvételi holtpont, amikor a képkockasebesség-korlát JPEG felvétellel kombinálódik (STM32).

  • A GenX320 csi.IOCTL_GENX320_READ_EVENTS_RAW olvasásai többé nem zavarják össze az IDE előnézetet.

  • A FLIR Lepton csi.IOCTL_LEPTON_SET_MODE a csi.CSI.ioctl() metóduson keresztül mostantól működik, amikor egyetlen argumentummal hívják meg.

Képfeldolgozás:

  • Javítva a draw_image() / blend() alfa-keverés, amikor maszk van megadva.

  • Javítva az 1 bites (BINARY) PNG kódolás/dekódolás bitsorrendje és a szürkeárnyalatos-1-bitből történő dekódolás.

  • Javítva a mjpeg.Mjpeg felvétel időtartam-/FPS-metaadata.

  • Javítva egy szoftveres JPEG-dekódolási veremtúlcsordulás a kis veremű kártyákon (OpenMV M7).

  • Javítva a JPEG/PNG fájlformátum automatikus felismerése a nem-ARM hosztokon (szimulátor).

Time-of-Flight:

  • A tof.read_depth() többé nem dob kivételt átmeneti távolságmérési hibáknál, és automatikusan helyreáll a buszhibákból; az alapértelmezett tof.read_depth() / tof.snapshot() időtúllépés mostantól 100 ms (lásd a tof változásait).

  • Javítva a VL53L5CX / VL53L8CX több zónás mélységi adatok sérülése.

ML és rendszer:

  • Az NPU helyesen kerül tisztításra, amikor a következtetés megszakad az N6-on.

  • A mélyalvásból / készenlétből való ébredés helyreállítva az N6-on; az AE3 rendszerbetöltőre ugrási lefagyása javítva.

  • Javítva a memóriaszivárgások szoftveres újraindításkor (STM32 Nema GPU) és egy idő előtt begyűjtött kiegészítő képkocka-puffer.

  • Az egyéni Python protokollcsatornák mostantól túlélik a szoftveres újraindítást, az USB transzport helyreáll a buszreset / elakadt végpontok után, és az USB SOF megszakítás-elárasztás javítva van.

Hardver- és kártyatámogatás

  • OpenMV N6 — Ethernet engedélyezve (vezetékes hálózat); az NPU AXI SRAM (1,75 MB) egy megosztott átmeneti poolba lett összevonva, hogy több RAM legyen a következtetések között; mélyalvásból/készenlétből való ébredés; mellékelt TFLite modellek és Haar kaszkádok a ROMFS-ben.

  • OpenMV AE3 — mellékelt modellek és kaszkádok a ROMFS-ben; a cbor2 befagyasztva a firmware-be.

  • Alif (AE3, N6) — kis fogyasztású machine.RTC ébresztés.

  • Nagy felbontású AprilTag-ek — teljes érzékelő-felbontású find_apriltags() az AE3, az Arduino Giga és az Arduino Portenta H7 kártyákon.

  • Szimulátor célplatformok — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), NPU, ROMFS és PSRAM emulációval.

Visszafelé nem kompatibilis API-változások

A felhasználó számára látható API-törések a v4.8.1 és a v5.0.0 között. Hatókör: Python C-modulok a modules/ mappában és Python könyvtárak a scripts/libraries/ mappában.

Minden változás meg van jelölve a hatásával:

  • major — a legtöbb szkript szerkesztést igényel.

  • minor — szűk API; csak az azt használó szkripteket érinti.

  • behavior — ugyanaz az API, eltérő eredmények; ellenőrizd újra a finomhangolt szkripteket.

  • tooling — csak a forrásból történő fordítást / downstream forkokat érinti.

A változások hatás szerint vannak csoportosítva ebben a sorrendben — előbb a major, majd a minor, behavior és tooling. Ha csak portolni szeretnéd a kódodat, ugorj a migrációs ellenőrzőlistához a végén egy tömör teendőlistáért. Minden commit-hash a GitHubon lévő diffjére hivatkozik.

A sensor helyét a csi veszi át (major)

Minden hivatalos példa át lett írva, hogy az import sensor helyett az import csi szerepeljen. A régi, modulszintű funkcionális API-t (sensor.reset(), sensor.set_pixformat(), …) az osztályalapú csi.CSI API váltja fel, amely természetesen skálázódik a több kamerás kártyákra (csi0, csi1, …), és minden új funkcióhoz szükséges (a stream= kulcsszavas argumentum, a több érzékelős streamelés, …).

A sensor qstr még mindig be van kötve a modules/py_csi.c fájlban a visszafelé kompatibilis firmware-buildek érdekében, de nem fog új funkciókat kapni, és minden példa, dokumentáció és könyvtári kód mostantól a csi modult feltételezi.

Commitok: 945c5853c, 61f835b7e

Modulból osztály

Korábban (sensor):

import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()

Mostantól (csi):

import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()

A setter/getter párok kombinált hozzáférőkbe összevonva

Az új API-ban egy argumentumok nélkül hívott metódus visszaadja az aktuális értéket; egy értékkel meghívva beállítja azt. A set_*/get_* előtagok megszűntek. A metódusnevek az ing utótagot is elvesztették ott, ahol az felesleges volt (windowingwindow). Az új API oszlop a referencia-dokumentációra hivatkozik.

sensor (régi)

csi.CSI (új)

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

Közvetlen megfelelő nélküli függvények

sensor (eltávolítva)

Mit használj helyette

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

image.Image (w, h, pixfmt) — egy szokásos, halomban allokált kép. A képkocka-puffer többé nem kerül felszabdalásra felhasználói pufferek számára.

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

csi.CSI.snapshot() — a képkocka-átugrás beépült a snapshot metódusba a time= / frames= argumentumokon keresztül.

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

Átkerült a csi.CSI konstruktorába: csi.CSI(delays=False) / csi.CSI(fflush=False).

sensor.get_frame_available()

csi.CSI.readable()

sensor.get_fb()

Eltávolítva. A csi.CSI.snapshot() által visszaadott kép a kanonikus fogantyú.

sensor.set_framebuffers(n, expand=True)

csi.CSI.framebuffers() — az expand argumentum eltávolításra került (lásd a csi utólagos módosításait).

Új a csi.CSI osztályon

  • csi.CSI(stream=True|False) — egy létrehozáskori választó, amely kiválasztja, melyik CSI táplálja az előnézeti képkocka-puffert (felváltja a pillanatképenkénti update= kulcsszavas argumentumot, lásd a csi utólagos módosításait).

  • csi.CSI(cid=N) / csi.devices() — több-CSI támogatás az egynél több képérzékelővel rendelkező kártyák számára.

Az image modul — szignatúra-átdolgozás (major)

Az image modult érintette a legszélesebb körű API-változás a csi után — a rajzolási szignatúrák, az eredményobjektumok és több detektor is megváltozott.

A koordináta-argumentumoknak tuple-nak kell lenniük

A modules/py_image.c az mp_arg_parse_all tetejére lett újraírva. Minden rajzolási / képpont-metódus, amely korábban külön x, y, ... pozicionális argumentumokat fogadott, mostantól megköveteli, hogy ezek a koordináták egyetlen tuple-ba legyenek csomagolva.

Commitok: d18bbc472, 0c60c94b9 (PR #3061)

Korábban

Mostantól

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)

Mind az image.Image metódusai.

Az eredményobjektumok attrtuple-lé alakítva

Ezek a típusok mostantól MicroPython attrtuple objektumok: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. A zárójelek nélküli attribútum-hozzáférés most már a kanonikus forma.

Commit: 3399d302e

Korábban (metódus-stílus):

img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())

Mostantól (attribútum-stílus):

img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)

A blob és a histogram változatlan — megtartják a meglévő típusukat és a () hozzáférőiket (egy attrtuple nem tudja kifejezni egy folt lustán kiszámított értékeit vagy egy hisztogram argumentumot fogadó hozzáférőit).

A find_features haar paraméterének átnevezése

image.Image.find_features() — a scale_factor= átnevezve scale=-re.

Commit: be4c5cd73

get_regression — mostantól mindig robusztus, target_size hozzáadva

image.Image.get_regression() mostantól mindig a robusztus (Theil-Sen) regressziót használja. A régi, gyors legkisebb négyzetek útvonal eltávolításra került, így a robust= kulcsszó megszűnt — ami korábban robust=True-t igényelt, most az egyetlen viselkedés. Egy új target_size=(w, h) kulcsszavas argumentum (alapértelmezett (80, 60)) területileg lekicsinyíti a ROI-t az O(N^2) Theil-Sen illesztés előtt, hogy az mindig értelmes képméreten fusson; az illesztett vonal végpontjai visszavetülnek a forráskoordinátákra. A linear_regression_robust.py példa törölve, a linear_regression_fast.py pedig átnevezve linear_regression.py-ra.

Commitok: c7c2e69a0, 0ff2afa72

find_line_segments — új algoritmus

image.Image.find_line_segments() — a régi LSD detektort az ED-Lines váltotta fel, és egy új threshold=50 kulcsszavas argumentumot kapott. A korábban finomhangolt szkriptek kimenete eltérő lesz.

Commitok: 87da2a7b7, 2c47b5735

Az AprilTag könyvtár cseréje

image.Image.find_apriltags() — az AprilTag detektort egy új implementáció váltotta fel. A családkészlet megváltozott:

Commit: e813bada7

A csi modul utólagos módosításai (minor)

Kisebb csi utólagos módosítások a csi migráció tetejére építve.

A snapshot(update=…) eltávolítva

Az update kulcsszavas argumentum a csi.CSI.snapshot() metóduson megszűnt. Ahhoz, hogy egy CSI eszköz ne táplálja az előnézeti képkocka-puffert, létrehozáskor mondj le róla:

csi0 = csi.CSI(stream=False)                  # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img)  # was: ...(update=False, ...)

Commitok: 9a8077827, 26b79a2c5

A framebuffers() expand argumentuma eltávolítva

csi.CSI.framebuffers() — a harmadik pozicionális argumentum (expand) megszűnt; a szignatúra mostantól framebuffers([count]).

Commit: 86cb3a5de

A protocol modul (minor)

Csak azokat a szkripteket érinti, amelyek közvetlenül vezérelték a host-kapcsolatot. Lásd protocol.

A timer_ms átnevezve poll_ms-re

protocol.init() — a timer_ms argumentum átnevezve poll_ms-re.

protocol.init(..., poll_ms=10)   # was: timer_ms=10

Commitok: 8a0635e8c, 95a290607

A protocol.poll() eltávolítva

A protokollfeladat mostantól belsőleg van ütemezve. A protocol.poll() hívásai AttributeError hibát fognak dobni.

Commit: 8a0635e8c

A soft_reboot konfigurációs argumentum eltávolítva

protocol.init() — a soft_reboot argumentum megszűnt. Minden jelenlegi transzport tolerálja a szoftveres újraindítást, így a viselkedés mostantól feltétel nélküli.

Commit: 0bf766aa2

display modulok (minor)

A TV-kimenet mostantól egy display.TVDisplay objektumon keresztül megy, a különálló tv modul helyett. A display egy általános ioctl() metódust is kapott.

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

A tof modul (behavior)

Ugyanaz az API, mint korábban; az alapértelmezések és a hibakezelés megváltozott. Lásd tof.

Az alapértelmezett időtúllépés megváltozott

A tof.read_depth() és a tof.snapshot() (timeout=-1 értékkel hívva) mostantól 100 ms-ot használ alapértelmezettként a végtelen várakozás helyett. Adj át egy explicit nagyobb értéket, ha a régi viselkedésre van szükséged.

Commit: b6772b80d

Automatikus helyreállítás

A driver mostantól keményen resetelni az I2C buszt és az érzékelőt a távolságmérési/időtúllépési hibáknál. A példák már nem hívják meg a tof.reset() függvényt a kivételkezelőikben — a kézi helyreállítást végző felhasználói kódból ezt el kell távolítani (mert harcolni fog az új automatikus helyreállítással).

Commitok: b6772b80d, 80ffaa5c3

ML könyvtár (behavior)

Ugyanaz az API, eltérő számok — ellenőrizz újra minden finomhangolt ML pipeline-t.

Az előfeldolgozás mostantól nyújt a letterbox helyett

A Normalization mostantól a image.SCALE_ASPECT_IGNORE (nyújtás) értéket használja a image.SCALE_ASPECT_EXPAND (letterbox) helyett. A NMS utófeldolgozás szintén független x/y skálázásra váltott.

Megjegyzés

Hatás. A YOLO-stílusú detektorok és kulcspont-regresszorok általában javulnak. A BlazeFace, BlazePalm, FaceLandmarks és HandLandmarks példák mostantól kézi négyzetes kivágást igényelnek a bemeneti ROI-n — a példaszkriptek frissítve lettek; az egyéni felhasználói kódnak ugyanezt kell tennie.

Commit: 68dc29a33

Az ml.utils.mod() segédfüggvény eltávolítva

Az ulab 6.12.0 natívan támogatja a % operátort ndarray-eken. A kódnak, amely a mod függvényt importálta az ml.utils modulból, az a % b formát kell használnia.

Commitok: 35ece5728, 82fbd858c

Build / eszközkészlet (tooling)

Ezek egyike sem érinti a MicroPython szkripteket. A firmware forrásból történő fordítása mostantól a külső OpenMV SDK-t igényli (1.6.0, korábban a forrásfában volt). Több forrásfán belüli build-eszköz eltávolításra került, és az N6 átállt a TinyUSB stackre; a downstream forkoknak át kell tekinteniük a firmware repository előzményeit — nevezetesen a file_open() szignatúráját, amely elhagyta a buffered argumentumát.

Migrációs ellenőrzőlista

Egy tiszta v5.0.0-ra portoláshoz a tipikus munka a következő:

  1. Cseréld le az import sensor-t import csi; csi0 = csi.CSI()-re, és fordíts le minden set_*/get_* hívást a megfelelő csi.CSI hozzáférőjére (a csi migráció).

  2. Csomagold tuple-ba az img.draw_*, a get_pixel() és a set_pixel() koordináta-argumentumait (az image modul változásai).

  3. Hagyd el a ()-t az attrtuple eredmény-hozzáférőkről, ha az új idiomatikus formát szeretnéd, vagy hagyd a régi stílust változatlanul, mivel az attrtuple-ök továbbra is támogatják a hívható hozzáférőket (az image modul változásai).

  4. Auditáld a find_line_segments(), a get_regression() és bármely find_apriltags() család-választást (az image modul változásai).

  5. Nevezd át a timer_ms-t → poll_ms-re a protocol.init() hívásokban; távolítsd el a protocol.poll()-t és a soft_reboot=-ot (a protocol modul változásai).

  6. ML munkafolyamatokhoz: tekintsd át újra minden olyan modellt, amely letterboxolt bemenetet igényelt (az ML könyvtár változásai).