csi — датчики камеры

Модуль csi — это современный объектно-ориентированный интерфейс к датчику (датчикам) камеры на OpenMV Cam. Каждый физический датчик представлен экземпляром CSI, поэтому платы мультиспектральных формирователей изображения, объединяющие цветной датчик с тепловым или событийным, могут управлять каждым из них независимо, передавая разный cid в конструктор. Камеры с одним датчиком просто создают один экземпляр CSI.

Объект CSI владеет всей конфигурацией датчика — формат пикселей, размер кадра / окно, экспозиция / усиление / баланс белого, аппаратное зеркальное отражение и переворот, тестовый шаблон цветных полос, тактовая частота кадров, ROI для автоэкспозиции, а также команды ioctl, специфичные для конкретной микросхемы. Кадры захватываются с помощью CSI.snapshot(), который возвращает image.Image, опирающийся на буфер кадра.

Этот модуль заменяет устаревший модуль sensor (который предоставлял ту же функциональность в виде функций уровня модуля, привязанных к единственному скрытому датчику). В новом коде следует использовать CSI.

Пример использования:

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

Использование с asyncio

Блокирующий цикл CSI.snapshot(), показанный выше, не взаимодействует с циклом событий asyncio — пока snapshot ожидает следующий кадр, все остальные сопрограммы в программе заморожены. Чтобы цикл захвата мог сосуществовать с другой параллельной работой (UART-клиентом, наблюдателем за кнопкой, сетевой задачей), оберните CSI в небольшой адаптер, превращающий snapshot в дружественную к await сопрограмму путём опроса snapshot(blocking=False) и передачи управления циклу событий между проверками:

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__ перенаправляет все остальные атрибуты (reset, pixformat, framesize, регуляторы датчика) к базовому CSI, так что обёртка является полностью совместимой заменой. Первый неблокирующий вызов также запускает DMA-захват камеры, если он ещё не был запущен, поэтому никакой дополнительной начальной настройки не требуется.

Цикл захвата затем встраивается в более крупную asyncio-программу как ещё одна сопрограмма:

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

Настройка framebuffers по-прежнему важна в этой форме — режим одного буфера приводит к тому, что snapshot(blocking=False) возвращает None до тех пор, пока не будет захвачен следующий кадр, тогда как двойная или тройная буферизация сглаживает это, так что обёртка обычно находит буферизованный кадр, ожидающий на первом опросе. Полное пошаговое руководство см. в завершающем разделе AsyncCSI учебника по asyncio.

класс CSI – интерфейс датчика камеры

Класс CSI используется для управления датчиком камеры.

class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)

Создаёт объект для взаимодействия с датчиком камеры. На платах с несколькими датчиками конкретный объект CSI может быть выбран передачей cid, например csi.LEPTON, для выбора модуля датчика FLIR Lepton. Если cid равен -1, выбирается основной датчик (обычно это модуль цветной камеры на многодатчиковых платах).

Если delays равно False, то все задержки на стабилизацию в драйвере csi отключаются. По умолчанию драйвер датчика делает задержку после сброса / смены режима, чтобы предотвратить возврат повреждённых кадров методом CSI.snapshot. Отключение задержек позволяет вам пакетно применять обновления и сделать одну задержку в конце перед вызовом CSI.snapshot.

Если fflush равно False, то автоматический сброс буфера кадра, упомянутый в CSI.framebuffers, отключается. Это снимает любое ограничение по времени на кадры в очереди (fifo) буфера кадра.

stream определяет, является ли данный CSI источником потока, отправляемого в IDE. Если None (по умолчанию), CSI становится источником потока только если он является основным (не вспомогательным) датчиком. Передайте True, чтобы принудительно сделать этот CSI источником потока, или любое ложное значение, чтобы оставить существующий источник потока без изменений.

Методы

reset(hard: bool = True) None

Инициализирует датчик камеры. Выполняет аппаратный сброс путём переключения сигнала GPIO RESET, идущего к модулю камеры, если hard равно True. hard следует устанавливать в false при сбросе вспомогательных датчиков камеры, использующих тот же сигнал GPIO RESET, что и основной модуль.

shutdown(enable: bool) None

Переводит камеру в режим энергопотребления более низкий, чем сон (но камера должна быть сброшена при пробуждении).

sleep(enable: bool) None

Переводит камеру в режим сна, если enable равно True. В противном случае пробуждает её обратно.

flush() None

Копирует текущее содержимое буфера кадра в предпросмотр IDE. Вызывайте это после последнего CSI.snapshot, если скрипт завершается, чтобы IDE показала последний кадр.

snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None

Делает снимок с помощью камеры и возвращает объект image.Image.

Если переданы time и/или frames, snapshot будет блокировать на указанное количество миллисекунд time и/или количество кадров frames, захваченных с камеры. Оба аргумента могут использоваться одновременно. После того как пройдёт time и/или frames, snapshot вернёт None.

blocking может быть False для включения неблокирующего поведения, при котором snapshot вернёт None, когда следующее изображение с камеры не готово, вместо ожидания.

image может быть другим объектом image.Image для обновления новым изображением, захваченным с камеры, вместо возврата нового объекта image.Image. Предыдущее содержимое изображения перезаписывается через глубокое копирование.

