csi — sensores de câmera

O módulo csi é a interface moderna e orientada a objetos para o(s) sensor(es) de câmera de uma OpenMV Cam. Cada sensor físico é representado por uma instância de CSI, de modo que as placas de imageamento multiespectral que combinam um sensor de cor com um sensor térmico ou de eventos podem controlar cada um de forma independente passando um cid diferente para o construtor. Câmeras de sensor único simplesmente instanciam um único CSI.

Um objeto CSI detém toda a configuração do sensor – formato de pixel, framesize / janela, exposição / ganho / balanço de branco, espelhamento e inversão de hardware, padrão de teste de barras de cor, clock da taxa de quadros, ROI para autoexposição e comandos ioctl específicos do chip. Os quadros são capturados com CSI.snapshot(), que retorna uma image.Image apoiada pelo frame buffer.

Este módulo substitui o módulo legado sensor (que expunha a mesma funcionalidade como funções de nível de módulo vinculadas a um único sensor oculto). O código novo deve usar CSI.

Exemplo de uso:

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

Uso com asyncio

O laço bloqueante de CSI.snapshot() acima não coopera com o laço de eventos do asyncio – enquanto snapshot aguarda o próximo quadro, todas as outras corrotinas do programa ficam congeladas. Para permitir que um laço de captura coexista com outros trabalhos concorrentes (um cliente UART, um observador de botão, uma tarefa de rede), envolva CSI em um pequeno adaptador que transforma snapshot em uma corrotina compatível com await, fazendo polling de snapshot(blocking=False) e cedendo ao laço de eventos entre as verificações:

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__ encaminha todos os demais atributos (reset, pixformat, framesize, os ajustes do sensor) para o CSI subjacente, de modo que o wrapper seja um substituto direto. A primeira chamada não bloqueante também inicia a captura DMA da câmera, caso ainda não esteja em execução, portanto nenhum bootstrap extra é necessário.

Um laço de captura então se encaixa em um programa asyncio maior como apenas mais uma corrotina:

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

A configuração framebuffers ainda importa nesse formato – o modo de buffer único faz com que snapshot(blocking=False) retorne None até que o próximo quadro seja capturado, enquanto o buffer duplo ou triplo suaviza isso, de modo que o wrapper geralmente encontra um quadro em buffer aguardando no primeiro polling. Consulte o estudo de caso AsyncCSI no tutorial de asyncio para o passo a passo completo.

classe CSI – Interface do Sensor de Câmera

A classe CSI é usada para controlar um sensor de câmera.

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

Cria um objeto para se comunicar com um sensor de câmera. Em placas com múltiplos sensores, o objeto CSI específico pode ser selecionado passando um cid como csi.LEPTON para selecionar um módulo de sensor FLIR Lepton. Se cid for -1, o sensor primário é selecionado (tipicamente um módulo de câmera colorida em placas com múltiplos sensores).

Se delays for False, então todos os atrasos de tempo de estabilização no driver csi são desativados. Por padrão, o driver do sensor aplica atrasos após reset / mudança de modo para evitar que quadros corrompidos sejam retornados por CSI.snapshot. Desativar os atrasos permite que você agrupe atualizações e aplique um único atraso no final antes de chamar CSI.snapshot.

Se fflush for False, então o esvaziamento automático do framebuffer mencionado em CSI.framebuffers é desativado. Isso remove qualquer limite de tempo sobre os quadros no fifo do frame buffer.

stream seleciona se este CSI é a fonte de stream enviada para a IDE. Se None (padrão), o CSI se torna a fonte de stream apenas se for o sensor primário (não auxiliar). Passe True para forçar este CSI a ser a fonte de stream, ou qualquer valor falso para deixar a fonte de stream existente inalterada.

Métodos

reset(hard: bool = True) None

Inicializa o sensor de câmera. Realiza um reset de hardware alternando o GPIO do sinal RESET para o módulo de câmera se hard for True. hard deve ser definido como falso ao resetar sensores de câmera auxiliares que compartilham o mesmo GPIO do sinal RESET do módulo primário.

shutdown(enable: bool) None

Coloca a câmera em um modo de consumo de energia mais baixo do que o de repouso (mas a câmera deve ser resetada ao ser despertada).

sleep(enable: bool) None

Coloca a câmera em repouso se enable for True. Caso contrário, a desperta novamente.

flush() None

Copia o conteúdo atual do frame buffer para a pré-visualização da IDE. Chame isto após o último CSI.snapshot se o script terminar, para que a IDE mostre o último quadro.

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

Tira uma foto usando a câmera e retorna um objeto image.Image.

Se time e/ou frames forem passados, o snapshot bloqueará por essa quantidade de time milissegundos e/ou frames capturados da câmera. Ambos os argumentos podem ser usados ao mesmo tempo. Após time e/ou frames ter passado, o snapshot retornará None.

blocking pode ser False para habilitar o comportamento não bloqueante, que fará com que o snapshot retorne None quando a próxima imagem da câmera não estiver pronta, em vez de aguardar.

image pode ser outro objeto image.Image a ser atualizado com a nova imagem capturada da câmera, em vez de retornar um novo objeto image.Image. O conteúdo anterior da imagem é sobrescrito via cópia profunda.

