csi — sensory kamery¶
Moduł csi to nowoczesny, obiektowy interfejs do sensora (sensorów) kamery w OpenMV Cam. Każdy fizyczny sensor jest reprezentowany przez instancję CSI, dzięki czemu płytki obrazowania wielospektralnego, które łączą sensor kolorowy z sensorem termicznym lub zdarzeniowym, mogą sterować każdym z nich niezależnie, przekazując inny cid do konstruktora. Kamery z jednym sensorem po prostu tworzą jedną instancję CSI.
Obiekt CSI posiada pełną konfigurację sensora – format piksela, rozmiar ramki / okno, ekspozycję / wzmocnienie / balans bieli, sprzętowe odbicie lustrzane i odwrócenie, wzór testowy z paskami kolorów, zegar liczby klatek, ROI dla automatycznej ekspozycji oraz specyficzne dla układu polecenia ioctl. Ramki są przechwytywane za pomocą CSI.snapshot(), która zwraca obiekt image.Image powiązany z buforem ramki.
Ten moduł zastępuje przestarzały moduł sensor (który udostępniał tę samą funkcjonalność jako funkcje na poziomie modułu powiązane z jednym ukrytym sensorem). Nowy kod powinien używać CSI.
Przykład użycia:
import csi
# Setup camera.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # skip frames
# Take pictures.
while(True):
csi0.snapshot()
Użycie z asyncio¶
Blokująca pętla CSI.snapshot() powyżej nie współpracuje z pętlą zdarzeń asyncio – gdy snapshot czeka na następną ramkę, każda inna korutyna w programie jest zamrożona. Aby pętla przechwytywania mogła współistnieć z inną równoległą pracą (klientem UART, obserwatorem przycisku, zadaniem sieciowym), opakuj CSI w mały adapter, który zamienia snapshot w przyjazną dla await korutynę, odpytując snapshot(blocking=False) i oddając sterowanie pętli zdarzeń pomiędzy sprawdzeniami:
import asyncio
import csi
class AsyncCSI:
def __init__(self, *args, **kwargs):
self._csi = csi.CSI(*args, **kwargs)
def __getattr__(self, name):
return getattr(self._csi, name)
async def snapshot(self):
while True:
img = self._csi.snapshot(blocking=False)
if img is not None:
return img
await asyncio.sleep_ms(0)
__getattr__ przekazuje każdy inny atrybut (reset, pixformat, framesize, pokrętła sensora) do leżącego u podstaw obiektu CSI, dzięki czemu opakowanie jest zamiennikiem typu drop-in. Pierwsze nieblokujące wywołanie uruchamia także przechwytywanie DMA kamery, jeśli nie było ono jeszcze aktywne, więc nie jest potrzebna żadna dodatkowa inicjalizacja.
Pętla przechwytywania wpasowuje się wówczas w większy program asyncio jako kolejna korutyna:
async def capture_loop(cam):
while True:
img = await cam.snapshot()
# process img here
async def main():
cam = AsyncCSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
asyncio.create_task(some_other_task())
await capture_loop(cam)
asyncio.run(main())
Ustawienie framebuffers nadal ma znaczenie w tej postaci – tryb pojedynczego bufora sprawia, że snapshot(blocking=False) zwraca None, dopóki nie zostanie przechwycona następna ramka, podczas gdy podwójne lub potrójne buforowanie wygładza to, dzięki czemu opakowanie zwykle znajduje zbuforowaną ramkę czekającą już przy pierwszym odpytaniu. Pełny przewodnik znajdziesz w finałowym przykładzie AsyncCSI w samouczku asyncio.
klasa CSI – interfejs sensora kamery (Camera Sensor Interface)¶
Klasa CSI służy do sterowania sensorem kamery.
- class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)¶
Tworzy obiekt do komunikacji z sensorem kamery. Na płytkach z wieloma sensorami konkretny obiekt CSI można wybrać, przekazując
cidtaki jakcsi.LEPTON, aby wybrać moduł sensora FLIR Lepton. Jeślicidwynosi -1, wybierany jest sensor podstawowy (zwykle moduł kamery kolorowej na płytkach z wieloma sensorami).Jeśli
delaysma wartośćFalse, wszystkie opóźnienia na ustabilizowanie się w sterowniku csi są wyłączone. Domyślnie sterownik sensora wprowadza opóźnienie po resecie / zmianie trybu, aby zapobiec zwracaniu uszkodzonych ramek przezCSI.snapshot. Wyłączenie opóźnień pozwala zgrupować aktualizacje i zastosować pojedyncze opóźnienie na końcu przed wywołaniemCSI.snapshot.Jeśli
fflushma wartośćFalse, automatyczne opróżnianie bufora ramki wspomniane wCSI.framebuffersjest wyłączone. Usuwa to wszelkie ograniczenia czasowe dla ramek w kolejce FIFO bufora ramki.streamwybiera, czy ten CSI jest źródłem strumienia wysyłanego do IDE. JeśliNone(domyślnie), CSI staje się źródłem strumienia tylko wtedy, gdy jest sensorem podstawowym (niepomocniczym). PrzekażTrue, aby wymusić, by ten CSI był źródłem strumienia, lub dowolną wartość fałszywą, aby pozostawić istniejące źródło strumienia bez zmian.Metody¶
- reset(hard: bool = True) None¶
Inicjalizuje sensor kamery. Wykonuje sprzętowy reset poprzez przełączenie sygnału GPIO RESET do modułu kamery, jeśli
hardma wartośćTrue.hardpowinno być ustawione na false podczas resetowania pomocniczych sensorów kamery, które współdzielą ten sam sygnał GPIO RESET co moduł podstawowy.
- shutdown(enable: bool) None¶
Wprowadza kamerę w tryb niższego poboru mocy niż uśpienie (ale kamera musi zostać zresetowana po wybudzeniu).
- sleep(enable: bool) None¶
Usypia kamerę, jeśli
enablema wartość True. W przeciwnym razie wybudza ją z powrotem.
- flush() None¶
Kopiuje bieżącą zawartość bufora ramki do podglądu w IDE. Wywołaj to po ostatnim
CSI.snapshot, jeśli skrypt się kończy, aby IDE pokazało ostatnią ramkę.
- snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None¶
Robi zdjęcie za pomocą kamery i zwraca obiekt
image.Image.Jeśli przekazano
timei/lubframes, snapshot będzie blokować przez tyle milisekundtimei/lub tyle przechwyconych z kamery klatekframes. Oba argumenty mogą być używane jednocześnie. Po upływietimei/lubframessnapshot zwróciNone.blockingmoże mieć wartośćFalse, aby włączyć zachowanie nieblokujące, które spowoduje, że snapshot zwróciNone, gdy następny obraz z kamery nie jest gotowy, zamiast czekać.imagemoże być innym obiektemimage.Image, który ma zostać zaktualizowany nowym obrazem przechwyconym z kamery, zamiast zwracania nowego obiektuimage.Image. Poprzednia zawartość obrazu jest nadpisywana przez głęboką kopię.Jeśli
CSI.auto_rotationjest włączone, ta metoda zwróci już obrócony obrazimage.Image.
- cid() int¶
Zwraca ID układu modułu kamery. Porównaj z dowolnym z
csi.OV2640,csi.OV5640,csi.OV7670,csi.OV7690,csi.OV7725,csi.OV9650,csi.MT9V022,csi.MT9V024,csi.MT9V032,csi.MT9V034,csi.MT9M114,csi.BOSON320,csi.BOSON640,csi.LEPTON,csi.HM01B0,csi.HM0360,csi.GC2145,csi.GENX320ES,csi.GENX320,csi.PAG7920,csi.PAG7936,csi.PAJ6100,csi.FROGEYE2020lubcsi.SOFTCSI.
- readable() bool¶
Zwraca
True, jeśli istnieje obraz gotowy do zwrócenia przezCSI.snapshot, więc wywołanie snapshot nie będzie blokować.
- pixformat(pixformat: int | None = None) int | None¶
Ustawia format piksela dla modułu kamery na jeden z
csi.GRAYSCALE,csi.RGB565,csi.BAYER,csi.YUV422lubcsi.JPEG(tylko w OV2640/OV5640).Zwraca bieżący pixformat, jeśli wywołano bez argumentów.
- framesize(framesize: int | Tuple[int, int] | None = None) int | None¶
Ustawia rozmiar ramki dla modułu kamery na jedną ze stałych rozmiaru (np.
csi.QVGA,csi.VGA,csi.HDitd. — zobacz sekcję ze stałymi).Alternatywnie możesz przekazać niestandardowy rozmiar ramki jako krotkę
(w, h). Gdy wywoływana jestCSI.snapshot, niestandardowy rozmiar ramki zostanie sprawdzony pod kątem reguł DMA. Ogólnie rozmiary ramek muszą być wielokrotnością 8 pikseli i/lub 16 bajtów.Zwraca bieżący rozmiar ramki, jeśli wywołano bez argumentów.
- framerate(rate: int | None = None) int | None¶
Ustawia liczbę klatek na sekundę w Hz dla modułu kamery.
Zwraca bieżącą liczbę klatek na sekundę, jeśli wywołano bez argumentów.
Informacja
CSI.frameratedziała poprzez odrzucanie ramek odbieranych przez moduł kamery, aby utrzymać liczbę klatek na poziomie określonej wartości lub poniżej niej. Domyślnie kamera będzie działać z maksymalną liczbą klatek. Jeśli zostało to zaimplementowane dla konkretnego sensora kamery,CSI.frameratezmniejszy także wewnętrznie liczbę klatek sensora kamery, aby oszczędzać energię i poprawić jakość obrazu poprzez zwiększenie ekspozycji sensora.CSI.frameratemoże wchodzić w konflikt zCSI.auto_exposurew niektórych kamerach.
- window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None¶
Ustawia rozdzielczość kamery na podobszar bieżącej rozdzielczości.
roito krotka(x, y, w, h). Możesz także przekazać(w, h), a okno zostanie wycentrowane.Zwraca bieżącą krotkę
(x, y, w, h), jeśli wywołano bez argumentów.
- gainceiling(gainceiling: int) bool¶
Ustawia pułap wzmocnienia obrazu kamery na jedną z wartości 2, 4, 8, 16, 32, 64 lub 128.
Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- brightness(brightness: int) bool¶
Ustawia jasność obrazu kamery.
Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- contrast(contrast: int) bool¶
Ustawia kontrast obrazu kamery.
Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- saturation(saturation: int) bool¶
Ustawia nasycenie obrazu kamery.
Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- quality(quality: int) bool¶
Ustawia jakość kompresji JPEG obrazu kamery. 0 - 100.
Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.Informacja
Tylko dla kamer OV2640/OV5640.
- colorbar(enable: bool) bool¶
Włącza (
True) lub wyłącza (False) tryb pasków kolorów. Domyślnie wyłączony.Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
enablewłącza (True) lub wyłącza (False) automatyczną regulację wzmocnienia. Kamera uruchamia się z włączoną automatyczną regulacją wzmocnienia.Jeśli
enablema wartośćFalse, możesz ustawić stałe wzmocnienie w decybelach za pomocągain_db.Jeśli
enablema wartośćTrue, możesz ustawić maksymalny pułap wzmocnienia w decybelach za pomocągain_db_ceilingdla algorytmu automatycznej regulacji wzmocnienia.Informacja
Musisz wyłączyć także balans bieli, jeśli chcesz śledzić kolory.
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
enablewłącza (True) lub wyłącza (False) automatyczną regulację ekspozycji. Kamera uruchamia się z włączoną automatyczną regulacją ekspozycji.Jeśli
enablema wartośćFalse, możesz ustawić stały czas ekspozycji w mikrosekundach za pomocąexposure_us.Informacja
Algorytmy automatycznej ekspozycji kamery są dość zachowawcze co do tego, o ile zmieniają wartość ekspozycji, i zasadniczo unikają znacznych zmian wartości ekspozycji. Zamiast tego mocno zmieniają wartość wzmocnienia, aby poradzić sobie ze zmieniającym się oświetleniem.
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
enablewłącza (True) lub wyłącza (False) automatyczny balans bieli. Kamera uruchamia się z włączonym automatycznym balansem bieli.Jeśli
enablema wartośćFalse, możesz ustawić stałe wzmocnienie w decybelach odpowiednio dla kanałów czerwonego, zielonego i niebieskiego za pomocąrgb_gain_db.Informacja
Musisz wyłączyć także regulację wzmocnienia, jeśli chcesz śledzić kolory.
- rgb_gain_db() Tuple[float, float, float]¶
Zwraca krotkę
(r, g, b)zawierającą bieżące wartości wzmocnienia kamery dla kanału czerwonego, zielonego i niebieskiego w decybelach.
- auto_blc(enable: bool, regs: List[int] | None = None) None¶
Ustawia automatyczną kalibrację poziomu czerni (BLC) w kamerze.
enableprzekażTruelubFalse, aby włączyć lub wyłączyć BLC. Zazwyczaj zawsze chcesz mieć to włączone.regsjeśli wyłączone, możesz ręcznie ustawić wartości rejestrów BLC z poprzedniego wywołaniaCSI.blc_regs.
- blc_regs() List[int]¶
Zwraca rejestry BLC sensora jako listę liczb całkowitych. Do użytku z
CSI.auto_blc.
- hmirror(enable: bool | None = None) bool | None¶
Włącza (
True) lub wyłącza (False) tryb poziomego odbicia lustrzanego. Domyślnie wyłączony.Zwraca bieżące ustawienie, jeśli wywołano bez argumentów.
- vflip(enable: bool | None = None) bool | None¶
Włącza (
True) lub wyłącza (False) tryb pionowego odwrócenia. Domyślnie wyłączony.Zwraca bieżące ustawienie, jeśli wywołano bez argumentów.
- transpose(enable: bool | None = None) bool | None¶
Włącza (
True) lub wyłącza (False) tryb transpozycji. Domyślnie wyłączony.vflip=False, hmirror=False, transpose=False -> obrót o 0 stopni
vflip=True, hmirror=False, transpose=True -> obrót o 90 stopni
vflip=True, hmirror=True, transpose=False -> obrót o 180 stopni
vflip=False, hmirror=True, transpose=True -> obrót o 270 stopni
Zwraca bieżące ustawienie, jeśli wywołano bez argumentów.
- auto_rotation(enable: bool | None = None) bool | None¶
Włącza (
True) lub wyłącza (False) tryb automatycznego obrotu. Domyślnie wyłączony.Zwraca bieżące ustawienie, jeśli wywołano bez argumentów.
Informacja
Ta metoda działa tylko wtedy, gdy OpenMV Cam ma zainstalowany
imu, i jest włączana automatycznie.
- framebuffers(count: int | None = None) int | None¶
Ustawia liczbę buforów ramki używanych do odbierania danych obrazu. Domyślnie OpenMV Cam spróbuje przydzielić maksymalną liczbę buforów ramki, jaką może. Ponowna alokacja następuje za każdym razem, gdy wywoływane są
CSI.pixformat,CSI.framesizelubCSI.window.counto wartości 1 (pojedynczy bufor), 2 (podwójny bufor) lub 3 (potrójny bufor) wybiera odpowiedni tryb przechwytywania. Przekaż 4 lub więcej, aby przełączyć sterownik w tryb wideo FIFO, w którym kolejkowanych jestcountbuforów — przydatne do nagrywania wideo na kartę SD. Przy utracie ramki wszystkie bufory ramki poza aktywnym są czyszczone, więcCSI.snapshotzawsze zwraca świeżą ramkę.Zwraca bieżącą liczbę, jeśli wywołano bez argumentów.
- special_effect(effect: int) bool¶
Ustawia specjalny efekt cyfrowy (jeden z
csi.NORMALlubcsi.NEGATIVE).Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- lens_correction(enable: bool, radi: int, coef: int) bool¶
enableTrue, aby włączyć,False, aby wyłączyć.radicałkowity promień pikseli do skorygowania.coefsiła korekcji.Zwraca
Truew przypadku powodzenia iFalsew przypadku niepowodzenia.
- vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None¶
Rejestruje wywołanie zwrotne
cb, które ma być wykonane (w kontekście przerwania) za każdym razem, gdy moduł kamery generuje nową ramkę (ale zanim ramka zostanie odebrana).cbprzyjmuje jeden argument, którym jest bieżący stan pinu vsync po zmianie.Zwraca zarejestrowane wywołanie zwrotne, jeśli wywołano bez argumentów. Przekaż dowolną wartość niewywoływalną, aby wyczyścić wywołanie zwrotne.
- frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None¶
Rejestruje wywołanie zwrotne
cb, które ma być wykonane (w kontekście przerwania) za każdym razem, gdy moduł kamery generuje nową ramkę i ramka jest gotowa do odczytu za pomocąCSI.snapshot.cbnie przyjmuje argumentów. Użyj tego, aby zaplanować odczyt ramki później za pomocąmicropython.schedule().Zwraca zarejestrowane wywołanie zwrotne, jeśli wywołano bez argumentów. Przekaż dowolną wartość niewywoływalną, aby wyczyścić wywołanie zwrotne.
- ioctl(request: int, *args) Any¶
Wykonuje żądanie specyficzne dla sensora.
requestto jedna ze stałychIOCTL_*; pozostałe argumenty pozycyjne oraz wartość zwracana zależą od żądania. Obsługiwane żądania są pogrupowane poniżej według rodziny sensorów.Ogólne (dowolny sensor):
ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))Ustawia okno odczytu sensora. Mniejsze okno podnosi liczbę klatek kosztem pola widzenia.
ioctl(IOCTL_GET_READOUT_WINDOW)Zwraca bieżące okno odczytu jako krotkę
(x, y, w, h).ioctl(IOCTL_SET_TRIGGERED_MODE, enable)Włącza (
True) lub wyłącza (False) tryb wyzwalany w MT9V034.ioctl(IOCTL_GET_TRIGGERED_MODE)Zwraca bieżący stan trybu wyzwalanego jako
bool.ioctl(IOCTL_SET_FOV_WIDE, enable)Gdy
True, instruujeframesize(), aby optymalizować pod kątem pola widzenia, a nie liczby klatek.ioctl(IOCTL_GET_FOV_WIDE)Zwraca bieżący stan szerokiego pola widzenia jako
bool.ioctl(IOCTL_SET_NIGHT_MODE, enable)Włącza (
True) lub wyłącza (False) „tryb nocny” sensora przy słabym oświetleniu. Tylko OV7725 i OV5640.ioctl(IOCTL_GET_NIGHT_MODE)Zwraca bieżący stan trybu nocnego jako
bool.ioctl(IOCTL_GET_RGB_STATS)Zwraca 4-elementową krotkę surowych statystyk kanałów RGB
(r, gb, gr, b)odczytanych z sensora (zwykle używaną do strojenia balansu bieli).
OV5640 FPC – automatyczne ustawianie ostrości:
ioctl(IOCTL_TRIGGER_AUTO_FOCUS)Rozpoczyna cykl automatycznego ustawiania ostrości na module OV5640 FPC.
ioctl(IOCTL_PAUSE_AUTO_FOCUS)Wstrzymuje trwający cykl automatycznego ustawiania ostrości.
ioctl(IOCTL_RESET_AUTO_FOCUS)Resetuje pozycję automatycznego ustawiania ostrości do wartości domyślnej.
ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)Blokuje do zakończenia bieżącego cyklu automatycznego ustawiania ostrości.
timeout_msdomyślnie wynosi 5000, jeśli zostanie pominięte.
FLIR Lepton:
ioctl(IOCTL_LEPTON_GET_WIDTH)Zwraca szerokość obrazu Lepton w pikselach.
ioctl(IOCTL_LEPTON_GET_HEIGHT)Zwraca wysokość obrazu Lepton w pikselach.
ioctl(IOCTL_LEPTON_GET_RADIOMETRY)Zwraca typ sensora Lepton (radiometryczny lub nie) jako liczbę całkowitą.
ioctl(IOCTL_LEPTON_GET_REFRESH)Zwraca częstotliwość odświeżania sensora Lepton w Hz.
ioctl(IOCTL_LEPTON_GET_RESOLUTION)Zwraca rozdzielczość ADC sensora Lepton w bitach.
ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)Uruchamia polecenie SDK FLIR Lepton.
cmdto 16-bitowy identyfikator polecenia zdefiniowany przez SDK.ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)Zapisuje atrybut SDK Lepton.
attr_idto 16-bitowy identyfikator atrybutu;payloadtobytes/bytearray, którego długość musi być wielokrotnością 16 bitów.ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)Odczytuje atrybut SDK Lepton.
attr_idto 16-bitowy identyfikator atrybutu;wordsto liczba 16-bitowych słów do odczytania. Zwracabytearray.ioctl(IOCTL_LEPTON_GET_FPA_TEMP)Zwraca temperaturę matrycy płaszczyzny ogniskowej (focal-plane-array) sensora Lepton w stopniach Celsjusza.
ioctl(IOCTL_LEPTON_GET_AUX_TEMP)Zwraca temperaturę pomocniczą sensora Lepton w stopniach Celsjusza.
ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)Przełącza sensor Lepton między wyjściem AGC a bezpośrednim wyjściem temperatury.
measurement_enabled=Truewłącza bezpośrednie wyjście temperatury. Opcjonalna flagahigh_temp_enabledwybiera zakres wysokich temperatur.ioctl(IOCTL_LEPTON_GET_MODE)Zwraca 2-elementową krotkę
(measurement_enabled, high_temp_enabled).ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))Ustawia zakres temperatur odwzorowany na
0..255, gdy włączony jest tryb pomiaru.ioctl(IOCTL_LEPTON_GET_RANGE)Zwraca bieżący zakres
(min_celsius, max_celsius).
Himax HM01B0 – wykrywanie ruchu:
ioctl(IOCTL_HIMAX_MD_ENABLE, enable)Włącza (
True) lub wyłącza (False) blok wykrywania ruchu na sensorze HM01B0.ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))Ustawia okno wykrywania ruchu w HM01B0.
ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)Ustawia próg wykrywania ruchu (
0–255).ioctl(IOCTL_HIMAX_MD_CLEAR)Czyści zatrzask przerwania wykrywania ruchu.
ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)Włącza (
True) lub wyłącza (False) wewnętrzny oscylator HM01B0.
Prophesee GENX320 – sensor zdarzeniowy:
ioctl(IOCTL_GENX320_SET_BIASES, preset)Stosuje zestaw wstępnie zdefiniowanych biasów.
presetto jedna ze stałychGENX320_BIASES_*.ioctl(IOCTL_GENX320_SET_BIAS, bias, value)Ustawia pojedynczy bias.
biasto jedna ze stałychGENX320_BIAS_*;valueto całkowita wartość ustawienia.ioctl(IOCTL_GENX320_SET_AFK, enable)ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)Konfiguruje filtr antymigotaniowy.
enableto wartość logiczna; opcjonalne argumenty częstotliwości ustawiają pasmo przepustowe filtra.ioctl(IOCTL_GENX320_SET_STC, mode)ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])Konfiguruje filtr kontrastu czasoprzestrzennego.
modeto jedna ze stałychGENX320_STC_*; do dwóch kolejnych argumentów jest specyficznych dla trybu.ioctl(IOCTL_GENX320_SET_MODE, mode)ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)Przełącza sensor między trybem ramkowym a zdarzeniowym.
modeto jedna ze stałychGENX320_MODE_*. W trybie zdarzeniowymevt_resto długość osi wierszy bufora zdarzeń przekazywanego doIOCTL_GENX320_READ_EVENTS.ioctl(IOCTL_GENX320_READ_EVENTS, buf)Odczytuje zdarzenia do
buf, tablicyndarraytypuuint16o kształcie(EVT_res, 6), gdzieEVT_resjest potęgą dwójki z zakresu od 1024 do 65536. Kolumny to:[0]– typ zdarzenia (PIX_OFF_EVENT/PIX_ON_EVENT/ wyzwalacz).[1]– sekundy.[2]– milisekundy.[3]– mikrosekundy.[4]– współrzędnax.[5]– współrzędnay.
Zwraca liczbę zapisanych zdarzeń.
ioctl(IOCTL_GENX320_READ_EVENTS_RAW)Zwraca obiekt
image.Imagezawierający surową ramkę zdarzeń z GENX320.ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)Wyłącza piksele, których szum jest oddalony o więcej niż
sigmaodchyleń standardowych od rozkładu normalnego.iterationsto całkowita liczba przebiegów kalibracji. Zwraca liczbę wyłączonych pikseli.
- color_palette(palette: int | None = None) int | None¶
Ustawia paletę kolorów używaną do takich celów jak konwersja skali szarości FLIR Lepton na RGB565 lub wizualizacja zdarzeń GENX320. Jedna z
image.PALETTE_RAINBOW,image.PALETTE_IRONBOWoraz (gdy obsługiwane)image.PALETTE_DEPTH,image.PALETTE_EVT_DARKlubimage.PALETTE_EVT_LIGHT.Zwraca bieżące ustawienie, jeśli wywołano bez argumentów.
Funkcje¶
Stałe¶
- csi.BINARY: int¶
Format piksela BINARY (bitmapa). Każdy piksel jest 1-bitowy. Przydatny do przechowywania masek; może być używany z
image.Image().
- csi.RGB565: int¶
Format piksela RGB565. Każdy piksel jest 16-bitowy (5 bitów czerwony, 6 bitów zielony, 5 bitów niebieski).
- csi.YUV422: int¶
Format piksela YUV422. Każdy piksel jest przechowywany jako 8-bitowa wartość Y w skali szarości, po której następują naprzemienne 8-bitowe wartości kolorów U/V współdzielone między dwiema wartościami Y (Y1, U, Y2, V, …). Tylko niektóre metody przetwarzania obrazu działają z YUV422.
- csi.JPEG: int¶
Tryb JPEG. Moduł kamery generuje skompresowane obrazy JPEG. Użyj
CSI.quality, aby kontrolować jakość JPEG. Działa tylko w kamerach OV2640/OV5640.
- csi.NORMAL: int¶
Tryb normalny dla
CSI.special_effect.
- csi.NEGATIVE: int¶
Tryb negatywu dla
CSI.special_effect.
- csi.IOCTL_SET_FOV_WIDE: int¶
Włącza optymalizację
CSI.framesizepod kątem pola widzenia zamiast FPS. ZobaczCSI.ioctl.
- csi.IOCTL_GET_FOV_WIDE: int¶
Zwraca informację, czy
CSI.framesizeoptymalizuje pod kątem pola widzenia zamiast FPS. ZobaczCSI.ioctl.
- csi.IOCTL_TRIGGER_AUTO_FOCUS: int¶
Wyzwala automatyczne ustawianie ostrości w module kamery OV5640 FPC. Zobacz
CSI.ioctl.
- csi.IOCTL_PAUSE_AUTO_FOCUS: int¶
Wstrzymuje automatyczne ustawianie ostrości (podczas działania) dla modułu kamery OV5640 FPC. Zobacz
CSI.ioctl.
- csi.IOCTL_RESET_AUTO_FOCUS: int¶
Resetuje automatyczne ustawianie ostrości do wartości domyślnej dla modułu kamery OV5640 FPC. Zobacz
CSI.ioctl.
- csi.IOCTL_WAIT_ON_AUTO_FOCUS: int¶
Czeka na zakończenie automatycznego ustawiania ostrości w module kamery OV5640 FPC. Zobacz
CSI.ioctl.
- csi.IOCTL_SET_NIGHT_MODE: int¶
Włącza lub wyłącza tryb nocny. Zmniejsza liczbę klatek, aby dynamicznie zwiększać ekspozycję. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_WIDTH: int¶
Zwraca szerokość rozdzielczości obrazu FLIR Lepton w pikselach. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_HEIGHT: int¶
Zwraca wysokość rozdzielczości obrazu FLIR Lepton w pikselach. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RADIOMETRY: int¶
Zwraca typ sensora FLIR Lepton (radiometryczny lub nie). Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_REFRESH: int¶
Zwraca częstotliwość odświeżania FLIR Lepton w Hz. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RESOLUTION: int¶
Zwraca rozdzielczość ADC FLIR Lepton w bitach. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_RUN_COMMAND: int¶
Wykonuje 16-bitowe polecenie z SDK FLIR Lepton. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_ATTRIBUTE: int¶
Ustawia atrybut FLIR Lepton z SDK FLIR Lepton. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_ATTRIBUTE: int¶
Pobiera atrybut FLIR Lepton z SDK FLIR Lepton. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_FPA_TEMP: int¶
Pobiera temperaturę FPA FLIR Lepton w stopniach Celsjusza. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_AUX_TEMP: int¶
Pobiera temperaturę AUX FLIR Lepton w stopniach Celsjusza. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_MODE: int¶
Ustawia sterownik FLIR Lepton w tryb, w którym każdy piksel jest wartością temperatury. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_MODE: int¶
Zwraca informację, czy tryb pomiaru jest włączony dla sensora FLIR Lepton. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_RANGE: int¶
Ustawia zakres temperatur odwzorowany na wartości pikseli w trybie pomiaru. Zobacz
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RANGE: int¶
Zwraca zakres temperatur używany w trybie pomiaru. Zobacz
CSI.ioctl.
- csi.IOCTL_GENX320_SET_BIASES: int¶
Ustawia biasy sensora GENX320 na jeden z zestawów wstępnie zdefiniowanych
GENX320_BIASES_*. ZobaczCSI.ioctl. PoCSI.resetsterownik stosujecsi.GENX320_BIASES_LOW_NOISE, a niecsi.GENX320_BIASES_DEFAULT— użyj tego ioctl, aby przełączyć się na inny zestaw, gdy aplikacja wymaga większej czułości lub przepustowości.
- csi.GENX320_BIASES_DEFAULT: int¶
Domyślne wartości z karty katalogowej GenX320 — zrównoważona czułość, szum i przepustowość dla ogólnych scen.
- csi.GENX320_BIASES_LOW_LIGHT: int¶
Dostosowany do warunków słabego oświetlenia — oba progi kontrastu poluzowane dla większej czułości, FO obniżone, HPF wyłączony, dzięki czemu powolne zmiany jasności nadal są rejestrowane.
- csi.GENX320_BIASES_ACTIVE_MARKER: int¶
Dostosowany do śledzenia migoczących diod LED o wysokim kontraście (aktywnych znaczników) — progi kontrastu podniesione, aby tylko ostre przejścia wyzwalały zdarzenia, FO i HPF podkręcone do maksimum, by zmaksymalizować przepustowość i odrzucić powolny dryf otoczenia, REFR=0, aby każda krawędź mignięcia była rejestrowana.
- csi.GENX320_BIASES_LOW_NOISE: int¶
Domyślny dla sterownika — niższa czułość niż
DEFAULT(podniesione progi kontrastu) i niższe FO dla mniejszej aktywności szumu tła. Najlepszy dla scen statycznych lub powolnych, w których fałszywe zdarzenia dominowałyby.
- csi.GENX320_BIASES_HIGH_SPEED: int¶
Dostosowany do scen z szybkim ruchem — wyższe FO dla szerszej przepustowości pikseli, wyższy HPF, aby odrzucić powolne zmiany, wyższy REFR dla dłuższego czasu martwego po każdym zdarzeniu, aby odczyt się nie nasycał.
- csi.IOCTL_GENX320_SET_BIAS: int¶
Ustawia pojedynczy bias sensora GENX320 na wartość DAC. Przekaż stałą
GENX320_BIAS_*(csi.GENX320_BIAS_DIFF_OFF,csi.GENX320_BIAS_DIFF_ON,csi.GENX320_BIAS_FO,csi.GENX320_BIAS_HPFlubcsi.GENX320_BIAS_REFR) oraz całkowitą wartość DAC. Każdy bias jest niezależny — wywołuj ten ioctl wielokrotnie, aby dostroić tylko potrzebne biasy po zastosowaniu zestawu. ZobaczCSI.ioctl.
- csi.GENX320_BIAS_DIFF_OFF: int¶
Próg kontrastu komparatora ujemnego — kontroluje, o ile piksel musi pociemnieć, zanim wyzwoli się
csi.PIX_OFF_EVENT. Niższa wartość = większa czułość (więcej zdarzeń).
- csi.GENX320_BIAS_DIFF_ON: int¶
Próg kontrastu komparatora dodatniego — kontroluje, o ile piksel musi rozjaśnić się, zanim wyzwoli się
csi.PIX_ON_EVENT. Niższa wartość = większa czułość (więcej zdarzeń).
- csi.GENX320_BIAS_FO: int¶
Częstotliwość odcięcia dolnoprzepustowa piksela — równoważy przepustowość piksela (szybkość/opóźnienie) względem aktywności szumu tła. Wyższa wartość = szybsza reakcja piksela, więcej szumu.
- csi.GENX320_BIAS_HPF: int¶
Częstotliwość odcięcia górnoprzepustowa piksela — odrzuca powolne zmiany jasności. Wyższa wartość = więcej powolnych zmian odfiltrowanych (rejestrowane są tylko szybkie przejścia).
- csi.GENX320_BIAS_REFR: int¶
Okres refrakcji piksela — czas martwy po wyemitowaniu przez piksel zdarzenia, podczas którego nie może on ponownie się wyzwolić. Wyższa wartość = dłuższy czas martwy, mniej zdarzeń z aktywnego piksela.
- csi.IOCTL_GENX320_SET_AFK: int¶
Ustawia filtr antymigotaniowy (AFK) GENX320, który odrzuca zdarzenia z pikseli przełączających się w okresowym paśmie częstotliwości (oświetlenie jarzeniowe, wyświetlacze sterowane LED itp.). Przekaż
enable(1, aby włączyć, 0, aby wyłączyć) oraz, przy włączaniu, krawędzie pasma w hercach:(enable, freq_low_hz, freq_high_hz). ZobaczCSI.ioctl.
- csi.IOCTL_GENX320_SET_STC: int¶
Ustawia tryb filtra kontrastu czasoprzestrzennego (STC) GENX320. Przekaż stałą
GENX320_STC_*(csi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLY,csi.GENX320_STC_TRAIL), a po niej próg(i) wymagany przez tryb (w milisekundach). ZobaczCSI.ioctl.
- csi.GENX320_STC_DISABLE: int¶
Wyłącza filtr STC/trail GENX320 — każde zdarzenie przechodzi przez filtr.
- csi.GENX320_STC_ONLY: int¶
Zachowuje drugie zdarzenie serii; odrzuca pierwsze zdarzenie i wszelkie późniejsze zdarzenia. Przyjmuje jeden parametr,
stc_thresholdw milisekundach — zdarzenia w tym oknie od poprzedniego zdarzenia na tym samym pikselu są uznawane za część tej samej serii.
- csi.GENX320_STC_TRAIL_ONLY: int¶
Zachowuje pierwsze zdarzenie serii; odrzuca kolejne zdarzenia na tym samym pikselu, dopóki nie upłynie
trail_threshold. Przyjmuje jeden parametr,trail_thresholdw milisekundach.
- csi.GENX320_STC_TRAIL: int¶
Zachowuje pierwsze zdarzenie serii oraz kolejne krawędzie — łączy
csi.GENX320_STC_ONLYicsi.GENX320_STC_TRAIL_ONLY. Przyjmuje dwa parametry,stc_thresholditrail_threshold(oba w ms); sensor wymaga, aby te dwie wartości pozostawały w stosunku zbliżonym do 13:1.
- csi.IOCTL_GENX320_SET_MODE: int¶
Ustawia tryb pracy GENX320. Przekaż
csi.GENX320_MODE_HISTOdla histogramu zdarzeń na układzie (kamera zachowuje się jak zwykła kamera w skali szarości przy skonfigurowanej liczbie klatek) lubcsi.GENX320_MODE_EVENT, a po nim długość osi wierszy tablicy zdarzeńndarray(potęgę dwójki z zakresu od 1024 do 65536) dla strumieniowania surowych zdarzeń. ZobaczCSI.ioctl.
- csi.GENX320_MODE_HISTO: int¶
Tryb histogramu — zdarzenia są gromadzone na układzie w przegrodach na piksel i raportowane jako ramka 320x320 w skali szarości przy skonfigurowanej szybkości (~20-350 FPS). Kamera wygląda jak zwykła kamera, więc wszystkie standardowe procedury przetwarzania obrazu działają bezpośrednio.
- csi.GENX320_MODE_EVENT: int¶
Tryb zdarzeniowy — omija histogram na układzie i strumieniuje surowe zdarzenia do tablicy numpy
ndarrayze znacznikami czasu w mikrosekundach, dla aplikacji wymagających pełnego szczegółu czasowego zamiast wstępnie pogrupowanej ramki.
- csi.IOCTL_GENX320_READ_EVENTS: int¶
Odczytuje surowe zdarzenia do tablicy
ndarraytypu uint16 o kształcie(EVT_res, 6)(gdzieEVT_resodpowiada rozmiarowi bufora przekazanemu docsi.IOCTL_GENX320_SET_MODE). Kolumny to[0]typ zdarzenia (csi.PIX_OFF_EVENT,csi.PIX_ON_EVENT,csi.EXT_TRIGGER_RISING/FALLING,csi.RST_TRIGGER_RISING/FALLING),[1]znacznik czasu w sekundach,[2]milisekundy,[3]mikrosekundy,[4]współrzędna X (0-319),[5]współrzędna Y (0-319). Zwraca liczbę zdarzeń zapisanych do bufora, pozostawiając starsze wiersze poza tą liczbą nietknięte. ZobaczCSI.ioctl.
- csi.IOCTL_GENX320_CALIBRATE: int¶
Automatycznie wyłącza gorące piksele — piksele, które wyzwalają się fałszywie nawet na scenie statycznej. Sterownik buduje licznik trafień 320x320 na piksel, oblicza średnią i odchylenie standardowe oraz wyłącza każdy piksel, którego licznik przekracza
mean + sigma * stddev. Przekaż budżet liczby zdarzeń (zdarzenia do zliczenia przed obliczeniem statystyk — wyższy = bardziej wiarygodne oszacowanie, wolniejsze; ~10000 to dobra wartość domyślna) oraz wartość sigma typu float (niższa = bardziej agresywna, ~0.5 domyślnie). Zwraca liczbę wyłączonych pikseli. Najpierw skieruj kamerę na scenę statyczną, aby zdarzenia wywołane ruchem nie były zliczane na niekorzyść pikseli, które faktycznie działają poprawnie. ZobaczCSI.ioctl.
- csi.IOCTL_GENX320_READ_EVENTS_RAW: int¶
Zwraca surową ramkę zdarzeń
image.Imagez GENX320, ze zdarzeniami nadal w natywnym, spakowanym kodowaniu układu — przydatne, jeśli chcesz przekazać surowy strumień do komputera w celu dekodowania offline, zamiast przetwarzać go na kamerze. ZobaczCSI.ioctl.
- csi.PIX_OFF_EVENT: int¶
Typ zdarzenia GENX320 (kolumna
[0]) — piksel wykrył spadek jasności (przekroczony został próg kontrastu ujemnego). Kolumny[4]/[5]zawierają X/Y piksela.
- csi.PIX_ON_EVENT: int¶
Typ zdarzenia GENX320 (kolumna
[0]) — piksel wykrył wzrost jasności (przekroczony został próg kontrastu dodatniego). Kolumny[4]/[5]zawierają X/Y piksela.
- csi.RST_TRIGGER_RISING: int¶
Typ zdarzenia GENX320 (kolumna
[0]) — wyzwalacz resetu piksela, zbocze narastające. X/Y są nieużywane. Nie jest generowane przez oprogramowanie układowe w tej chwili.
- csi.RST_TRIGGER_FALLING: int¶
Typ zdarzenia GENX320 (kolumna
[0]) — wyzwalacz resetu piksela, zbocze opadające. X/Y są nieużywane. Nie jest generowane przez oprogramowanie układowe w tej chwili.