Если включён CSI.auto_rotation, этот метод вернёт уже повёрнутый image.Image.

width() int

Возвращает ширину разрешения датчика.

height() int

Возвращает высоту разрешения датчика.

cid() int

Возвращает идентификатор микросхемы модуля камеры. Сравнивайте с любым из 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.FROGEYE2020 или csi.SOFTCSI.

readable() bool

Возвращает True, если есть изображение, готовое к возврату методом CSI.snapshot, так что вызов snapshot не будет блокировать.

pixformat(pixformat: int | None = None) int | None

Устанавливает формат пикселей для модуля камеры в один из csi.GRAYSCALE, csi.RGB565, csi.BAYER, csi.YUV422 или csi.JPEG (только на OV2640/OV5640).

Возвращает текущий pixformat, если вызывается без аргументов.

framesize(framesize: int | Tuple[int, int] | None = None) int | None

Устанавливает размер кадра для модуля камеры в одну из констант размера (например, csi.QVGA, csi.VGA, csi.HD и т. д. — см. раздел констант).

В качестве альтернативы вы можете передать пользовательский размер кадра в виде кортежа (w, h). При вызове CSI.snapshot пользовательский размер кадра будет проверен на соответствие правилам DMA. Как правило, размеры кадра должны быть кратны 8 пикселям и/или 16 байтам.

Возвращает текущий framesize, если вызывается без аргументов.

framerate(rate: int | None = None) int | None

Устанавливает частоту кадров в Гц для модуля камеры.

Возвращает текущий framerate, если вызывается без аргументов.

Примечание

CSI.framerate работает путём отбрасывания кадров, получаемых от модуля камеры, чтобы удерживать частоту кадров на указанном уровне или ниже. По умолчанию камера работает с максимальной частотой кадров. Если это реализовано для конкретного датчика камеры, CSI.framerate также уменьшит частоту кадров датчика камеры внутренне, чтобы сэкономить энергию и улучшить качество изображения за счёт увеличения экспозиции датчика. CSI.framerate может конфликтовать с CSI.auto_exposure на некоторых камерах.

window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None

Устанавливает разрешение камеры в подобласть текущего разрешения. roi — это кортеж (x, y, w, h). Вы также можете передать (w, h), и окно будет отцентрировано.

Возвращает текущий кортеж (x, y, w, h), если вызывается без аргументов.

gainceiling(gainceiling: int) bool

Устанавливает потолок усиления изображения камеры в одно из значений 2, 4, 8, 16, 32, 64 или 128.

Возвращает True при успехе и False при неудаче.

brightness(brightness: int) bool

Устанавливает яркость изображения камеры.

Возвращает True при успехе и False при неудаче.

contrast(contrast: int) bool

Устанавливает контрастность изображения камеры.

Возвращает True при успехе и False при неудаче.

saturation(saturation: int) bool

Устанавливает насыщенность изображения камеры.

Возвращает True при успехе и False при неудаче.

quality(quality: int) bool

Устанавливает качество JPEG-сжатия изображения камеры. От 0 до 100.

Возвращает True при успехе и False при неудаче.

Примечание

Только для камер OV2640/OV5640.

colorbar(enable: bool) bool

Включает (True) или выключает (False) режим цветных полос. По умолчанию выключено.

Возвращает True при успехе и False при неудаче.

auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None

enable включает (True) или выключает (False) автоматическую регулировку усиления. Камера запускается с включённой автоматической регулировкой усиления.

Если enable равно False, вы можете установить фиксированное усиление в децибелах с помощью gain_db.

Если enable равно True, вы можете установить максимальный потолок усиления в децибелах с помощью gain_db_ceiling для алгоритма автоматической регулировки усиления.

Примечание

Вам также нужно выключить баланс белого, если вы хотите отслеживать цвета.

gain_db() float

Возвращает текущее значение усиления камеры в децибелах.

auto_exposure(enable: bool, exposure_us: int = -1) None

enable включает (True) или выключает (False) автоматическую регулировку экспозиции. Камера запускается с включённой автоматической регулировкой экспозиции.

Если enable равно False, вы можете установить фиксированное время экспозиции в микросекундах с помощью exposure_us.

Примечание

Алгоритмы автоэкспозиции камеры довольно консервативны в том, насколько они корректируют значение экспозиции, и обычно избегают сильного изменения значения экспозиции. Вместо этого они сильно изменяют значение усиления, чтобы справиться с меняющимся освещением.

exposure_us() int

Возвращает текущее значение экспозиции камеры в микросекундах.

auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None

enable включает (True) или выключает (False) автоматический баланс белого. Камера запускается с включённым автоматическим балансом белого.

Если enable равно False, вы можете установить фиксированное усиление в децибелах для красного, зелёного и синего каналов соответственно с помощью rgb_gain_db.

Примечание

Вам также нужно выключить регулировку усиления, если вы хотите отслеживать цвета.

rgb_gain_db() Tuple[float, float, float]

Возвращает кортеж (r, g, b) текущих значений усиления красного, зелёного и синего каналов камеры в децибелах.

auto_blc(enable: bool, regs: List[int] | None = None) None