Se CSI.auto_rotation estiver habilitado, este método retornará uma image.Image já rotacionada.

width() int

Retorna a largura da resolução do sensor.

height() int

Retorna a altura da resolução do sensor.

cid() int

Retorna o ID do chip do módulo de câmera. Compare com qualquer um de 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, ou csi.SOFTCSI.

readable() bool

Retorna True se houver uma imagem pronta para ser retornada por CSI.snapshot, de modo que uma chamada a snapshot não bloqueie.

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

Define o formato de pixel para o módulo de câmera como um de csi.GRAYSCALE, csi.RGB565, csi.BAYER, csi.YUV422, ou csi.JPEG (apenas nas OV2640/OV5640).

Retorna o pixformat atual se chamado sem argumentos.

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

Define o tamanho do quadro para o módulo de câmera como uma das constantes de tamanho (por exemplo, csi.QVGA, csi.VGA, csi.HD, etc. — veja a seção de constantes).

Alternativamente, você pode passar um framesize personalizado como uma tupla (w, h). Quando CSI.snapshot é chamado, o framesize personalizado será avaliado em relação às regras de DMA. Geralmente os framesizes precisam ser um múltiplo de 8 pixels e/ou 16 bytes.

Retorna o framesize atual se chamado sem argumentos.

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

Define a taxa de quadros em Hz para o módulo de câmera.

Retorna a taxa de quadros atual se chamado sem argumentos.

Nota

CSI.framerate funciona descartando quadros recebidos pelo módulo de câmera para manter a taxa de quadros em ou abaixo da taxa especificada. Por padrão, a câmera funcionará na taxa de quadros máxima. Se implementado para o sensor de câmera específico, CSI.framerate também reduzirá a taxa de quadros do sensor de câmera internamente para economizar energia e melhorar a qualidade da imagem aumentando a exposição do sensor. CSI.framerate pode entrar em conflito com CSI.auto_exposure em algumas câmeras.

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

Define a resolução da câmera para uma sub-região da resolução atual. roi é uma tupla (x, y, w, h). Você também pode passar (w, h) e a janela será centralizada.

Retorna a tupla (x, y, w, h) atual se chamado sem argumentos.

gainceiling(gainceiling: int) bool

Define o gainceiling da imagem da câmera como um de 2, 4, 8, 16, 32, 64, ou 128.

Retorna True em caso de sucesso e False em caso de falha.

brightness(brightness: int) bool

Define o brilho da imagem da câmera.

Retorna True em caso de sucesso e False em caso de falha.

contrast(contrast: int) bool

Define o contraste da imagem da câmera.

Retorna True em caso de sucesso e False em caso de falha.

saturation(saturation: int) bool

Define a saturação da imagem da câmera.

Retorna True em caso de sucesso e False em caso de falha.

quality(quality: int) bool

Define a qualidade de compressão JPEG da imagem da câmera. 0 - 100.

Retorna True em caso de sucesso e False em caso de falha.

Nota

Apenas para as câmeras OV2640/OV5640.

colorbar(enable: bool) bool

Liga (True) ou desliga (False) o modo de barra de cores. O padrão é desligado.

Retorna True em caso de sucesso e False em caso de falha.

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

enable liga (True) ou desliga (False) o controle automático de ganho. A câmera inicia com o controle automático de ganho ligado.

Se enable for False, você pode definir um ganho fixo em decibéis com gain_db.

Se enable for True, você pode definir o teto máximo de ganho em decibéis com gain_db_ceiling para o algoritmo de controle automático de ganho.

Nota

Você precisa desligar o balanço de branco também se quiser rastrear cores.

gain_db() float

Retorna o valor atual de ganho da câmera em decibéis.

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

enable liga (True) ou desliga (False) o controle automático de exposição. A câmera inicia com o controle automático de exposição ligado.

Se enable for False, você pode definir um tempo de exposição fixo em microssegundos com exposure_us.

Nota

Os algoritmos de autoexposição da câmera são bastante conservadores quanto ao quanto ajustam o valor de exposição e geralmente evitam alterar o valor de exposição em grande medida. Em vez disso, alteram bastante o valor de ganho para lidar com mudanças de iluminação.

exposure_us() int

Retorna o valor atual de exposição da câmera em microssegundos.

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

enable liga (True) ou desliga (False) o balanço de branco automático. A câmera inicia com o balanço de branco automático ligado.

Se enable for False, você pode definir um ganho fixo em decibéis para os canais vermelho, verde e azul respectivamente com rgb_gain_db.

Nota

Você precisa desligar o controle de ganho também se quiser rastrear cores.

rgb_gain_db() Tuple[float, float, float]

Retorna uma tupla (r, g, b) dos valores atuais de ganho de vermelho, verde e azul da câmera em decibéis.

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

Define a calibração automática de nível de preto (BLC) na câmera.

enable passe True ou False para ligar ou desligar o BLC. Normalmente você sempre vai querer isto ligado.

regs se desativado, então você pode definir manualmente os valores dos registradores BLC a partir de uma chamada anterior a CSI.blc_regs.

