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 не используются.