Устанавливает автоматическую калибровку уровня чёрного (BLC) на камере.

enable передайте True или False, чтобы включить или выключить BLC. Обычно вы всегда хотите, чтобы это было включено.

regs если выключено, то вы можете вручную установить значения регистров BLC из предыдущего вызова CSI.blc_regs.

blc_regs() List[int]

Возвращает регистры BLC датчика в виде списка целых чисел. Для использования с CSI.auto_blc.

hmirror(enable: bool | None = None) bool | None

Включает (True) или выключает (False) режим горизонтального зеркального отражения. По умолчанию выключено.

Возвращает текущую настройку, если вызывается без аргументов.

vflip(enable: bool | None = None) bool | None

Включает (True) или выключает (False) режим вертикального переворота. По умолчанию выключено.

Возвращает текущую настройку, если вызывается без аргументов.

transpose(enable: bool | None = None) bool | None

Включает (True) или выключает (False) режим транспонирования. По умолчанию выключено.

  • vflip=False, hmirror=False, transpose=False -> поворот на 0 градусов

  • vflip=True, hmirror=False, transpose=True -> поворот на 90 градусов

  • vflip=True, hmirror=True, transpose=False -> поворот на 180 градусов

  • vflip=False, hmirror=True, transpose=True -> поворот на 270 градусов

Возвращает текущую настройку, если вызывается без аргументов.

auto_rotation(enable: bool | None = None) bool | None

Включает (True) или выключает (False) режим автоматического поворота. По умолчанию выключено.

Возвращает текущую настройку, если вызывается без аргументов.

Примечание

Этот метод работает только когда на OpenMV Cam установлен imu, и включается автоматически.

framebuffers(count: int | None = None) int | None

Устанавливает количество буферов кадра, используемых для приёма данных изображения. По умолчанию OpenMV Cam попытается выделить максимальное количество буферов кадра, которое возможно. Перераспределение происходит всякий раз, когда вызываются CSI.pixformat, CSI.framesize или CSI.window.

count равный 1 (одинарный буфер), 2 (двойной буфер) или 3 (тройной буфер) выбирает соответствующий режим захвата. Передайте 4 или больше, чтобы перевести драйвер в режим видео-FIFO, где ставятся в очередь count буферов — полезно для записи видео на SD-карту. При пропуске кадра все буферы кадра, кроме активного, очищаются, так что CSI.snapshot всегда возвращает недавний кадр.

Возвращает текущее значение count, если вызывается без аргументов.

special_effect(effect: int) bool

Устанавливает специальный цифровой эффект (один из csi.NORMAL или csi.NEGATIVE).

Возвращает True при успехе и False при неудаче.

lens_correction(enable: bool, radi: int, coef: int) bool

enable True чтобы включить, False чтобы выключить. radi целочисленный радиус пикселей для коррекции. coef степень коррекции.

Возвращает True при успехе и False при неудаче.

vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None

Регистрирует функцию обратного вызова cb для выполнения (в контексте прерывания) всякий раз, когда модуль камеры генерирует новый кадр (но до того, как кадр будет получен).

cb принимает один аргумент, и ему передаётся текущее состояние вывода vsync после изменения.

Возвращает зарегистрированную функцию обратного вызова, если вызывается без аргументов. Передайте любое не вызываемое (non-callable) значение, чтобы очистить функцию обратного вызова.

frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None

Регистрирует функцию обратного вызова cb для выполнения (в контексте прерывания) всякий раз, когда модуль камеры генерирует новый кадр и кадр готов к чтению через CSI.snapshot.

cb не принимает аргументов. Используйте это, чтобы запланировать чтение кадра позже с помощью micropython.schedule().

Возвращает зарегистрированную функцию обратного вызова, если вызывается без аргументов. Передайте любое не вызываемое (non-callable) значение, чтобы очистить функцию обратного вызова.

ioctl(request: int, *args) Any

Выполняет запрос, специфичный для датчика. request — это одна из констант IOCTL_*; остальные позиционные аргументы и возвращаемое значение зависят от запроса. Поддерживаемые запросы сгруппированы по семействам датчиков ниже.

Общие (любой датчик):

ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))

ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))

Устанавливает окно считывания датчика. Меньшее окно повышает частоту кадров ценой поля зрения.

ioctl(IOCTL_GET_READOUT_WINDOW)

Возвращает текущее окно считывания в виде кортежа (x, y, w, h).

ioctl(IOCTL_SET_TRIGGERED_MODE, enable)

Включает (True) или выключает (False) режим запуска по триггеру на MT9V034.

ioctl(IOCTL_GET_TRIGGERED_MODE)

Возвращает текущее состояние режима запуска по триггеру в виде bool.

ioctl(IOCTL_SET_FOV_WIDE, enable)

Когда True, указывает framesize() оптимизировать поле зрения, а не частоту кадров.

ioctl(IOCTL_GET_FOV_WIDE)

Возвращает текущее состояние режима широкого поля зрения в виде bool.

ioctl(IOCTL_SET_NIGHT_MODE, enable)

Включает (True) или выключает (False) «ночной режим» датчика для слабого освещения. Только OV7725 и OV5640.

ioctl(IOCTL_GET_NIGHT_MODE)