blc_regs() List[int]

Retorna os registradores BLC do sensor como uma lista de inteiros. Para uso com CSI.auto_blc.

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

Liga (True) ou desliga (False) o modo de espelhamento horizontal. O padrão é desligado.

Retorna a configuração atual se chamado sem argumentos.

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

Liga (True) ou desliga (False) o modo de inversão vertical. O padrão é desligado.

Retorna a configuração atual se chamado sem argumentos.

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

Liga (True) ou desliga (False) o modo de transposição. O padrão é desligado.

  • vflip=False, hmirror=False, transpose=False -> rotação de 0 grau

  • vflip=True, hmirror=False, transpose=True -> rotação de 90 graus

  • vflip=True, hmirror=True, transpose=False -> rotação de 180 graus

  • vflip=False, hmirror=True, transpose=True -> rotação de 270 graus

Retorna a configuração atual se chamado sem argumentos.

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

Liga (True) ou desliga (False) o modo de rotação automática. O padrão é desligado.

Retorna a configuração atual se chamado sem argumentos.

Nota

Este método só funciona quando a OpenMV Cam possui um imu instalado e é habilitado automaticamente.

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

Define o número de frame buffers usados para receber dados de imagem. Por padrão, a OpenMV Cam tentará alocar o número máximo de frame buffers que conseguir. A realocação ocorre sempre que CSI.pixformat, CSI.framesize ou CSI.window são chamados.

count de 1 (buffer único), 2 (buffer duplo) ou 3 (buffer triplo) seleciona o modo de captura correspondente. Passe 4 ou mais para colocar o driver no modo FIFO de vídeo, onde count buffers são enfileirados — útil para gravação de vídeo em um cartão SD. Em caso de queda de quadro, todos os frame buffers, exceto o ativo, são limpos, de modo que CSI.snapshot sempre retorne um quadro recente.

Retorna a contagem atual se chamado sem argumentos.

special_effect(effect: int) bool

Define o efeito digital especial (um de csi.NORMAL ou csi.NEGATIVE).

Retorna True em caso de sucesso e False em caso de falha.

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

enable True para habilitar, False para desabilitar. radi raio inteiro de pixels a corrigir. coef potência da correção.

Retorna True em caso de sucesso e False em caso de falha.

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

Registra o callback cb para ser executado (em contexto de interrupção) sempre que o módulo de câmera gerar um novo quadro (mas antes que o quadro seja recebido).

cb recebe um argumento e é passado o estado atual do pino vsync após a alteração.

Retorna o callback registrado se chamado sem argumentos. Passe qualquer não chamável para limpar o callback.

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

Registra o callback cb para ser executado (em contexto de interrupção) sempre que o módulo de câmera gerar um novo quadro e o quadro estiver pronto para ser lido via CSI.snapshot.

cb não recebe argumentos. Use isto para agendar a leitura de um quadro posteriormente com micropython.schedule().

Retorna o callback registrado se chamado sem argumentos. Passe qualquer não chamável para limpar o callback.

ioctl(request: int, *args) Any

Executa uma requisição específica do sensor. request é uma das constantes IOCTL_*; os demais argumentos posicionais e o valor de retorno dependem da requisição. As requisições suportadas estão agrupadas por família de sensores abaixo.

Genérico (qualquer sensor):

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

ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))

Define a janela de leitura (readout) do sensor. Uma janela menor aumenta a taxa de quadros ao custo do campo de visão.

ioctl(IOCTL_GET_READOUT_WINDOW)

Retorna a janela de leitura atual como uma tupla (x, y, w, h).

ioctl(IOCTL_SET_TRIGGERED_MODE, enable)

Habilita (True) ou desabilita (False) o modo acionado (triggered) no MT9V034.

ioctl(IOCTL_GET_TRIGGERED_MODE)

Retorna o estado atual do modo acionado como um bool.

ioctl(IOCTL_SET_FOV_WIDE, enable)

Quando True, instrui framesize() a otimizar para o campo de visão em vez da taxa de quadros.

ioctl(IOCTL_GET_FOV_WIDE)

Retorna o estado atual de FOV-wide como um bool.

ioctl(IOCTL_SET_NIGHT_MODE, enable)

Habilita (True) ou desabilita (False) o “modo noturno” de baixa luminosidade do sensor. Apenas OV7725 e OV5640.

ioctl(IOCTL_GET_NIGHT_MODE)

Retorna o estado atual do modo noturno como um bool.

ioctl(IOCTL_GET_RGB_STATS)

Retorna uma tupla de 4 elementos com estatísticas brutas dos canais RGB (r, gb, gr, b) lidas do sensor (tipicamente usadas para ajuste de balanço de branco).

OV5640 FPC – foco automático:

ioctl(IOCTL_TRIGGER_AUTO_FOCUS)

Inicia uma varredura de foco automático no módulo OV5640 FPC.

ioctl(IOCTL_PAUSE_AUTO_FOCUS)

Pausa uma varredura de foco automático em andamento.

ioctl(IOCTL_RESET_AUTO_FOCUS)

Redefine a posição de foco automático para o padrão.

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)

Bloqueia até que a varredura atual de foco automático termine. timeout_ms assume o padrão de 5000 se omitido.

