4.17. Sensorin säätimet¶
Metodien pixformat() ja framesize() lisäksi CSI-luokka tarjoaa kourallisen sensorikohtaisia säätimiä, joita lähes jokainen sovellus tarvitsee ennemmin tai myöhemmin – asennussuunta, valotus, vahvistus, valkotasapaino ja muutama virheenetsintäapu. Jokainen vastaa suoraan aiemmin käsiteltyä sensorikäsitettä; API tarjoaa vain Python-kahvan rekisterikirjoitukseen, jonka ajuri tekee taustalla.
Kaikki alla olevat metodit vaikuttavat taustalla olevaan sensoriin. Ne kaikki välittävät rekisterikirjoituksia sensorin I2C-ohjausväylän kautta, joten kustannus on mikrosekunteja ja uusi asetus astuu voimaan seuraavalla valotuksella – tyypillisesti seuraavalla snapshot()-kutsulla.
4.17.1. Suunta¶
Kamera ei tiedä, kummin päin se on asennettu. Sensoriin kohdistuvat kaksi käännöslippua kääntävät kuvan oikein päin, ennen kuin yksikään pikseli poistuu sirulta:
csi0.hmirror(True)
csi0.vflip(True)
hmirror() kääntää vasemmalta oikealle ja vflip() kääntää ylhäältä alas. Yhdessä ne kattavat käytännössä esiin tulevat tapaukset: ylösalaisin asennettu piirilevy (molemmat liput True), etupinnoitetun peilin takana oleva piirilevy (vain hmirror) tai alhaalta heijastunutta näkymää katsova piirilevy (vain vflip).
Koska kääntö tapahtuu sensorin lukulogiikassa, siitä ei aiheudu suoritinkuormaa eikä muistirasitetta – kehys saapuu kehyspuskuriin jo valmiiksi oikein suunnattuna.
4.17.2. Valotus¶
Valotus on integrointiaika – kuinka kauan jokaisen pikselin valodiodi kerää varausta ennen rivin lukemista, mikrosekunteina. Ajuri aloittaa sensorin automaattivalotussilmukan käynnissä, joten kamera pyrkii pitämään pikselien keskiarvon lähellä tavoitearvoa. Silmukan poiskytkentä lukitsee valotuksen sovelluksen valitsemaan arvoon:
csi0.auto_exposure(False, exposure_us=8000)
Kiinteä valotus on oikea valinta, kun näkymän kirkkaus on vakaa ja sovellus tarvitsee ennustettavaa liike-epäterävyyttä tai johdonmukaista kehyskohtaista intensiteettiä kynnystystä varten. Nykyisen valotuksen lukeminen takaisin – riippumatta siitä, asettiko sen silmukka vai sovellus – on erillinen kutsu:
us = csi0.exposure_us()
Metodin auto_exposure() kutsuminen arvolla True ja ilman valotusarvoa palauttaa ohjauksen silmukalle.
4.17.3. Vahvistus¶
Vahvistus on pikselijännitteeseen sovellettava vahvistus ennen sen saapumista ADC:lle, desibeleinä. Kuten valotuksessa, ajuri aloittaa automaattivahvistussilmukan päällä. Kaksi mallia esiintyy usein. Katon rajoittaminen antaa silmukan mukautua valaistukseen mutta estää sitä vahvistamasta kohinaa loputtomasti hämärissä näkymissä:
csi0.auto_gain(True, gain_db_ceiling=16)
Kiinteän vahvistuksen lukitseminen on oikea liike, kun sovellus lukitsee myös valotuksen – vahvistuksen vakaus on tärkeää sovelluksille, jotka vertailevat pikseliarvoja kehyksestä toiseen, kuten värin seuranta:
csi0.auto_gain(False, gain_db=0)
Nykyinen vahvistus luetaan takaisin metodilla gain_db(). Aina kun sovellus poistaa automaattivahvistuksen käytöstä, sen tulisi poistaa käytöstä myös automaattinen valkotasapaino ja automaattivalotus – muuten yhä toiminnassa olevat ohjaussilmukat muuttavat kuvaa tavoilla, jotka mitätöivät kiinteän vahvistuksen.
4.17.4. Valkotasapaino¶
Valkotasapaino on kanavakohtainen vahvistus, jonka ISP soveltaa debayer-vaiheesta tuleviin punaiseen, vihreään ja siniseen kanavaan, jotta valkoinen kohde näyttää valkoiselta minkä tahansa värisessä valossa. Automaattinen valkotasapainosilmukka laskee nämä kolme vahvistusta ISP:n joka kehyksellä keräämistä aluekohtaisista tilastoista ja soveltaa niitä seuraavaan kehykseen.
Useimmat sovellukset jättävät silmukan käyntiin. Värin seuranta on yleinen poikkeus – vahvistukset ovat myös niitä, joita silmukka muuttaa jahdatessaan värillistä kohdetta, joten jos sovellus yrittää löytää punaisen blobin, silmukka himmentää hiljaa punaista kanavaa ja blob lakkaa täsmäämästä. Silmukan lukitseminen korjaa tämän:
csi0.auto_whitebal(False)
Anna eksplisiittinen (r, g, b) -monikko desibeleinä toistettavaa värikalibrointia varten – samat vahvistukset eri piirilevyillä ja istunnoissa:
csi0.auto_whitebal(False, rgb_gain_db=(0.0, 0.0, 0.0))
Nykyiset vahvistukset luetaan takaisin monikkona metodin rgb_gain_db() kautta.
4.17.5. Kehysnopeuden katto¶
Sensorit toimivat oletuksena natiivilla kehysnopeudellaan – 30-60 kehystä sekunnissa useimmissa osissa, paljon korkeammalla nopeilla sensoreilla, kun framesize on riittävän pieni. Nopeuden rajoittaminen antaa sovelluksen rajoittaa kameran nopeuteen, johon jatkokäsittely pysyy perässä:
csi0.framerate(15)
Sensoreilla, jotka tukevat laitteistotason nopeudensäätöä, kutsu myös pidentää kehyskohtaista valotusbudjettia, mikä voi auttaa hämärässä; muilla ajuri yksinkertaisesti ohittaa ylimääräiset kehykset kehyspuskurin tasolla.
4.17.6. Testikuvio¶
Väripalkkien testikuvio on sisäänrakennettu useimpiin sensoreihin ja hyödyllinen kuvantamis-ongelman erottamiseen ulostulo-ongelmasta. Sen päälle kytkeminen ohittaa valodiodimatriisin ja lähettää kiinteän kuvion samaa pikselidatapolkua pitkin:
csi0.colorbar(True)
Jos testikuvio näyttää oikealta mutta live-kuva ei, vika on optiikassa tai sensorin analogiaetupäässä; jos jopa testikuvio on vioittunut, ongelma on jossakin pikselidataväylässä tai pixformat() / framesize() -konfiguraatiossa. Anna False palataksesi live-kuvaan.
Katso csi.CSI koko API:n osalta, mukaan lukien sensorikohtaiset ioctl() -komennot, jotka paljastavat tietyille sensoriperheille ainutlaatuiset säätimet.