Возвращает текущее состояние ночного режима в виде bool.

ioctl(IOCTL_GET_RGB_STATS)

Возвращает 4-элементный кортеж необработанной статистики RGB-каналов (r, gb, gr, b), считанной с датчика (обычно используется для настройки баланса белого).

OV5640 FPC – автофокус:

ioctl(IOCTL_TRIGGER_AUTO_FOCUS)

Запускает проход автофокусировки на модуле OV5640 FPC.

ioctl(IOCTL_PAUSE_AUTO_FOCUS)

Приостанавливает выполняющийся проход автофокусировки.

ioctl(IOCTL_RESET_AUTO_FOCUS)

Сбрасывает положение автофокуса в значение по умолчанию.

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)

Блокирует до завершения текущего прохода автофокусировки. timeout_ms по умолчанию равен 5000, если не указан.

FLIR Lepton:

ioctl(IOCTL_LEPTON_GET_WIDTH)

Возвращает ширину изображения Lepton в пикселях.

ioctl(IOCTL_LEPTON_GET_HEIGHT)

Возвращает высоту изображения Lepton в пикселях.

ioctl(IOCTL_LEPTON_GET_RADIOMETRY)

Возвращает тип Lepton (радиометрический или нет) в виде int.

ioctl(IOCTL_LEPTON_GET_REFRESH)

Возвращает частоту обновления Lepton в Гц.

ioctl(IOCTL_LEPTON_GET_RESOLUTION)

Возвращает разрешение АЦП Lepton в битах.

ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)

Выполняет команду FLIR Lepton SDK. cmd — это 16-битный идентификатор команды, определённый SDK.

ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)

Записывает атрибут Lepton SDK. attr_id — это 16-битный идентификатор атрибута; payload — это bytes/bytearray, длина которого должна быть кратна 16 битам.

ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)

Читает атрибут Lepton SDK. attr_id — это 16-битный идентификатор атрибута; words — это количество 16-битных слов для чтения. Возвращает bytearray.

ioctl(IOCTL_LEPTON_GET_FPA_TEMP)

Возвращает температуру матрицы фокальной плоскости Lepton в градусах Цельсия.

ioctl(IOCTL_LEPTON_GET_AUX_TEMP)

Возвращает вспомогательную температуру Lepton в градусах Цельсия.

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)

Переключает Lepton между выводом AGC и прямого измерения температуры. measurement_enabled=True включает прямой вывод температуры. Необязательный флаг high_temp_enabled выбирает высокотемпературный диапазон.

ioctl(IOCTL_LEPTON_GET_MODE)

Возвращает 2-элементный кортеж (measurement_enabled, high_temp_enabled).

ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))

Устанавливает диапазон температур, отображаемый на 0..255, когда включён режим измерения.

ioctl(IOCTL_LEPTON_GET_RANGE)

Возвращает текущий диапазон (min_celsius, max_celsius).

Himax HM01B0 – обнаружение движения:

ioctl(IOCTL_HIMAX_MD_ENABLE, enable)

Включает (True) или выключает (False) встроенный в датчик блок обнаружения движения HM01B0.

ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))

ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))

Устанавливает окно обнаружения движения на HM01B0.

ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)

Устанавливает порог обнаружения движения (0255).

ioctl(IOCTL_HIMAX_MD_CLEAR)

Очищает фиксатор прерывания обнаружения движения.

ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)

Включает (True) или выключает (False) внутренний генератор HM01B0.

Prophesee GENX320 – событийный датчик:

ioctl(IOCTL_GENX320_SET_BIASES, preset)

Применяет предустановку смещений (bias). preset — это одна из констант GENX320_BIASES_*.

ioctl(IOCTL_GENX320_SET_BIAS, bias, value)

Устанавливает одно смещение (bias). bias — это одна из констант GENX320_BIAS_*; value — целочисленное значение настройки.

ioctl(IOCTL_GENX320_SET_AFK, enable)

ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)

Настраивает фильтр антимерцания. enable — это bool; необязательные аргументы частоты задают полосу пропускания фильтра.

ioctl(IOCTL_GENX320_SET_STC, mode)

ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])

Настраивает фильтр пространственно-временного контраста. mode — это одна из констант GENX320_STC_*; до двух дополнительных аргументов зависят от режима.

ioctl(IOCTL_GENX320_SET_MODE, mode)

ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)

Переключает датчик между кадровым и событийным режимами. mode — это одна из констант GENX320_MODE_*. Для событийного режима evt_res — это длина по оси строк буфера событий, передаваемого в IOCTL_GENX320_READ_EVENTS.

ioctl(IOCTL_GENX320_READ_EVENTS, buf)

Читает события в buf, ndarray типа uint16 формы (EVT_res, 6), где EVT_res — степень двойки от 1024 до 65536. Столбцы:

  • [0] – тип события (PIX_OFF_EVENT / PIX_ON_EVENT / триггер).

  • [1] – секунды.

  • [2] – миллисекунды.

  • [3] – микросекунды.

  • [4] – координата x.

  • [5] – координата y.

Возвращает количество записанных событий.

ioctl(IOCTL_GENX320_READ_EVENTS_RAW)

Возвращает image.Image, содержащий необработанный кадр событий с GENX320.

ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)