FLIR Lepton:

ioctl(IOCTL_LEPTON_GET_WIDTH)

Retorna a largura da imagem do Lepton em pixels.

ioctl(IOCTL_LEPTON_GET_HEIGHT)

Retorna a altura da imagem do Lepton em pixels.

ioctl(IOCTL_LEPTON_GET_RADIOMETRY)

Retorna o tipo do Lepton (radiométrico ou não) como um int.

ioctl(IOCTL_LEPTON_GET_REFRESH)

Retorna a taxa de atualização do Lepton em Hz.

ioctl(IOCTL_LEPTON_GET_RESOLUTION)

Retorna a resolução do ADC do Lepton em bits.

ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)

Executa um comando do SDK do FLIR Lepton. cmd é o id de comando de 16 bits definido pelo SDK.

ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)

Escreve um atributo do SDK do Lepton. attr_id é o id de atributo de 16 bits; payload é um bytes/bytearray cujo comprimento deve ser um múltiplo de 16 bits.

ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)

Lê um atributo do SDK do Lepton. attr_id é o id de atributo de 16 bits; words é o número de palavras de 16 bits a ler. Retorna um bytearray.

ioctl(IOCTL_LEPTON_GET_FPA_TEMP)

Retorna a temperatura do arranjo de plano focal (focal-plane-array) do Lepton em graus Celsius.

ioctl(IOCTL_LEPTON_GET_AUX_TEMP)

Retorna a temperatura auxiliar do Lepton em graus Celsius.

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)

Alterna o Lepton entre AGC e saída de temperatura direta. measurement_enabled=True habilita a saída de temperatura direta. O sinalizador opcional high_temp_enabled seleciona a faixa de alta temperatura.

ioctl(IOCTL_LEPTON_GET_MODE)

Retorna uma tupla de 2 elementos (measurement_enabled, high_temp_enabled).

ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))

Define a faixa de temperatura mapeada para 0..255 quando o modo de medição está habilitado.

ioctl(IOCTL_LEPTON_GET_RANGE)

Retorna a faixa (min_celsius, max_celsius) atual.

Himax HM01B0 – detecção de movimento:

ioctl(IOCTL_HIMAX_MD_ENABLE, enable)

Habilita (True) ou desabilita (False) o bloco de detecção de movimento no sensor do HM01B0.

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

ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))

Define a janela de detecção de movimento no HM01B0.

ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)

Define o limiar de detecção de movimento (0255).

ioctl(IOCTL_HIMAX_MD_CLEAR)

Limpa a trava de interrupção de detecção de movimento.

ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)

Habilita (True) ou desabilita (False) o oscilador interno do HM01B0.

Prophesee GENX320 – sensor de eventos:

ioctl(IOCTL_GENX320_SET_BIASES, preset)

Aplica um preset de bias. preset é uma das constantes GENX320_BIASES_*.

ioctl(IOCTL_GENX320_SET_BIAS, bias, value)

Define um único bias. bias é uma das constantes GENX320_BIAS_*; value é o ajuste inteiro.

ioctl(IOCTL_GENX320_SET_AFK, enable)

ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)

Configura o filtro anti-cintilação (anti-flicker). enable é um bool; os argumentos opcionais de frequência definem a banda de passagem do filtro.

ioctl(IOCTL_GENX320_SET_STC, mode)

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

Configura o filtro de contraste espaço-temporal. mode é uma das constantes GENX320_STC_*; até dois argumentos adicionais são específicos do modo.

ioctl(IOCTL_GENX320_SET_MODE, mode)

ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)

Alterna o sensor entre os modos de quadro e de evento. mode é uma das constantes GENX320_MODE_*. Para o modo de evento, evt_res é o comprimento do eixo de linhas do buffer de eventos passado para IOCTL_GENX320_READ_EVENTS.

ioctl(IOCTL_GENX320_READ_EVENTS, buf)

Lê eventos em buf, um ndarray uint16 de formato (EVT_res, 6) onde EVT_res é uma potência de dois entre 1024 e 65536. As colunas são:

  • [0] – tipo de evento (PIX_OFF_EVENT / PIX_ON_EVENT / trigger).

  • [1] – segundos.

  • [2] – milissegundos.

  • [3] – microssegundos.

  • [4] – coordenada x.

  • [5] – coordenada y.

Retorna o número de eventos escritos.

ioctl(IOCTL_GENX320_READ_EVENTS_RAW)

Retorna uma image.Image contendo o quadro de eventos bruto do GENX320.

ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)

Desliga os pixels cujo ruído está a mais de sigma desvios padrão da distribuição normal. iterations é o número inteiro de passes de calibração. Retorna o número de pixels desativados.

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

Define a paleta de cores a usar para coisas como a conversão de escala de cinza para RGB565 do FLIR Lepton ou a visualização de eventos do GENX320. Uma de image.PALETTE_RAINBOW, image.PALETTE_IRONBOW, e (quando suportado) image.PALETTE_DEPTH, image.PALETTE_EVT_DARK, ou image.PALETTE_EVT_LIGHT.

Retorna a configuração atual se chamado sem argumentos.

