13.3.1.6. API-referencia¶
Az openmv csomag nyilvános felülete a kamerával való kommunikációhoz használt Camera osztály, valamint a protokollhibákat kezelő OMVException hierarchia. Mindkettőt ez az oldal dokumentálja.
13.3.1.6.1. A Camera osztály¶
- class openmv.Camera(port: str, *, baudrate: int = 921600, crc: bool = True, seq: bool = True, ack: bool = True, events: bool = True, timeout: float = 1.0, max_retry: int = 3, max_payload: int = 4096, drop_rate: float = 0.0)¶
A USB-soros kapcsolaton keresztül elért OpenMV kamera gazdagép oldali proxyja.
- Paraméterek:
port – A soros eszköz elérési útja. Linuxon
/dev/ttyACMxa USB CDC esetén, és/dev/ttyUSBxa USB-UART híd esetén. macOS-en/dev/tty.usbmodem...vagy/dev/cu.usbmodem.... WindowsonCOMx.baudrate – Soros átviteli sebesség (baud). USB felett a
921600az a varázsérték, amely a kamerát a MicroPython REPL-ből az OpenMV protokollra váltja – bármilyen más érték USB-kapcsolaton REPL módban hagyja a kamerát, ezért az alapértelmezett értéket kell használni. UART-kapcsolaton az érték a tényleges vonali átviteli sebesség, és mindkét oldalon szabadon beállítható.crc – CRC-ellenőrzés engedélyezése minden csomagon.
seq – Csomagonkénti sorszámok engedélyezése.
ack – Csomag-nyugtázás megkövetelése.
events – Eseményértesítések engedélyezése a kamerától.
timeout – Műveletenkénti időtúllépés másodpercben.
max_retry – Az újrapróbálkozások száma, mielőtt egy sikertelen csomag kivételt vált ki.
max_payload – A maximális egyeztetett hasznosteher-méret bájtban. A kamera lefelé is egyeztethet.
drop_rate – Csak teszteléshez: a csomageldobás valószínűsége,
[0.0, 1.0]tartományban. Éles használatban hagyd0.0értéken.
Az osztály támogatja a kontextuskezelő protokollt; a
with Camera(port) as cam:belépéskor meghívja aconnect(), kilépéskor pedig adisconnect()metódust.
13.3.1.6.2. Kapcsolat¶
- Camera.connect() None¶
A soros port megnyitása és a protokoll-kézfogás végrehajtása. A gyorsítótárazott állapot (csatornalista, rendszerinformációk, verzióinformációk) mellékhatásként feltöltődik. A kontextuskezelő automatikusan meghívja.
- Camera.disconnect() None¶
A soros port lezárása és a transzport felszabadítása. A kontextuskezelő kilépésekor automatikusan meghívódik.
- Camera.reset() None¶
A kamera alaphelyzetbe állítása. A kapcsolat megszakad, mert a kamera újraindul.
- Camera.boot() None¶
A kamera átléptetése a rendszerbetöltőjébe. A kapcsolat megszakad, mert a kamera újraindul.
- Camera.update_capabilities() None¶
A protokollképességek (CRC, sorszám-ellenőrzés, ACK-k, események, maximális hasznosteher) újraegyeztetése a kamerával. A kamera jelenti a maximálisan kezelhető hasznosterhet; a gazdagép kérése erre van levágva, és az egyeztetett beállítások visszatöltődnek. A
connect()automatikusan meghívja – nincs ok arra, hogy felhasználói kódból hívd, hacsak nem kell a konstruktor jelzőit egy meglévő kapcsolaton újraegyeztetni.
- Camera.poll_events() None¶
A transzport fogadási útvonalának egyszeri lefuttatása a kamerától érkező függőben lévő események feldolgozásához, parancs küldése nélkül. Hasznos hosszan futó programokban, amelyek percekig más I/O nélkül futnak, és gyorsan szeretnék felszínre hozni a csatornaregisztrációs eseményeket.
13.3.1.6.3. Szkriptvégrehajtás¶
13.3.1.6.4. Streamelés¶
- Camera.streaming(enable: bool, raw: bool = False, resolution: tuple[int, int] | None = None) None¶
A képkocka-stream be- vagy kikapcsolása, valamint a vonali formátum kiválasztása.
- Paraméterek:
enable –
Trueengedélyezi a streamelést,Falseletiltja azt.raw – Amikor
False(alapértelmezett), a kamera minden képkockát JPEG-tömörít, mielőtt a stream-csatornába helyezné, és aread_frame()a gazdagépen kitömöríti. AmikorTrue, a kamera a rögzített képpontpuffert tömörítetlenül küldi – ez a helyes választás hardveres JPEG-támogatás nélküli kamerákon, ahol a szoftveres tömörítés a ciklus leglassabb lépése.resolution – A
(width, height)célméret, amelyre a kamera minden nyers képkockát lekicsinyít küldés előtt, mivel a tömörítetlen képkockák sokkal nagyobbak a JPEG-tömörítetteknél. Kötelező, haraw=True; egyébként figyelmen kívül marad.
- Camera.read_frame() dict | None¶
A legutóbbi képkocka kiolvasása a stream-csatornából.
- Visszatérési érték:
None, ha nincs várakozó képkocka, vagy egy dict a következő kulcsokkal:width(int, képpontban),height(int, képpontban),format(int, a kamera által deklarált képpontformátum-azonosító),depth(int, a tömörített kép mérete bájtban JPEG / PNG képkockáknál; tömörítetlen formátumoknál nem használt),data(bytes, RGB888width * height * 3hosszúságban), ésraw_size(int, a kamera által USB-n keresztül a dekódolás előtt küldött bájtok száma).
13.3.1.6.5. Egyéni csatornák¶
- Camera.has_channel(name: str) bool¶
- Visszatérési érték:
True, ha a kamerán léteziknamenéven regisztrált csatorna.
- Camera.channel_size(name: str) int¶
- Visszatérési érték:
A megnevezett csatornán jelenleg elérhető bájtok száma, vagy
0, ha a csatorna üres vagy nem létezik.
- Camera.channel_read(name: str, size: int | None = None) bytes | None¶
Olvasás egy egyéni csatornáról.
- Camera.channel_write(name: str, data: bytes) bool¶
A
datakiírása egy egyéni csatornára. A hasznosterhelnél nagyobb írások automatikusan több csomagra bomlanak.- Paraméterek:
name – A kamera oldali szkript által regisztrált csatornanév.
data – A küldendő bájtszerű hasznosteher.
- Visszatérési érték:
True, ha a csatorna létezik és az írás elküldésre került, egyébkéntFalse.
- Camera.read_status() dict[str, bool]¶
Minden regisztrált csatorna lekérdezése.
- Visszatérési érték:
Csatornanevet egy logikai „az adat olvasásra kész” értékhez rendelő dict.
- Camera.update_channels() None¶
A gyorsítótárazott csatornalista frissítése a kameráról. Automatikusan lefut a következő név szerinti csatornakeresésnél, miután csatornaregisztrációs esemény érkezett; egy alkalmazás, amely azonnal meg akar ismerni egy újonnan regisztrált csatornát, közvetlenül is meghívhatja ezt.
- Camera.get_channel(name: str | None = None, channel_id: int | None = None) int | str | None¶
Egy csatorna keresése vagy név alapján (a numerikus azonosítóját visszaadva), vagy azonosító alapján (a nevét visszaadva). Először frissíti a csatorna-gyorsítótárat a
update_channels()segítségével, ha csatornaregisztrációs események vannak függőben.- Paraméterek:
name – Az azonosítóvá feloldandó csatornanév.
channel_id – A névvé feloldandó csatornaazonosító.
- Visszatérési érték:
A megfelelő azonosító vagy név, vagy
None, ha a csatorna nem létezik. Anamevagy achannel_idegyikét meg kell adni.
13.3.1.6.6. Eszköz-introspektció¶
- Camera.version() dict¶
A kamera protokoll-, rendszerbetöltő- és firmware-verzió-hármasainak visszaadása. A
connect()után gyorsítótárazott. Minden hármas egy(major, minor, patch)inttuple:protocol_version– a kamera által megvalósított OpenMV vonali protokoll verziója.bootloader_version– a flash memóriában rezidens rendszerbetöltő-kép.firmware_version– a jelenleg futó MicroPython firmware.
- Camera.system_info() dict¶
A kamera hardverképesség- és memóriainformációinak visszaadása. A
connect()után gyorsítótárazott. A visszaadott dict kulcsai négy csoportba sorolhatók.Azonosítás
cpu_id– 32 bites CPU-azonosító.device_id– 32 bites szavak 3-as tuple-je, a szilíciumba égetett egyedi eszköz-sorozatszám.chip_id– 32 bites szavak 3-as tuple-je, csatornánként egy bejegyzés minden a kamerához csatlakoztatott képérzékelőre.usb_vid– USB gyártóazonosító.usb_pid– USB termékazonosító.
Memóriaméretek (mind kilobájtban)
flash_size_kb– a teljes belső flash memória.ram_size_kb– a teljes RAM.framebuffer_size_kb– a képrögzítésre fenntartott RAM.stream_buffer_size_kb– a képkockákat a gazdagéphez szállító stream-csatorna számára fenntartott RAM.
Képességjelzők (jellemzőnként egy logikai érték, mind
<feature>_presentnéven)gpu_present– grafikus feldolgozóegység.npu_present– neurális feldolgozóegység.isp_present– képjel-processzor.venc_present– videokódoló.jpeg_present– JPEG hardveres kódoló.dram_present– külső DRAM.crc_present– CRC-gyorsító.pmu_present– teljesítményfigyelő egység.wifi_present– Wi-Fi rádió.bt_present– Bluetooth rádió.sd_present– SD-kártya foglalat.eth_present– Ethernet PHY.multicore_present– több CPU-mag.
Egyéb
usb_highspeed– logikai érték,True, amikor az USB nagy sebességű (USB 2.0 HS, 480 Mbps) módban enumerálódott.pmu_eventcnt– az elérhető PMU eseményszámlálók száma;0, ha nincs PMU.
13.3.1.6.7. Diagnosztika¶
13.3.1.6.8. Profilozó¶
A profilozó függvényenkénti hívásszámlálókat, valamint minimális / maximális / teljes végrehajtási időket jelent a műszerezett firmware-modulokra – jelenleg az image, ml és ulab modulokra. A függvénybelépés és -kilépés fordítási időben kerül elfogásra; a futásidő mindkettőnél mintát vesz egy monoton mikroszekundumos számlálóról, függvényenként összegzi az eredményt, és a táblázatot a profile csatornán keresztül teszi elérhetővé a gazdagép számára.
A profilozó csak akkor épül be a firmware-be, ha a PROFILE_ENABLE=1 átadásra kerül a make parancsnak. A gyári firmware-képek nem tartalmazzák – a -finstrument-functions jelző, amelyet a build hozzáad a nyomon követett modulokhoz, nem elhanyagolható futásidejű többletterheléssel jár, ezért a profilozó buildek forrásból készülnek a konkrét hibakeresési munkamenethez, amelynek szüksége van rájuk. Ha a firmware nem ezzel a jelzővel készült, a profile csatorna nem regisztrálódik, és az ezen az oldalon szereplő minden profilozó-metódus csendben, művelet nélkül tér vissza.
Az Arm Performance Monitoring Unit (PMU) a Cortex-M55 hardveres számlálóblokkja – konfigurálható számlálók kis halmaza, amely ciklusszámokat, gyorsítótár-találatokat és -tévesztéseket, elágazási viselkedést és egyéb architektúra által definiált eseményeket követ nyomon a mért kód lassítása nélkül. Az ilyennel rendelkező kamerákon – az AE3 és az N6, az OpenMV kínálatában a két M55 köré épült kamera – a profilozó az időzítési adatok mellett ezeket a számlálókat is mintavételezi, és az eseményösszesítések megjelennek minden függvényenkénti rekordban. A PMU nélküli kamerák továbbra is előállítanak időzítési rekordokat; az eseménymezők nullaként térnek vissza, és a profiler_event() művelet nélküli.
- Camera.profiler_mode(exclusive: bool = False) None¶
Váltás az inkluzív és exkluzív időzítés között. Az inkluzív időzítés a meghívottak idejét a hívóra terheli; az exkluzív időzítés nem.
- Paraméterek:
exclusive –
Trueaz exkluzív időzítést választja,Falseaz inkluzívat.
- Camera.profiler_reset(config: list | None = None) None¶
Minden profilszámláló nullázása. A
config=Noneegyúttal visszaállítja az alapértelmezett PMU eseménykiosztást is.- Paraméterek:
config – Fenntartva a jövőbeli számlálónkénti konfigurációs felülbírálásokhoz. Add át a
Noneértéket az alapértelmezések megtartásához.
- Camera.profiler_event(counter_num: int, event_id: int) None¶
A PMU számlálóhelyeinek egyikét egy adott hardveres eseményhez köti.
- Paraméterek:
counter_num – Számlálóindex.
event_id – Architektúra által definiált eseményazonosító.
- Camera.read_profile() list[dict] | None¶
Az utolsó nullázás óta gyűjtött függvényenkénti profilrekordok visszaadása. Minden rekord egy dict a következő mezőkkel:
address,caller,call_count,min_ticks,max_ticks,total_ticks,total_cycles, valamint egyeventstuple, amelynek mérete a kamerapmu_eventcntértékéhez igazodik.- Visszatérési érték:
Rekord-dict-ek listája, vagy
None, ha a profilcsatorna nem elérhető, vagy nem gyűlt össze adat.
13.3.1.6.9. Alosztályok és csatorna-belső működés¶
A fentebb dokumentált metódusok lefedik a csomag minden gyakori használatát. Néhány minta – olyan kamera oldali események kezelése, amelyekre a gazdagép reagálni szeretne, egy csatorna zárolása többlépéses adatcseréhez, bájtfolyamok helyett strukturált adatot hordozó csatornákkal való kommunikáció, vagy csatornaspecifikus vezérlőparancsok meghajtása – olyan metódusokat igényel, amelyeket a Camera aláhúzással előtagozva tart. Ezek a nevek megállapodás szerint privátok (a Python nem végez rajtuk névelfedést), és az ezeket igénylő alkalmazásoktól elvárt, hogy vagy alosztályozzák a Camera-t, vagy közvetlenül hívják a metódusokat.
Alosztályozás eseményekre való reagáláshoz. A kamera által kibocsátott minden esemény a Camera._handle_event() metóduson keresztül érkezik. A Camera alosztályozása és a metódus felülírása az a mód, ahogyan egy alkalmazás reagál a kamera oldali szkriptje által kiváltott eseményekre; az Események oldal végigvezet a teljes mintán.
- Camera._handle_event(channel_id: int, event: int) None¶
Egy esemény feldolgozása a kameráról. A transzportréteg hívja meg, valahányszor eseménycsomag érkezik. Írd felül egy alosztályban alkalmazásspecifikus kezelés hozzáadásához; hívd meg a
super()._handle_event(...)-t az alapértelmezett viselkedés megtartásához (csatornalista-frissítésCHANNEL_REGISTEREDesetén, képkocka-készenlét követése astreamcsatornán,stdin-csatorna indítás / leállítás naplózása).- Paraméterek:
channel_id –
0rendszereseményekhez, egyébként a regisztrált csatornaazonosító.event – Eseményazonosító; az értékek rendszereseményeknél az
EventTypeenumból, csatornaeseményeknél pedig abból származnak, amit a kamera oldali csatorna-háttérrendszer választott.
Egy alosztály, amely saját protokoll-kommunikációs metódusokat ad hozzá, ezeket a retry_if_failed() dekorátorral kellene ellátnia, hogy örököljék ugyanazt az újraszinkronizálási és újrapróbálkozási viselkedést, amellyel ezen az oldalon minden szállított metódus rendelkezik.
- static Camera.retry_if_failed(func)¶
Dekorátor. Úgy csomagol be egy példánymetódust, hogy egyszer újrapróbálkozzon, amikor a transzport
ResyncExceptionkivételt vált ki. Minden olyan metódusnak, amely a_send_cmd_wait_resp()-be hív (közvetlenül vagy a_channel_*csomagolók egyikén keresztül), viselnie kell ezt a dekorátort:class MyCamera(Camera): @Camera.retry_if_failed def my_custom_command(self, payload): return self._send_cmd_wait_resp(Opcode.MY_CMD, 0, payload)
A csatornazárolás biztosítja, hogy a csatorna állapota ne változzon két kapcsolódó művelet között (például egy _channel_size() után egy _channel_read(), egy folyamatosan adatot hozzáfűző csatornán). A read_frame() és a read_profile() ezt belsőleg használja; egy egyéni csatornát többlépéses hozzáféréssel meghajtó alkalmazás ugyanígy jár el.
- Camera._channel_lock(channel_id: int) bool¶
Kizárólagos zár megszerzése egy csatornán. Az ugyanazon csatornán végzett egyéb gazdagép-műveletek blokkolódnak, amíg a zár fel nem szabadul.
- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.- Visszatérési érték:
True, amikor a zár megadásra került.
- Camera._channel_unlock(channel_id: int) bool¶
Egy korábban a
_channel_lock()segítségével felvett zár felszabadítása. Mindig zárhívással párosul; használjtry/finallyszerkezetet, hogy a feloldás akkor is megtörténjen, ha a közbeeső olvasás kivételt vált ki.- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.
Az alakzatos csatornák strukturált rekordokat hordoznak egyszerű bájtfolyam helyett. A profilozó-csatorna a szállított példa: alakzata (record_count, record_size), és egy gazdagép, amely tudni szeretné, hány rekord vár, a méret helyett az alakzatot olvassa.
- Camera._channel_shape(channel_id: int) tuple[int, ...]¶
Egy csatorna alakzat-leírójának kiolvasása.
- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.- Visszatérési érték:
Előjel nélküli 32 bites egész számok tuple-je, amely a csatorna elrendezését írja le. A jelentés csatornaspecifikus.
A csatornaspecifikus vezérlőparancsok – indítás, leállítás, nullázás, konfigurálás – egyetlen opkódon (CHANNEL_IOCTL) keresztül haladnak, egy csatornaspecifikus parancsszámmal és egy opcionális struct.pack hasznosteherrel. A szállított metódusok, mint a stop(), exec() és streaming(), vékony csomagolók a stdin és stream csatornák elleni _channel_ioctl() hívások körül; egy saját ioctl-menüt definiáló egyéni kamera oldali csatorna ugyanígy hajtható meg.
- Camera._channel_ioctl(channel_id: int, cmd: int, fmt: str | None = None, *args) bytes | None¶
Egy ioctl parancs kiadása egy csatornán.
- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.cmd – A kamera oldali csatorna-háttérrendszer által definiált parancsszám.
fmt – Opcionális
structformátum-karakterlánc az argumentum-tuple-höz. Add át aNoneértéket olyan ioctl-eknél, amelyek nem fogadnak argumentumot.args – A
fmt-nek megfelelő értékek.
- Visszatérési érték:
Bármilyen hasznosteher, amelyet a csatorna visszaadott, vagy
None.
A nyilvános csatornametódusok azonosító szerinti bájtfolyam-változatai kihagyják a név-azonosító keresést, és kifejezett bájt-offset értéket fogadnak – hasznos egy darab kiolvasásához egy nagy puffer közepéből (például a profile csatorna rekordjaiból).
- Camera._channel_size(channel_id: int) int¶
- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.- Visszatérési érték:
A csatornán jelenleg elérhető bájtok.
- Camera._channel_read(channel_id: int, offset: int, length: int) bytes¶
lengthbájt kiolvasása azoffsetpozíciótól kezdve. A több csomagból álló olvasások automatikusan újraösszeállnak.- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.offset – A bájtpozíció, ahonnan az olvasást kezdeni kell.
length – Az olvasandó bájtok száma.
- Camera._channel_write(channel_id: int, data: bytes, offset: int = 0) None¶
A
datakiírása a megadottoffsetpozícióban. A több csomagból álló írások automatikusan több csomagra bomlanak.- Paraméterek:
channel_id – Numerikus csatornaazonosító, jellemzően a
get_channel()segítségével feloldva.data – A kiírandó bájtszerű hasznosteher.
offset – A bájtpozíció, ahonnan az írást kezdeni kell.
A protokoll-primitívek a legalacsonyabb szint, amelyet az osztály elérhetővé tesz – a nyers parancs-küldés, a nyers csatornalista-lekérés és a kézi újraszinkronizálás bejegyzései, amelyekre minden fentebbi végső soron épül. Egy alkalmazás akkor nyúl hozzájuk, amikor olyan opkódot küld, amelyet az osztály még nem csomagol, vagy amikor egy alosztályban egyéni helyreállítást valósít meg.
- Camera._send_cmd_wait_resp(opcode: int, channel: int = 0, data: bytes = b'') bytes | None¶
Egy protokollparancs elküldése és a kamera válaszára való várakozás. Az a primitív, amelyre ennek a szakasznak minden más metódusa épül.
- Paraméterek:
opcode – Parancsszám. A szállított
Opcodeenum felsorolja a firmware-rel szállított kódokat, de a paraméter csak egy egész szám – egy egyéni firmware-build saját kódokat definiálhat és válaszolhat rájuk.channel – Csatornaazonosító, vagy
0rendszerparancsokhoz.data – Parancsspecifikus hasznosteher.
- Visszatérési érték:
Válasz-hasznosteher, vagy
Noneolyan parancsoknál, mint azOpcode.SYS_RESETés azOpcode.SYS_BOOT, amelyek megszakítják a kapcsolatot.
- Camera._channel_list() dict¶
Az aktuális csatornalista lekérése a kameráról anélkül, hogy érintené a
update_channels()által feltöltött gyorsítótárazottchannels_by_idéschannels_by_namedict-eket. Hasznos egy alosztály számára, amely közvetlenül szeretné megvizsgálni a kamera csatornaállapotát.- Visszatérési érték:
Csatornaazonosítót
{'name': str, 'flags': int}értékhez rendelő dict.
- Camera._resync() None¶
A protokoll-kézfogás újrafuttatása a nulláról. A
connect()automatikusan meghívja a kezdeti csatlakozáskor, és minden olyan nyilvános metódus, amelyOMVExceptionkivételt fog el a transzporttól. Egy saját helyreállítási ciklust megvalósító alkalmazás egy alosztályban közvetlenül is meghívhatja ezt a mögöttes hiba kezelése után.
13.3.1.6.10. Kivételek¶
- exception openmv.OMVException¶
Minden protokollszintű hiba alaposztálya. Az alábbi három alosztály mind ebből örököl, így egyetlen
except OMVExceptionlefedi a teljes hibafelületet.
- exception openmv.TimeoutException¶
A kamera nem válaszolt a beállított időtúllépésen belül. Az
OMVExceptionalosztálya.
- exception openmv.ChecksumException¶
Egy csomag CRC-je nem egyezett. Akkor kerül kiváltásra, miután a protokoll kimerítette az újrapróbálkozási keretét. Az
OMVExceptionalosztálya.
- exception openmv.SequenceException¶
Egy csomag váratlan sorszámmal érkezett az újrapróbálkozások után. Az
OMVExceptionalosztálya.