Отключает пиксели, шум которых отличается более чем на sigma стандартных отклонений от нормального распределения. iterations — это целочисленное количество проходов калибровки. Возвращает количество отключённых пикселей.

color_palette(palette: int | None = None) int | None

Устанавливает цветовую палитру, используемую для таких вещей, как преобразование оттенков серого FLIR Lepton в RGB565 или визуализация событий GENX320. Одна из image.PALETTE_RAINBOW, image.PALETTE_IRONBOW и (где поддерживается) image.PALETTE_DEPTH, image.PALETTE_EVT_DARK или image.PALETTE_EVT_LIGHT.

Возвращает текущую настройку, если вызывается без аргументов.

__write_reg(address: int, value: int) None

Записывает value в регистр камеры по адресу address.

Примечание

Информацию о регистрах см. в техническом описании камеры.

__read_reg(address: int) int

Читает регистр камеры по адресу address.

Примечание

Информацию о регистрах см. в техническом описании камеры.

Функции

csi.devices() List[int]

Возвращает список обнаруженных идентификаторов микросхем датчиков.

Константы

csi.BINARY: int

Формат пикселей BINARY (растровое изображение). Каждый пиксель занимает 1 бит. Полезно для хранения масок; может использоваться с image.Image().

csi.GRAYSCALE: int

Формат пикселей GRAYSCALE (Y из YUV422). Каждый пиксель занимает 8 бит.

csi.RGB565: int

Формат пикселей RGB565. Каждый пиксель занимает 16 бит (5 бит красный, 6 бит зелёный, 5 бит синий).

csi.BAYER: int

Формат пикселей RAW BAYER.

csi.YUV422: int

Формат пикселей YUV422. Каждый пиксель хранится как 8-битное значение яркости Y в оттенках серого, за которым следуют чередующиеся 8-битные значения цвета U/V, общие для двух значений Y (Y1, U, Y2, V, …). Только некоторые методы обработки изображений работают с YUV422.

csi.JPEG: int

Режим JPEG. Модуль камеры выводит сжатые JPEG-изображения. Используйте CSI.quality для управления качеством JPEG. Работает только для камер OV2640/OV5640.

csi.OV2640: int

CSI.cid возвращает это для камеры OV2640.

csi.OV5640: int

CSI.cid возвращает это для камеры OV5640.

csi.OV7670: int

CSI.cid возвращает это для камеры OV7670.

csi.OV7690: int

CSI.cid возвращает это для камеры OV7690.

csi.OV7725: int

CSI.cid возвращает это для камеры OV7725.

csi.OV9650: int

CSI.cid возвращает это для камеры OV9650.

csi.MT9V022: int

CSI.cid возвращает это для камеры MT9V022.

csi.MT9V024: int

CSI.cid возвращает это для камеры MT9V024.

csi.MT9V032: int

CSI.cid возвращает это для камеры MT9V032.

csi.MT9V034: int

CSI.cid возвращает это для камеры MT9V034.

csi.MT9M114: int

CSI.cid возвращает это для камеры MT9M114.

csi.BOSON320: int

CSI.cid возвращает это для камеры BOSON 320x256.

csi.BOSON640: int

CSI.cid возвращает это для камеры BOSON 640x512.

csi.LEPTON: int

CSI.cid возвращает это для камер LEPTON1/2/3.

csi.HM01B0: int

CSI.cid возвращает это для камеры HM01B0.

csi.HM0360: int

CSI.cid возвращает это для камеры HM0360.

csi.GC2145: int

CSI.cid возвращает это для камеры GC2145.

csi.GENX320ES: int

CSI.cid возвращает это для камеры GENX320 (инженерный образец).

csi.GENX320: int

CSI.cid возвращает это для камеры GENX320.

csi.PAG7920: int

CSI.cid возвращает это для камеры PAG7920.

csi.PAG7936: int

CSI.cid возвращает это для камеры PAG7936.

csi.PAJ6100: int

CSI.cid возвращает это для камеры PAJ6100.

csi.FROGEYE2020: int

CSI.cid возвращает это для камеры FROGEYE2020.

csi.SOFTCSI: int

CSI.cid возвращает это для программной камеры CSI.

csi.NORMAL: int

Обычный режим для CSI.special_effect.

csi.NEGATIVE: int

Негативный режим для CSI.special_effect.

csi.QCIF: int

Разрешение 176x144 для датчика камеры.

csi.CIF: int

Разрешение 352x288 для датчика камеры.

csi.QSIF: int

Разрешение 176x120 для датчика камеры.

csi.SIF: int

Разрешение 352x240 для датчика камеры.

csi.QQQVGA: int

Разрешение 80x60 для датчика камеры.

csi.QQVGA: int

Разрешение 160x120 для датчика камеры.

csi.QVGA: int

Разрешение 320x240 для датчика камеры.

csi.VGA: int

Разрешение 640x480 для датчика камеры.

csi.HQVGA: int

Разрешение 240x160 для датчика камеры.

csi.HVGA: int

Разрешение 480x320 для датчика камеры.

csi.WVGA: int

Разрешение 720x480 для датчика камеры MT9V034.

csi.WVGA2: int

Разрешение 752x480 для датчика камеры MT9V034.