__write_reg(address: int, value: int) None

Escreve value no registrador da câmera no endereço address.

Nota

Consulte a folha de dados da câmera para informações sobre registradores.

__read_reg(address: int) int

Lê o registrador da câmera no endereço address.

Nota

Consulte a folha de dados da câmera para informações sobre registradores.

Funções

csi.devices() List[int]

Retorna uma lista dos IDs de chip de sensor detectados.

Constantes

csi.BINARY: int

Formato de pixel BINARY (bitmap). Cada pixel é de 1 bit. Útil para armazenamento de máscaras; pode ser usado com image.Image().

csi.GRAYSCALE: int

Formato de pixel GRAYSCALE (Y de YUV422). Cada pixel é de 8 bits.

csi.RGB565: int

Formato de pixel RGB565. Cada pixel é de 16 bits (5 bits de vermelho, 6 bits de verde, 5 bits de azul).

csi.BAYER: int

Formato de pixel de imagem RAW BAYER.

csi.YUV422: int

Formato de pixel YUV422. Cada pixel é armazenado como um valor Y de 8 bits em escala de cinza seguido por valores de cor U/V de 8 bits alternados compartilhados entre dois valores Y (Y1, U, Y2, V, …). Apenas alguns métodos de processamento de imagem funcionam com YUV422.

csi.JPEG: int

Modo JPEG. O módulo de câmera produz imagens JPEG comprimidas. Use CSI.quality para controlar a qualidade JPEG. Funciona apenas para as câmeras OV2640/OV5640.

csi.OV2640: int

CSI.cid retorna isto para a câmera OV2640.

csi.OV5640: int

CSI.cid retorna isto para a câmera OV5640.

csi.OV7670: int

CSI.cid retorna isto para a câmera OV7670.

csi.OV7690: int

CSI.cid retorna isto para a câmera OV7690.

csi.OV7725: int

CSI.cid retorna isto para a câmera OV7725.

csi.OV9650: int

CSI.cid retorna isto para a câmera OV9650.

csi.MT9V022: int

CSI.cid retorna isto para a câmera MT9V022.

csi.MT9V024: int

CSI.cid retorna isto para a câmera MT9V024.

csi.MT9V032: int

CSI.cid retorna isto para a câmera MT9V032.

csi.MT9V034: int

CSI.cid retorna isto para a câmera MT9V034.

csi.MT9M114: int

CSI.cid retorna isto para a câmera MT9M114.

csi.BOSON320: int

CSI.cid retorna isto para a câmera BOSON 320x256.

csi.BOSON640: int

CSI.cid retorna isto para a câmera BOSON 640x512.

csi.LEPTON: int

CSI.cid retorna isto para as câmeras LEPTON1/2/3.

csi.HM01B0: int

CSI.cid retorna isto para a câmera HM01B0.

csi.HM0360: int

CSI.cid retorna isto para a câmera HM0360.

csi.GC2145: int

CSI.cid retorna isto para a câmera GC2145.

csi.GENX320ES: int

CSI.cid retorna isto para a câmera GENX320 (amostra de engenharia).

csi.GENX320: int

CSI.cid retorna isto para a câmera GENX320.

csi.PAG7920: int

CSI.cid retorna isto para a câmera PAG7920.

csi.PAG7936: int

CSI.cid retorna isto para a câmera PAG7936.

csi.PAJ6100: int

CSI.cid retorna isto para a câmera PAJ6100.

csi.FROGEYE2020: int

CSI.cid retorna isto para a câmera FROGEYE2020.

csi.SOFTCSI: int

CSI.cid retorna isto para a câmera CSI por software.

csi.NORMAL: int

Modo normal para CSI.special_effect.

csi.NEGATIVE: int

Modo negativo para CSI.special_effect.

csi.QCIF: int

Resolução 176x144 para o sensor de câmera.

csi.CIF: int

Resolução 352x288 para o sensor de câmera.

csi.QSIF: int

Resolução 176x120 para o sensor de câmera.

csi.SIF: int

Resolução 352x240 para o sensor de câmera.

csi.QQQVGA: int

Resolução 80x60 para o sensor de câmera.

csi.QQVGA: int

Resolução 160x120 para o sensor de câmera.

csi.QVGA: int

Resolução 320x240 para o sensor de câmera.

csi.VGA: int

Resolução 640x480 para o sensor de câmera.

csi.HQVGA: int

Resolução 240x160 para o sensor de câmera.

csi.HVGA: int

Resolução 480x320 para o sensor de câmera.

csi.WVGA: int

Resolução 720x480 para o sensor de câmera MT9V034.

csi.WVGA2: int

Resolução 752x480 para o sensor de câmera MT9V034.

csi.SVGA: int

Resolução 800x600 para o sensor de câmera.

csi.XGA: int

Resolução 1024x768 para o sensor de câmera.

csi.WXGA: int

Resolução 1280x768 para o sensor de câmera MT9M114.

csi.SXGA: int

Resolução 1280x1024 para o sensor de câmera. Funciona apenas para as câmeras OV2640/OV5640.

csi.SXGAM: int

Resolução 1280x960 para o sensor de câmera MT9M114.

csi.UXGA: int

