13.3.1.6. API-viite¶
openmv-paketin julkinen rajapinta koostuu Camera-luokasta kameran kanssa kommunikointiin ja OMVException-hierarkiasta protokollavirheille. Molemmat on dokumentoitu tällä sivulla.
13.3.1.6.1. Camera-luokka¶
- 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)¶
Isäntäpuolen välityskohde OpenMV-kameralle, johon otetaan yhteys USB-sarjaliikenteen kautta.
- Parametrit:
port – Sarjalaitteen polku. Linuxissa
/dev/ttyACMxUSB CDC:lle ja/dev/ttyUSBxUSB-to-UART-sillalle. macOS:ssä/dev/tty.usbmodem...tai/dev/cu.usbmodem.... WindowsissaCOMx.baudrate – Sarjaliikenteen siirtonopeus. USB:n yli
921600on taikaarvo, joka vaihtaa kameran MicroPython REPL:istä OpenMV-protokollaan – mikä tahansa muu arvo USB-yhteydessä jättää kameran REPL-tilaan, joten oletusarvoa on käytettävä. UART-yhteyden yli arvo on todellinen linjan siirtonopeus ja sen voi asettaa vapaasti molemmissa päissä.crc – Ota CRC-tarkistus käyttöön jokaisessa paketissa.
seq – Ota pakettikohtaiset järjestysnumerot käyttöön.
ack – Vaadi pakettien kuittaus.
events – Ota tapahtumailmoitukset kamerasta käyttöön.
timeout – Operaatiokohtainen aikakatkaisu sekunteina.
max_retry – Uudelleenyritysten määrä ennen kuin epäonnistuneesta paketista heitetään poikkeus.
max_payload – Suurin neuvoteltu hyötykuorman koko tavuina. Kamera voi neuvotella sen pienemmäksi.
drop_rate – Vain testaukseen tarkoitettu paketin pudottamisen todennäköisyys välillä
[0.0, 1.0]. Jätä tuotannossa arvoon0.0.
Luokka tukee kontekstinhallintaprotokollaa;
with Camera(port) as cam:kutsuuconnect()sisääntulossa jadisconnect()poistuttaessa.
13.3.1.6.2. Yhteys¶
- Camera.connect() None¶
Avaa sarjaportti ja suorita protokollan kättely. Välimuistissa pidettävä tila (kanavaluettelo, järjestelmätiedot, versiotiedot) täytetään sivuvaikutuksena. Kontekstinhallinta kutsuu tätä automaattisesti.
- Camera.disconnect() None¶
Sulje sarjaportti ja vapauta siirtokerros. Kutsutaan automaattisesti, kun kontekstinhallinnasta poistutaan.
- Camera.boot() None¶
Hyppää kamera käynnistyslataimeensa. Yhteys katkeaa, koska kamera käynnistyy uudelleen.
- Camera.update_capabilities() None¶
Neuvottele protokollan ominaisuudet (CRC, järjestyksen tarkistus, ACK:t, tapahtumat, suurin hyötykuorma) uudelleen kameran kanssa. Kamera ilmoittaa suurimman hyötykuorman, jonka se pystyy käsittelemään; isännän pyyntö rajataan siihen ja sovitut asetukset lähetetään takaisin. Kutsutaan automaattisesti metodilla
connect()– ei ole mitään syytä kutsua sitä käyttäjäkoodista, ellei konstruktorin lippuja tarvitse neuvotella uudelleen olemassa olevalle yhteydelle.
- Camera.poll_events() None¶
Suorita siirtokerroksen vastaanottopolku kerran, jotta kameran odottavat tapahtumat kulutetaan lähettämättä komentoa. Hyödyllinen pitkään käynnissä olevissa ohjelmissa, jotka kulkevat minuutteja ilman muuta I/O:ta ja haluavat tuoda kanavarekisteröintitapahtumat esiin viivytyksettä.
13.3.1.6.3. Skriptin suoritus¶
13.3.1.6.4. Suoratoisto¶
- Camera.streaming(enable: bool, raw: bool = False, resolution: tuple[int, int] | None = None) None¶
Kytke kehysvirta päälle tai pois ja valitse siirtomuoto.
- Parametrit:
enable –
Trueottaa suoratoiston käyttöön,Falsepoistaa sen käytöstä.raw – Kun
False(oletus), kamera JPEG-pakkaa jokaisen kehyksen ennen sen sijoittamista virtakanavaan jaread_frame()purkaa pakkauksen isännässä. KunTrue, kamera lähettää kaapatun pikselipuskurin pakkaamattomana – oikea valinta kameroissa, joissa ei ole laitteistopohjaista JPEG-tukea ja joissa ohjelmistopakkaus on silmukan hitain vaihe.resolution –
(width, height)-kohde, johon kamera skaalaa jokaisen raakakehyksen ennen lähettämistä, koska pakkaamattomat kehykset ovat paljon suurempia kuin JPEG-pakatut. Pakollinen kunraw=True; muutoin sivuutetaan.
- Camera.read_frame() dict | None¶
Lue uusin kehys virtakanavalta.
- Palauttaa:
None, jos kehystä ei ole odottamassa, tai sanakirja, jonka avaimet ovatwidth(int, pikseleitä),height(int, pikseleitä),format(int, kameran ilmoittama pikselimuodon tunniste),depth(int, pakatun kuvan koko tavuina JPEG- / PNG-kehyksille; ei käytössä pakkaamattomilla muodoilla),data(bytes, RGB888-muotoa pituudeltaanwidth * height * 3) jaraw_size(int, kameran USB:n yli lähettämät tavut ennen dekoodausta).
13.3.1.6.5. Mukautetut kanavat¶
- Camera.has_channel(name: str) bool¶
- Palauttaa:
True, jos kamerassa on olemassa nimellänamerekisteröity kanava.
- Camera.channel_size(name: str) int¶
- Palauttaa:
Nimetyllä kanavalla tällä hetkellä saatavilla olevien tavujen määrä, tai
0, kun kanava on tyhjä tai sitä ei ole olemassa.
- Camera.channel_write(name: str, data: bytes) bool¶
Kirjoita
datamukautettuun kanavaan. Hyötykuormaa suuremmat kirjoitukset jaetaan automaattisesti useaan pakettiin.- Parametrit:
name – Kamerapuolen skriptin rekisteröimä kanavan nimi.
data – Lähetettävä tavumuotoinen hyötykuorma.
- Palauttaa:
True, jos kanava on olemassa ja kirjoitus lähetettiin, muutoinFalse.
- Camera.read_status() dict[str, bool]¶
Kysele jokaista rekisteröityä kanavaa.
- Palauttaa:
Sanakirja, joka kuvaa kanavan nimen totuusarvoon ”dataa on valmiina luettavaksi”.
- Camera.update_channels() None¶
Päivitä välimuistissa oleva kanavaluettelo kamerasta. Suoritetaan automaattisesti seuraavan kerran, kun kanavan nimeen perustuva haku tehdään kanavarekisteröintitapahtuman saapumisen jälkeen; sovellus, joka haluaa oppia juuri rekisteröidyn kanavan välittömästi, voi kutsua tätä suoraan.
- Camera.get_channel(name: str | None = None, channel_id: int | None = None) int | str | None¶
Hae kanava joko nimellä (palauttaa sen numeerisen tunnisteen) tai tunnisteella (palauttaa sen nimen). Päivittää kanavavälimuistin metodilla
update_channels()ensin, jos kanavarekisteröintitapahtumia on odottamassa.- Parametrit:
name – Tunnisteeksi ratkaistava kanavan nimi.
channel_id – Nimeksi ratkaistava kanavan tunniste.
- Palauttaa:
Vastaava tunniste tai nimi, tai
None, kun kanavaa ei ole olemassa. Jokonametaichannel_idon annettava.
13.3.1.6.6. Laitteen introspektio¶
- Camera.version() dict¶
Palauta kameran protokollan, käynnistyslataimen ja laiteohjelmiston versiokolmikot. Pidetään välimuistissa metodin
connect()jälkeen. Kukin kolmikko on(major, minor, patch)-muotoinenint-tyyppinen monikko:protocol_version– kameran toteuttaman OpenMV-siirtoprotokollan versio.bootloader_version– flash-muistissa oleva käynnistyslataimen vedos.firmware_version– tällä hetkellä käynnissä oleva MicroPython-laiteohjelmisto.
- Camera.system_info() dict¶
Palauta kameran laitteiston ominaisuus- ja muistitiedot. Pidetään välimuistissa metodin
connect()jälkeen. Palautetun sanakirjan avaimet jakautuvat neljään ryhmään.Identiteetti
cpu_id– 32-bittinen suorittimen tunniste.device_id– kolmen 32-bittisen sanan monikko, piihin poltettu laitteen yksilöllinen sarjanumero.chip_id– kolmen 32-bittisen sanan monikko, yksi merkintä jokaista kameraan kytkettyä kuvasensoria kohti.usb_vid– USB-valmistajatunniste.usb_pid– USB-tuotetunniste.
Muistikoot (kaikki kilotavuina)
flash_size_kb– sisäisen flash-muistin kokonaismäärä.ram_size_kb– RAM-muistin kokonaismäärä.framebuffer_size_kb– kuvan kaappaukseen varattu RAM-muisti.stream_buffer_size_kb– virtakanavalle varattu RAM-muisti, joka toimittaa kehykset isännälle.
Ominaisuusliput (yksi totuusarvo ominaisuutta kohti, kaikki nimettynä
<feature>_present)gpu_present– grafiikkasuoritin.npu_present– neuroverkkosuoritin.isp_present– kuvasignaaliprosessori.venc_present– videoenkooderi.jpeg_present– JPEG-laitteistoenkooderi.dram_present– ulkoinen DRAM.crc_present– CRC-kiihdytin.pmu_present– suorituskyvyn valvontayksikkö.wifi_present– Wi-Fi-radio.bt_present– Bluetooth-radio.sd_present– SD-korttipaikka.eth_present– Ethernet PHY.multicore_present– useita suoritinytimiä.
Muut
usb_highspeed– totuusarvo,True, kun USB on luetteloitu suurnopeustilassa (USB 2.0 HS, 480 Mbps).pmu_eventcnt– käytettävissä olevien PMU-tapahtumalaskureiden määrä;0, kun PMU:ta ei ole.
13.3.1.6.7. Diagnostiikka¶
13.3.1.6.8. Profilointityökalu¶
Profilointityökalu raportoi funktiokohtaiset kutsumäärät ja minimi- / maksimi- / kokonaissuoritusajat instrumentoiduille laiteohjelmistomoduuleille – tällä hetkellä image, ml ja ulab. Funktioiden sisääntulo ja poistuminen siepataan käännösaikana; ajonaikaisesti otetaan näyte monotonisesta mikrosekuntilaskurista kummassakin, kerätään tulos funktiota kohti ja taulukko paljastetaan isännälle profile-kanavan kautta.
Profilointityökalu rakennetaan laiteohjelmistoon vain, kun make-komennolle välitetään PROFILE_ENABLE=1. Vakiona toimitettavat laiteohjelmistovedokset eivät sisällä sitä – -finstrument-functions-lipulla, jonka käännös lisää seurattaviin moduuleihin, on ei-vähäpätöinen ajonaikainen lisäkuorma, joten profilointivedokset tuotetaan lähdekoodista sitä tarvitsevaa nimenomaista virheenkorjausistuntoa varten. Kun laiteohjelmistoa ei ole rakennettu kyseisellä lipulla, profile-kanavaa ei rekisteröidä ja jokainen tällä sivulla oleva profilointimetodi palaa hiljaisesti tekemättä mitään.
Armin Performance Monitoring Unit (PMU) on Cortex-M55:n laitteistolaskuriyksikkö – pieni joukko määriteltäviä laskureita, jotka seuraavat kellojaksomääriä, välimuistiosumia ja -hutiloita, haarautumiskäyttäytymistä ja muita arkkitehtuurin määrittelemiä tapahtumia hidastamatta mitattavaa koodia. Kameroissa, joissa sellainen on – AE3 ja N6, OpenMV-mallistossa M55:n ympärille rakennetut kaksi kameraa – profilointityökalu ottaa näytteitä näistä laskureista ajoitusdatan rinnalla, ja tapahtumien kokonaismäärät näkyvät kussakin funktiokohtaisessa tietueessa. Kamerat, joissa ei ole PMU:ta, tuottavat silti ajoitustietueita; tapahtumakentät palautuvat nollana, ja profiler_event() ei tee mitään.
- Camera.profiler_mode(exclusive: bool = False) None¶
Vaihda sisältävän ja poissulkevan ajoituksen välillä. Sisältävä ajoitus veloittaa kutsuttavien funktioiden ajan kutsujalle; poissulkeva ajoitus ei.
- Parametrit:
exclusive –
Truevalitsee poissulkevan ajoituksen,Falsevalitsee sisältävän.
- Camera.profiler_reset(config: list | None = None) None¶
Tyhjennä kaikki profilointilaskurit.
config=Nonepalauttaa myös oletuksena olevan PMU-tapahtumamäärityksen.- Parametrit:
config – Varattu tulevia laskurikohtaisia konfiguraation ohitusarvoja varten. Anna
None, jotta oletusarvot säilyvät.
- Camera.profiler_event(counter_num: int, event_id: int) None¶
Sido yksi PMU-laskuripaikoista tiettyyn laitteistotapahtumaan.
- Parametrit:
counter_num – Laskurin indeksi.
event_id – Arkkitehtuurin määrittelemä tapahtumatunniste.
- Camera.read_profile() list[dict] | None¶
Palauta funktiokohtaiset profilointitietueet, jotka on kerätty edellisen nollauksen jälkeen. Kukin tietue on sanakirja, jonka kentät ovat
address,caller,call_count,min_ticks,max_ticks,total_ticks,total_cyclesjaevents-monikko, jonka koko vastaa kameranpmu_eventcnt-arvoa.- Palauttaa:
Lista tietuesanakirjoja, tai
None, jos profilointikanava ei ole käytettävissä tai dataa ei ole kerätty.
13.3.1.6.9. Aliluokitus ja kanavien sisäiset rakenteet¶
Edellä dokumentoidut metodit kattavat kaiken paketin yleisen käytön. Muutamat mallit – kamerapuolen tapahtumien käsittely, joihin isäntä haluaa reagoida, kanavan lukitseminen monivaiheista vaihtoa varten, sellaisten kanavien kanssa kommunikointi, jotka kuljettavat muotoiltua dataa tavuvirtojen sijaan, tai kanavakohtaisten ohjauskomentojen ajaminen – tarvitsevat metodeja, jotka Camera pitää alaviivalla alkavina. Nämä nimet ovat yksityisiä sopimuksen mukaan (Python ei tee niille nimien mangelointia), ja sovellusten, jotka niitä tarvitsevat, odotetaan joko aliluokittavan Camera-luokan tai kutsuvan metodeja suoraan.
Aliluokitus tapahtumiin reagoimiseksi. Jokainen kameran lähettämä tapahtuma saapuu metodin Camera._handle_event() kautta. Camera-luokan aliluokitus ja metodin ohittaminen on tapa, jolla sovellus reagoi kamerapuolen skriptin nostamiin tapahtumiin; Tapahtumat-sivu käy läpi koko mallin.
- Camera._handle_event(channel_id: int, event: int) None¶
Käsittele yksi tapahtuma kamerasta. Siirtokerros kutsuu tätä aina, kun tapahtumapaketti saapuu. Ohita aliluokassa lisätäksesi sovelluskohtaista käsittelyä; kutsu
super()._handle_event(...)säilyttääksesi oletuskäyttäytymisen (kanavaluettelon päivitys tapahtumallaCHANNEL_REGISTERED, kehyksen valmiusseurantastream-kanavalla,stdin-kanavan käynnistys- / pysäytyskirjaus).- Parametrit:
channel_id –
0järjestelmätapahtumille, muutoin rekisteröidyn kanavan tunniste.event – Tapahtuman tunniste; arvot tulevat
EventType-luettelosta järjestelmätapahtumille ja siitä, mitä kamerapuolen kanavataustajärjestelmä valitsi kanavatapahtumille.
Aliluokan, joka lisää omat protokollan kanssa kommunikoivat metodinsa, tulee koristella ne metodilla retry_if_failed(), jotta ne perivät saman uudelleensynkronointi- ja uudelleenyrityskäyttäytymisen kuin jokainen tällä sivulla toimitettu metodi.
- static Camera.retry_if_failed(func)¶
Koriste. Kääräisee instanssimetodin niin, että se yrittää uudelleen kerran, kun siirtokerros nostaa poikkeuksen
ResyncException. Jokaisen metodin, joka kutsuu metodia_send_cmd_wait_resp()(suoraan tai jonkin_channel_*-kääreen kautta), tulisi kantaa tätä koristetta:class MyCamera(Camera): @Camera.retry_if_failed def my_custom_command(self, payload): return self._send_cmd_wait_resp(Opcode.MY_CMD, 0, payload)
Kanavan lukitus varmistaa, ettei kanavan tila muutu kahden toisiinsa liittyvän operaation välillä (esimerkiksi _channel_size(), jota seuraa _channel_read(), kanavalla joka jatkaa datan liittämistä). read_frame() ja read_profile() käyttävät tätä sisäisesti; mukautettua kanavaa monivaiheisella käytöllä ajava sovellus tekee samoin.
- Camera._channel_lock(channel_id: int) bool¶
Hanki yksinoikeudellinen lukko kanavaan. Muut isännän operaatiot samalla kanavalla estyvät, kunnes lukko vapautetaan.
- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().- Palauttaa:
True, kun lukko myönnettiin.
- Camera._channel_unlock(channel_id: int) bool¶
Vapauta aiemmin metodilla
_channel_lock()otettu lukko. Aina parina lukituskutsun kanssa; käytätry/finallyvarmistaaksesi, että lukon vapautus tapahtuu silloinkin, kun välissä oleva luku nostaa poikkeuksen.- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().
Muotoillut kanavat kuljettavat rakenteellisia tietueita tasaisen tavuvirran sijaan. Profilointikanava on toimitettava esimerkki: sen muoto on (record_count, record_size), ja isäntä, joka haluaa tietää kuinka monta tietuetta on odottamassa, lukee muodon tavukoon sijaan.
- Camera._channel_shape(channel_id: int) tuple[int, ...]¶
Lue kanavan muotokuvaaja.
- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().- Palauttaa:
Etumerkittömien 32-bittisten kokonaislukujen monikko, joka kuvaa kanavan asettelua. Merkitys on kanavakohtainen.
Kanavakohtaiset ohjauskomennot – käynnistys, pysäytys, nollaus, konfigurointi – ratsastavat yhdellä käskykoodilla (CHANNEL_IOCTL), johon liittyy kanavakohtainen komentonumero ja valinnainen struct.pack-hyötykuorma. Toimitetut metodit kuten stop(), exec() ja streaming() ovat ohuita kääreitä _channel_ioctl()-kutsujen ympärillä stdin- ja stream-kanavia vastaan; mukautettua kamerapuolen kanavaa, joka määrittelee oman ioctl-valikkonsa, ajetaan samalla tavalla.
- Camera._channel_ioctl(channel_id: int, cmd: int, fmt: str | None = None, *args) bytes | None¶
Anna ioctl-komento kanavalle.
- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().cmd – Kamerapuolen kanavataustajärjestelmän määrittelemä komentonumero.
fmt – Valinnainen
struct-muotomerkkijono argumenttimonikolle. AnnaNoneioctl-komennoille, jotka eivät ota argumentteja.args – Arvot, jotka vastaavat muotoa
fmt.
- Palauttaa:
Mikä tahansa hyötykuorma, jonka kanava palautti, tai
None.
Tunnisteeseen perustuvat tavuvirtamuunnelmat julkisista kanavametodeista ohittavat nimestä tunnisteeksi -haun ja hyväksyvät eksplisiittisen tavukohtaisen offset-arvon – hyödyllinen suuren puskurin keskeltä luettaessa (esimerkiksi profile-kanavan tietueet).
- Camera._channel_size(channel_id: int) int¶
- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().- Palauttaa:
Kanavalla tällä hetkellä saatavilla olevat tavut.
- Camera._channel_read(channel_id: int, offset: int, length: int) bytes¶
Lue
lengthtavua alkaen kohdastaoffset. Useaan pakettiin jakautuvat luvut kootaan uudelleen automaattisesti.- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().offset – Tavukohtainen siirtymä, josta luku aloitetaan.
length – Luettavien tavujen määrä.
- Camera._channel_write(channel_id: int, data: bytes, offset: int = 0) None¶
Kirjoita
dataannettuun kohtaanoffset. Useaan pakettiin jakautuvat kirjoitukset jaetaan automaattisesti.- Parametrit:
channel_id – Numeerinen kanavan tunniste, joka tyypillisesti ratkaistaan metodilla
get_channel().data – Kirjoitettava tavumuotoinen hyötykuorma.
offset – Tavukohtainen siirtymä, josta kirjoitus aloitetaan.
Protokollan peruskomennot ovat alin taso, jonka luokka paljastaa – raaka lähetä-komento-, hae-raaka-kanavaluettelo- ja manuaalinen-uudelleensynkronointi-merkinnät, joiden varaan kaikki edellä rakentuu lopulta. Sovellus tarttuu niihin lähettäessään käskykoodia, jota luokka ei jo kääräise, tai toteuttaessaan mukautettua palautumista aliluokassa.
- Camera._send_cmd_wait_resp(opcode: int, channel: int = 0, data: bytes = b'') bytes | None¶
Lähetä protokollakomento ja odota kameran vastausta. Peruskomento, jonka varaan jokainen muu tämän osion metodi rakentuu.
- Parametrit:
opcode – Komentonumero. Toimitettu
Opcode-luettelo listaa koodit, joiden kanssa laiteohjelmisto toimitetaan, mutta parametri on vain kokonaisluku – mukautettu laiteohjelmistokäännös voi määritellä omansa ja vastata niihin.channel – Kanavan tunniste, tai
0järjestelmäkomennoille.data – Komentokohtainen hyötykuorma.
- Palauttaa:
Vastauksen hyötykuorma, tai
Nonekomennoille kutenOpcode.SYS_RESETjaOpcode.SYS_BOOT, jotka katkaisevat yhteyden.
- Camera._channel_list() dict¶
Hae nykyinen kanavaluettelo kamerasta koskematta välimuistissa oleviin
channels_by_id- jachannels_by_name-sanakirjoihin, jotkaupdate_channels()täyttää. Hyödyllinen aliluokalle, joka haluaa tarkastella kameran kanavatilaa suoraan.- Palauttaa:
Sanakirja, joka kuvaa kanavan tunnisteen muotoon
{'name': str, 'flags': int}.
- Camera._resync() None¶
Aja protokollan kättely uudelleen alusta. Kutsutaan automaattisesti metodilla
connect()alkuyhteyden muodostuksessa ja jokaisella julkisella metodilla, joka sieppaaOMVException-poikkeuksen siirtokerrokselta. Sovellus, joka toteuttaa oman palautumissilmukkansa aliluokassa, voi kutsua tätä suoraan käsiteltyään perimmäisen virheen.
13.3.1.6.10. Poikkeukset¶
- exception openmv.OMVException¶
Perusluokka jokaiselle protokollatason virheelle. Kaikki kolme alla olevaa aliluokkaa perivät siitä, joten yksittäinen
except OMVExceptionkattaa koko virhepinnan.
- exception openmv.TimeoutException¶
Kamera ei vastannut konfiguroidun aikakatkaisun sisällä.
OMVException-luokan aliluokka.
- exception openmv.ChecksumException¶
Paketin CRC ei täsmännyt. Nostetaan, kun protokolla on käyttänyt loppuun uudelleenyritysbudjettinsa.
OMVException-luokan aliluokka.
- exception openmv.SequenceException¶
Paketti saapui odottamattomalla järjestysnumerolla uudelleenyritysten jälkeen.
OMVException-luokan aliluokka.