csi.SVGA: int

Разрешение 800x600 для датчика камеры.

csi.XGA: int

Разрешение 1024x768 для датчика камеры.

csi.WXGA: int

Разрешение 1280x768 для датчика камеры MT9M114.

csi.SXGA: int

Разрешение 1280x1024 для датчика камеры. Работает только для камер OV2640/OV5640.

csi.SXGAM: int

Разрешение 1280x960 для датчика камеры MT9M114.

csi.UXGA: int

Разрешение 1600x1200 для датчика камеры. Работает только для камер OV2640/OV5640.

csi.HD: int

Разрешение 1280x720 для датчика камеры.

csi.FHD: int

Разрешение 1920x1080 для датчика камеры. Работает только для камеры OV5640.

csi.QHD: int

Разрешение 2560x1440 для датчика камеры. Работает только для камеры OV5640.

csi.QXGA: int

Разрешение 2048x1536 для датчика камеры. Работает только для камеры OV5640.

csi.WQXGA: int

Разрешение 2560x1600 для датчика камеры. Работает только для камеры OV5640.

csi.WQXGA2: int

Разрешение 2592x1944 для датчика камеры. Работает только для камеры OV5640.

csi.IOCTL_SET_READOUT_WINDOW: int

Устанавливает окно считывания. См. CSI.ioctl.

csi.IOCTL_GET_READOUT_WINDOW: int

Получает окно считывания. См. CSI.ioctl.

csi.IOCTL_SET_TRIGGERED_MODE: int

Устанавливает режим запуска по триггеру для MT9V034. См. CSI.ioctl.

csi.IOCTL_GET_TRIGGERED_MODE: int

Получает состояние режима запуска по триггеру для MT9V034. См. CSI.ioctl.

csi.IOCTL_SET_FOV_WIDE: int

Включает оптимизацию CSI.framesize для поля зрения в ущерб FPS. См. CSI.ioctl.

csi.IOCTL_GET_FOV_WIDE: int

Возвращает, оптимизирует ли CSI.framesize поле зрения в ущерб FPS. См. CSI.ioctl.

csi.IOCTL_TRIGGER_AUTO_FOCUS: int

Запускает автофокус на модуле камеры OV5640 FPC. См. CSI.ioctl.

csi.IOCTL_PAUSE_AUTO_FOCUS: int

Приостанавливает автофокус (во время работы) для модуля камеры OV5640 FPC. См. CSI.ioctl.

csi.IOCTL_RESET_AUTO_FOCUS: int

Сбрасывает автофокус в значение по умолчанию для модуля камеры OV5640 FPC. См. CSI.ioctl.

csi.IOCTL_WAIT_ON_AUTO_FOCUS: int

Ожидает завершения автофокуса на модуле камеры OV5640 FPC. См. CSI.ioctl.

csi.IOCTL_SET_NIGHT_MODE: int

Включает или выключает ночной режим. Снижает частоту кадров для динамического увеличения экспозиции. См. CSI.ioctl.

csi.IOCTL_GET_NIGHT_MODE: int

Возвращает, включён ли ночной режим. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_WIDTH: int

Возвращает ширину разрешения изображения FLIR Lepton в пикселях. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_HEIGHT: int

Возвращает высоту разрешения изображения FLIR Lepton в пикселях. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_RADIOMETRY: int

Возвращает тип FLIR Lepton (радиометрический или нет). См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_REFRESH: int

Возвращает частоту обновления FLIR Lepton в Гц. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_RESOLUTION: int

Возвращает разрешение АЦП FLIR Lepton в битах. См. CSI.ioctl.

csi.IOCTL_LEPTON_RUN_COMMAND: int

Выполняет 16-битную команду из FLIR Lepton SDK. См. CSI.ioctl.

csi.IOCTL_LEPTON_SET_ATTRIBUTE: int

Устанавливает атрибут FLIR Lepton из FLIR Lepton SDK. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_ATTRIBUTE: int

Получает атрибут FLIR Lepton из FLIR Lepton SDK. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_FPA_TEMP: int

Получает температуру FPA FLIR Lepton в градусах Цельсия. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_AUX_TEMP: int

Получает вспомогательную температуру (AUX) FLIR Lepton в градусах Цельсия. См. CSI.ioctl.

csi.IOCTL_LEPTON_SET_MODE: int

Переводит драйвер FLIR Lepton в режим, где каждый пиксель является значением температуры. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_MODE: int

Возвращает, включён ли режим измерения для датчика FLIR Lepton. См. CSI.ioctl.

csi.IOCTL_LEPTON_SET_RANGE: int

Устанавливает диапазон температур, отображаемый на значения пикселей в режиме измерения. См. CSI.ioctl.

csi.IOCTL_LEPTON_GET_RANGE: int

Возвращает диапазон температур, используемый для режима измерения. См. CSI.ioctl.

csi.IOCTL_HIMAX_MD_ENABLE: int

Управляет прерыванием обнаружения движения на HM01B0. См. CSI.ioctl.

csi.IOCTL_HIMAX_MD_WINDOW: int

Устанавливает окно обнаружения движения на HM01B0. См. CSI.ioctl.

csi.IOCTL_HIMAX_MD_THRESHOLD: int