Resolução 1600x1200 para o sensor de câmera. Funciona apenas para as câmeras OV2640/OV5640.

csi.HD: int

Resolução 1280x720 para o sensor de câmera.

csi.FHD: int

Resolução 1920x1080 para o sensor de câmera. Funciona apenas para a câmera OV5640.

csi.QHD: int

Resolução 2560x1440 para o sensor de câmera. Funciona apenas para a câmera OV5640.

csi.QXGA: int

Resolução 2048x1536 para o sensor de câmera. Funciona apenas para a câmera OV5640.

csi.WQXGA: int

Resolução 2560x1600 para o sensor de câmera. Funciona apenas para a câmera OV5640.

csi.WQXGA2: int

Resolução 2592x1944 para o sensor de câmera. Funciona apenas para a câmera OV5640.

csi.IOCTL_SET_READOUT_WINDOW: int

Define a janela de leitura. Veja CSI.ioctl.

csi.IOCTL_GET_READOUT_WINDOW: int

Obtém a janela de leitura. Veja CSI.ioctl.

csi.IOCTL_SET_TRIGGERED_MODE: int

Define o modo acionado para o MT9V034. Veja CSI.ioctl.

csi.IOCTL_GET_TRIGGERED_MODE: int

Obtém o estado do modo acionado para o MT9V034. Veja CSI.ioctl.

csi.IOCTL_SET_FOV_WIDE: int

Habilita CSI.framesize a otimizar para o campo de visão em vez do FPS. Veja CSI.ioctl.

csi.IOCTL_GET_FOV_WIDE: int

Retorna se CSI.framesize está otimizando para o campo de visão em vez do FPS. Veja CSI.ioctl.

csi.IOCTL_TRIGGER_AUTO_FOCUS: int

Aciona o foco automático no módulo de câmera OV5640 FPC. Veja CSI.ioctl.

csi.IOCTL_PAUSE_AUTO_FOCUS: int

Pausa o foco automático (enquanto em execução) para o módulo de câmera OV5640 FPC. Veja CSI.ioctl.

csi.IOCTL_RESET_AUTO_FOCUS: int

Redefine o foco automático para o padrão no módulo de câmera OV5640 FPC. Veja CSI.ioctl.

csi.IOCTL_WAIT_ON_AUTO_FOCUS: int

Aguarda o foco automático terminar no módulo de câmera OV5640 FPC. Veja CSI.ioctl.

csi.IOCTL_SET_NIGHT_MODE: int

Liga ou desliga o modo noturno. Reduz a taxa de quadros para aumentar a exposição dinamicamente. Veja CSI.ioctl.

csi.IOCTL_GET_NIGHT_MODE: int

Retorna se o modo noturno está habilitado. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_WIDTH: int

Retorna a largura da resolução da imagem do FLIR Lepton em pixels. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_HEIGHT: int

Retorna a altura da resolução da imagem do FLIR Lepton em pixels. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_RADIOMETRY: int

Retorna o tipo do FLIR Lepton (radiométrico ou não). Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_REFRESH: int

Retorna a taxa de atualização do FLIR Lepton em Hz. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_RESOLUTION: int

Retorna a resolução do ADC do FLIR Lepton em bits. Veja CSI.ioctl.

csi.IOCTL_LEPTON_RUN_COMMAND: int

Executa um comando de 16 bits do SDK do FLIR Lepton. Veja CSI.ioctl.

csi.IOCTL_LEPTON_SET_ATTRIBUTE: int

Define um atributo do FLIR Lepton a partir do SDK do FLIR Lepton. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_ATTRIBUTE: int

Obtém um atributo do FLIR Lepton a partir do SDK do FLIR Lepton. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_FPA_TEMP: int

Obtém a temperatura do FPA do FLIR Lepton em Celsius. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_AUX_TEMP: int

Obtém a temperatura AUX do FLIR Lepton em Celsius. Veja CSI.ioctl.

csi.IOCTL_LEPTON_SET_MODE: int

Coloca o driver do FLIR Lepton em um modo no qual cada pixel é um valor de temperatura. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_MODE: int

Retorna se o modo de medição está habilitado para o sensor FLIR Lepton. Veja CSI.ioctl.

csi.IOCTL_LEPTON_SET_RANGE: int

Define a faixa de temperatura mapeada para valores de pixel no modo de medição. Veja CSI.ioctl.

csi.IOCTL_LEPTON_GET_RANGE: int

Retorna a faixa de temperatura usada para o modo de medição. Veja CSI.ioctl.

csi.IOCTL_HIMAX_MD_ENABLE: int

Controla a interrupção de detecção de movimento no HM01B0. Veja CSI.ioctl.

csi.IOCTL_HIMAX_MD_WINDOW: int

Define a janela de detecção de movimento no HM01B0. Veja CSI.ioctl.

csi.IOCTL_HIMAX_MD_THRESHOLD: int

Define o limiar de detecção de movimento no HM01B0. Veja CSI.ioctl.

csi.IOCTL_HIMAX_MD_CLEAR: int

Limpa a interrupção de detecção de movimento no HM01B0. Veja CSI.ioctl.