Устанавливает порог обнаружения движения на HM01B0. См. CSI.ioctl.

csi.IOCTL_HIMAX_MD_CLEAR: int

Очищает прерывание обнаружения движения на HM01B0. См. CSI.ioctl.

csi.IOCTL_HIMAX_OSC_ENABLE: int

Управляет внутренним генератором на HM01B0. См. CSI.ioctl.

csi.IOCTL_GET_RGB_STATS: int

Возвращает статистику RGB с датчика камеры. См. CSI.ioctl.

csi.IOCTL_GENX320_SET_BIASES: int

Устанавливает смещения датчика GENX320 в одну из предустановок GENX320_BIASES_*. См. CSI.ioctl. После CSI.reset драйвер применяет csi.GENX320_BIASES_LOW_NOISE, а не csi.GENX320_BIASES_DEFAULT — используйте этот ioctl для переключения на другую предустановку, когда приложению требуется большая чувствительность или пропускная способность.

csi.GENX320_BIASES_DEFAULT: int

Значения по умолчанию из техдокументации GenX320 — сбалансированные чувствительность, шум и пропускная способность для общих сцен.

csi.GENX320_BIASES_LOW_LIGHT: int

Настроено для условий слабого освещения — оба порога контраста ослаблены для более высокой чувствительности, FO понижен, HPF отключён, чтобы медленные изменения яркости всё ещё регистрировались.

csi.GENX320_BIASES_ACTIVE_MARKER: int

Настроено для отслеживания высококонтрастных мигающих светодиодов (активных маркеров) — пороги контраста повышены, чтобы срабатывали только резкие переходы, FO и HPF подняты высоко для максимизации пропускной способности и подавления медленного фонового дрейфа, REFR=0, чтобы захватывался каждый фронт мигания.

csi.GENX320_BIASES_LOW_NOISE: int

Значение по умолчанию драйвера — более низкая чувствительность, чем у DEFAULT (повышенные пороги контраста), и более низкий FO для меньшей активности фонового шума. Лучше всего подходит для статичных или медленных сцен, где ложные события доминировали бы.

csi.GENX320_BIASES_HIGH_SPEED: int

Настроено для сцен с быстрым движением — более высокий FO для большей пропускной способности пикселей, более высокий HPF для подавления медленных изменений, более высокий REFR для более длительного мёртвого времени после каждого события, чтобы считывание не насыщалось.

csi.IOCTL_GENX320_SET_BIAS: int

Устанавливает одно смещение датчика GENX320 в значение DAC. Передайте константу GENX320_BIAS_* (csi.GENX320_BIAS_DIFF_OFF, csi.GENX320_BIAS_DIFF_ON, csi.GENX320_BIAS_FO, csi.GENX320_BIAS_HPF или csi.GENX320_BIAS_REFR) и целочисленное значение DAC. Каждое смещение независимо — вызывайте этот ioctl повторно, чтобы подстроить только нужные вам смещения после применения предустановки. См. CSI.ioctl.

csi.GENX320_BIAS_DIFF_OFF: int

Порог контраста негативного компаратора — определяет, насколько пиксель должен потемнеть, прежде чем сработает csi.PIX_OFF_EVENT. Меньшее значение = более высокая чувствительность (больше событий).

csi.GENX320_BIAS_DIFF_ON: int

Порог контраста позитивного компаратора — определяет, насколько пиксель должен посветлеть, прежде чем сработает csi.PIX_ON_EVENT. Меньшее значение = более высокая чувствительность (больше событий).

csi.GENX320_BIAS_FO: int

Частота среза низкочастотного фильтра пикселя — балансирует пропускную способность пикселя (скорость/задержку) против активности фонового шума. Большее значение = более быстрый отклик пикселя, больше шума.

csi.GENX320_BIAS_HPF: int

Частота среза высокочастотного фильтра пикселя — подавляет медленные изменения яркости. Большее значение = больше медленных изменений отфильтровывается (регистрируются только быстрые переходы).

csi.GENX320_BIAS_REFR: int

Рефрактерный период пикселя — мёртвое время после того, как пиксель испустил событие, в течение которого он не может сработать снова. Большее значение = более длительное мёртвое время, меньше событий от активного пикселя.

csi.IOCTL_GENX320_SET_AFK: int

Устанавливает фильтр антимерцания (AFK) GENX320, который подавляет события от пикселей, переключающихся в периодической полосе частот (люминесцентное освещение, дисплеи на светодиодах и т. д.). Передайте enable (1 для включения, 0 для выключения) и, при включении, границы полосы в герцах: (enable, freq_low_hz, freq_high_hz). См. CSI.ioctl.

csi.IOCTL_GENX320_SET_STC: int

Устанавливает режим фильтра пространственно-временного контраста (STC) GENX320. Передайте константу GENX320_STC_* (csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY, csi.GENX320_STC_TRAIL), за которой следуют пороги, требуемые режимом (в миллисекундах). См. CSI.ioctl.

csi.GENX320_STC_DISABLE: int

Отключает фильтр STC/trail GENX320 — проходит каждое событие.

csi.GENX320_STC_ONLY: int