csi.IOCTL_HIMAX_OSC_ENABLE: int

Controla o oscilador interno no HM01B0. Veja CSI.ioctl.

csi.IOCTL_GET_RGB_STATS: int

Retorna as estatísticas RGB do sensor de câmera. Veja CSI.ioctl.

csi.IOCTL_GENX320_SET_BIASES: int

Define os biases do sensor GENX320 para um dos presets GENX320_BIASES_*. Veja CSI.ioctl. Após CSI.reset, o driver aplica csi.GENX320_BIASES_LOW_NOISE, não csi.GENX320_BIASES_DEFAULT — use este ioctl para mudar para um preset diferente quando a aplicação precisar de mais sensibilidade ou largura de banda.

csi.GENX320_BIASES_DEFAULT: int

Padrões da folha de dados do GenX320 — sensibilidade, ruído e largura de banda balanceados para cenas em geral.

csi.GENX320_BIASES_LOW_LIGHT: int

Ajustado para condições de baixa luminosidade — ambos os limiares de contraste afrouxados para maior sensibilidade, FO reduzido, HPF desativado para que mudanças lentas de brilho ainda sejam registradas.

csi.GENX320_BIASES_ACTIVE_MARKER: int

Ajustado para rastrear LEDs piscantes de alto contraste (marcadores ativos) — limiares de contraste elevados para que apenas transições nítidas disparem, FO e HPF aumentados ao máximo para maximizar a largura de banda e rejeitar a deriva ambiente lenta, REFR=0 para que cada borda de piscada seja capturada.

csi.GENX320_BIASES_LOW_NOISE: int

Padrão do driver — sensibilidade menor que DEFAULT (limiares de contraste elevados) e um FO menor para menos atividade de ruído de fundo. Melhor para cenas estáticas ou lentas onde eventos falsos dominariam.

csi.GENX320_BIASES_HIGH_SPEED: int

Ajustado para cenas de movimento rápido — FO maior para uma largura de banda de pixel mais ampla, HPF maior para rejeitar mudanças lentas, REFR maior para um tempo morto mais longo após cada evento, de modo que a leitura não sature.

csi.IOCTL_GENX320_SET_BIAS: int

Define um único bias do sensor GENX320 para um valor de DAC. Passe uma constante GENX320_BIAS_* (csi.GENX320_BIAS_DIFF_OFF, csi.GENX320_BIAS_DIFF_ON, csi.GENX320_BIAS_FO, csi.GENX320_BIAS_HPF, ou csi.GENX320_BIAS_REFR) e um valor inteiro de DAC. Cada bias é independente — chame este ioctl repetidamente para ajustar apenas os biases que você precisa após aplicar um preset. Veja CSI.ioctl.

csi.GENX320_BIAS_DIFF_OFF: int

Limiar de contraste do comparador negativo — controla o quanto um pixel precisa escurecer antes que um csi.PIX_OFF_EVENT dispare. Valor menor = mais sensível (mais eventos).

csi.GENX320_BIAS_DIFF_ON: int

Limiar de contraste do comparador positivo — controla o quanto um pixel precisa clarear antes que um csi.PIX_ON_EVENT dispare. Valor menor = mais sensível (mais eventos).

csi.GENX320_BIAS_FO: int

Frequência de corte passa-baixa do pixel — equilibra a largura de banda do pixel (velocidade/latência) contra a atividade de ruído de fundo. Valor maior = resposta de pixel mais rápida, mais ruído.

csi.GENX320_BIAS_HPF: int

Frequência de corte passa-alta do pixel — rejeita mudanças lentas de brilho. Valor maior = mudanças lentas filtradas (apenas transições rápidas são registradas).

csi.GENX320_BIAS_REFR: int

Período refratário do pixel — tempo morto após um pixel emitir um evento durante o qual ele não pode disparar novamente. Valor maior = tempo morto mais longo, menos eventos de um pixel ativo.

csi.IOCTL_GENX320_SET_AFK: int

Define o filtro anti-cintilação (AFK) do GENX320, que rejeita eventos de pixels alternando em uma banda de frequência periódica (iluminação fluorescente, displays acionados por LED, etc.). Passe enable (1 para habilitar, 0 para desabilitar) e, ao habilitar, as bordas da banda em hertz: (enable, freq_low_hz, freq_high_hz). Veja CSI.ioctl.

csi.IOCTL_GENX320_SET_STC: int

Define o modo do filtro de contraste espaço-temporal (STC) do GENX320. Passe uma constante GENX320_STC_* (csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY, csi.GENX320_STC_TRAIL) seguida pelo(s) limiar(es) que o modo requer (em milissegundos). Veja CSI.ioctl.

csi.GENX320_STC_DISABLE: int

Desabilita o filtro STC/trail do GENX320 — todo evento passa.

csi.GENX320_STC_ONLY: int

Mantém o segundo evento de uma rajada; descarta o primeiro evento e quaisquer eventos posteriores. Recebe um parâmetro, stc_threshold em milissegundos — eventos dentro dessa janela de um evento anterior no mesmo pixel são considerados parte da mesma rajada.

csi.GENX320_STC_TRAIL_ONLY: int

Mantém o primeiro evento de uma rajada; descarta eventos subsequentes no mesmo pixel até que trail_threshold tenha decorrido. Recebe um parâmetro, trail_threshold em milissegundos.

csi.GENX320_STC_TRAIL: int

Mantém o primeiro evento de uma rajada mais as bordas subsequentes — combina csi.GENX320_STC_ONLY e csi.GENX320_STC_TRAIL_ONLY. Recebe dois parâmetros, stc_threshold e trail_threshold (ambos em ms); o sensor requer que os dois permaneçam dentro de aproximadamente uma proporção de 13:1.

csi.IOCTL_GENX320_SET_MODE: int

Define o modo de operação do GENX320. Passe csi.GENX320_MODE_HISTO para o histograma de eventos on-chip (a câmera se comporta como uma câmera de escala de cinza comum na taxa de quadros configurada) ou csi.GENX320_MODE_EVENT seguido pelo comprimento do eixo de linhas do ndarray de eventos (uma potência de dois entre 1024 e 65536) para streaming de eventos brutos. Veja CSI.ioctl.

csi.GENX320_MODE_HISTO: int

Modo de histograma — os eventos são acumulados on-chip em bins por pixel e reportados como um quadro de escala de cinza de 320x320 na taxa configurada (~20-350 FPS). A câmera se parece com uma câmera comum, de modo que todas as rotinas padrão de processamento de imagem funcionam diretamente.

csi.GENX320_MODE_EVENT: int

Modo de evento — contorna o histograma on-chip e transmite eventos brutos para um ndarray numpy com timestamps em microssegundos, para aplicações que precisam de detalhe temporal completo em vez de um quadro pré-agrupado.

csi.IOCTL_GENX320_READ_EVENTS: int

Lê eventos brutos para um ndarray uint16 de formato (EVT_res, 6) (com EVT_res correspondendo ao tamanho do buffer passado para csi.IOCTL_GENX320_SET_MODE). As colunas são [0] tipo de evento (csi.PIX_OFF_EVENT, csi.PIX_ON_EVENT, csi.EXT_TRIGGER_RISING/FALLING, csi.RST_TRIGGER_RISING/FALLING), [1] timestamp de segundos, [2] milissegundos, [3] microssegundos, [4] coordenada X (0-319), [5] coordenada Y (0-319). Retorna o número de eventos escritos no buffer, deixando as linhas mais antigas além dessa contagem intactas. Veja CSI.ioctl.

csi.IOCTL_GENX320_CALIBRATE: int

Desativa automaticamente os pixels quentes — pixels que disparam espuriamente mesmo em uma cena estática. O driver constrói uma contagem de acertos por pixel de 320x320, calcula a média e o desvio padrão, e desativa qualquer pixel cuja contagem exceda mean + sigma * stddev. Passe um orçamento de contagem de eventos (eventos a contabilizar antes de calcular as estatísticas — maior = estimativa mais confiável, mais lento; ~10000 é um bom padrão) e um float sigma (menor = mais agressivo, ~0.5 padrão). Retorna o número de pixels desativados. Aponte a câmera para uma cena estática primeiro para que eventos gerados por movimento não sejam contabilizados contra pixels que estão de fato bem. Veja CSI.ioctl.

csi.IOCTL_GENX320_READ_EVENTS_RAW: int

Retorna uma image.Image de quadro de eventos bruto do GENX320, com os eventos ainda na codificação empacotada nativa do chip — útil se você quiser encaminhar o stream bruto para um PC para decodificação off-line em vez de processá-lo na câmera. Veja CSI.ioctl.

csi.PIX_OFF_EVENT: int

Tipo de evento do GENX320 (coluna [0]) — um pixel detectou uma diminuição de brilho (o limiar de contraste negativo foi cruzado). As colunas [4]/[5] carregam o X/Y do pixel.

csi.PIX_ON_EVENT: int

Tipo de evento do GENX320 (coluna [0]) — um pixel detectou um aumento de brilho (o limiar de contraste positivo foi cruzado). As colunas [4]/[5] carregam o X/Y do pixel.

csi.RST_TRIGGER_RISING: int

Tipo de evento do GENX320 (coluna [0]) — trigger de reset de pixel, borda de subida. X/Y não são usados. Não é gerado pelo firmware no momento.

csi.RST_TRIGGER_FALLING: int

Tipo de evento do GENX320 (coluna [0]) — trigger de reset de pixel, borda de descida. X/Y não são usados. Não é gerado pelo firmware no momento.

csi.EXT_TRIGGER_RISING: int

Tipo de evento do GENX320 (coluna [0]) — o pino de trigger externo do sensor viu uma borda de subida. A entrada de trigger externo do GENX320 está conectada à linha de sincronização de quadros da câmera, também roteada para P10 no processador e no conector de pinos. X/Y não são usados.

csi.EXT_TRIGGER_FALLING: int

Tipo de evento do GENX320 (coluna [0]) — o pino de trigger externo do sensor viu uma borda de descida. A entrada de trigger externo do GENX320 está conectada à linha de sincronização de quadros da câmera, também roteada para P10 no processador e no conector de pinos. X/Y não são usados.