Сохраняет второе событие пакета; отбрасывает первое событие и все последующие события. Принимает один параметр, stc_threshold в миллисекундах — события в пределах этого окна от предыдущего события на том же пикселе считаются частью того же пакета.

csi.GENX320_STC_TRAIL_ONLY: int

Сохраняет первое событие пакета; отбрасывает последующие события на том же пикселе, пока не истечёт trail_threshold. Принимает один параметр, trail_threshold в миллисекундах.

csi.GENX320_STC_TRAIL: int

Сохраняет первое событие пакета плюс последующие фронты — объединяет csi.GENX320_STC_ONLY и csi.GENX320_STC_TRAIL_ONLY. Принимает два параметра, stc_threshold и trail_threshold (оба в мс); датчик требует, чтобы эти два значения оставались примерно в соотношении 13:1.

csi.IOCTL_GENX320_SET_MODE: int

Устанавливает режим работы GENX320. Передайте csi.GENX320_MODE_HISTO для встроенной в чип гистограммы событий (камера ведёт себя как обычная камера в оттенках серого с настроенной частотой кадров) или csi.GENX320_MODE_EVENT, за которым следует длина по оси строк ndarray событий (степень двойки от 1024 до 65536) для потоковой передачи необработанных событий. См. CSI.ioctl.

csi.GENX320_MODE_HISTO: int

Режим гистограммы — события накапливаются на чипе в попиксельные бины и сообщаются как кадр 320x320 в оттенках серого с настроенной частотой (~20-350 FPS). Камера выглядит как обычная камера, поэтому все стандартные процедуры обработки изображений работают напрямую.

csi.GENX320_MODE_EVENT: int

Событийный режим — обходит встроенную в чип гистограмму и передаёт необработанные события в numpy ndarray с микросекундными метками времени, для приложений, которым нужна полная временная детализация, а не предварительно сгруппированный кадр.

csi.IOCTL_GENX320_READ_EVENTS: int

Читает необработанные события в ndarray типа uint16 формы (EVT_res, 6) (где EVT_res соответствует размеру буфера, переданному в csi.IOCTL_GENX320_SET_MODE). Столбцы: [0] тип события (csi.PIX_OFF_EVENT, csi.PIX_ON_EVENT, csi.EXT_TRIGGER_RISING/FALLING, csi.RST_TRIGGER_RISING/FALLING), [1] метка времени в секундах, [2] миллисекунды, [3] микросекунды, [4] координата X (0-319), [5] координата Y (0-319). Возвращает количество событий, записанных в буфер, оставляя более старые строки за пределами этого числа нетронутыми. См. CSI.ioctl.

csi.IOCTL_GENX320_CALIBRATE: int

Автоматически отключает горячие пиксели — пиксели, которые срабатывают ложно даже на статичной сцене. Драйвер строит попиксельный счётчик попаданий 320x320, вычисляет среднее и стандартное отклонение и отключает любой пиксель, счётчик которого превышает mean + sigma * stddev. Передайте бюджет количества событий (события для подсчёта перед вычислением статистики — больше = более надёжная оценка, медленнее; ~10000 — хорошее значение по умолчанию) и число с плавающей точкой sigma (меньше = более агрессивно, ~0.5 по умолчанию). Возвращает количество отключённых пикселей. Сначала направьте камеру на статичную сцену, чтобы события, вызванные движением, не засчитывались пикселям, которые на самом деле в порядке. См. CSI.ioctl.

csi.IOCTL_GENX320_READ_EVENTS_RAW: int

Возвращает необработанный кадр событий image.Image с GENX320, где события всё ещё находятся в нативной упакованной кодировке чипа — полезно, если вы хотите переслать необработанный поток на ПК для автономного декодирования, а не обрабатывать его на камере. См. CSI.ioctl.

csi.PIX_OFF_EVENT: int

Тип события GENX320 (столбец [0]) — пиксель обнаружил уменьшение яркости (был пересечён порог негативного контраста). Столбцы [4]/[5] несут X/Y пикселя.

csi.PIX_ON_EVENT: int

Тип события GENX320 (столбец [0]) — пиксель обнаружил увеличение яркости (был пересечён порог позитивного контраста). Столбцы [4]/[5] несут X/Y пикселя.

csi.RST_TRIGGER_RISING: int

Тип события GENX320 (столбец [0]) — триггер сброса пикселя, передний фронт. X/Y не используются. В настоящее время не генерируется прошивкой.

csi.RST_TRIGGER_FALLING: int

Тип события GENX320 (столбец [0]) — триггер сброса пикселя, задний фронт. X/Y не используются. В настоящее время не генерируется прошивкой.

csi.EXT_TRIGGER_RISING: int

Тип события GENX320 (столбец [0]) — вывод внешнего триггера датчика увидел передний фронт. Вход внешнего триггера GENX320 подключён к линии синхронизации кадров камеры, также выведенной на P10 на процессоре и на разъём выводов. X/Y не используются.

csi.EXT_TRIGGER_FALLING: int

Тип события GENX320 (столбец [0]) — вывод внешнего триггера датчика увидел задний фронт. Вход внешнего триггера GENX320 подключён к линии синхронизации кадров камеры, также выведенной на P10 на процессоре и на разъём выводов. X/Y не используются.