csi — sensores de câmara

O módulo csi é a interface moderna e orientada a objetos para o(s) sensor(es) de câmara numa OpenMV Cam. Cada sensor físico é representado por uma instância CSI, pelo que as placas de imageamento multiespectrais 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 ao construtor. As câmaras com um único sensor apenas instanciam um CSI.

Um objeto CSI gere toda a configuração do sensor – formato de pixel, tamanho de fotograma / janela, exposição / ganho / balanço de brancos, espelho e inversão por hardware, padrão de teste de barras de cor, relógio de taxa de fotogramas, ROI para auto-exposição e comandos ioctl específicos do chip. Os fotogramas são capturados com CSI.snapshot(), que devolve um image.Image apoiado pelo buffer de fotograma.

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

Exemplo de utilização:

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

Utilização com Asyncio

O ciclo bloqueante CSI.snapshot() acima não coopera com o ciclo de eventos asyncio – enquanto snapshot aguarda pelo próximo fotograma, todas as outras corrotinas do programa ficam congeladas. Para permitir que um ciclo de captura coexista com outro trabalho concorrente (um cliente UART, um observador de botões, uma tarefa de rede), envolva CSI num pequeno adaptador que transforma snapshot numa corrotina compatível com await, sondando snapshot(blocking=False) e cedendo ao ciclo de eventos entre 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__ redireciona todos os outros atributos (reset, pixformat, framesize, os controlos do sensor) para o CSI subjacente, pelo que o adaptador é um substituto direto. A primeira chamada não bloqueante também inicia a captura DMA da câmara se ainda não estiver em execução, pelo que não é necessário qualquer arranque adicional.

Um ciclo de captura encaixa então num programa asyncio maior como 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 definição framebuffers ainda é relevante neste padrão – o modo de buffer único faz com que snapshot(blocking=False) devolva None até que o próximo fotograma seja capturado, enquanto o buffer duplo ou triplo suaviza isso para que o adaptador geralmente encontre um fotograma em buffer à espera na primeira sondagem. Consulte o exemplo AsyncCSI no tutorial de asyncio para o guia completo.

class CSI – Interface do Sensor de Câmara

A classe CSI é utilizada para controlar um sensor de câmara.

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

Cria um objeto para comunicar com um sensor de câmara. Em placas com vários sensores, o objeto CSI em questão pode ser selecionado passando um cid como csi.LEPTON para selecionar um módulo sensor FLIR Lepton. Se cid for -1, o sensor primário é selecionado (tipicamente um módulo de câmara de cor em placas com vários sensores).

Se delays for False, todos os atrasos de tempo de estabilização no controlador csi são desativados. Por padrão, o controlador do sensor aguarda após reset / mudança de modo para evitar que fotogramas corrompidos sejam devolvidos por CSI.snapshot. Desativar os atrasos permite agrupar atualizações e aplicar um único atraso no final antes de chamar CSI.snapshot.

Se fflush for False, a descarga automática do buffer de fotograma mencionada em CSI.framebuffers é desativada. Isto remove qualquer limite de tempo nos fotogramas na fila FIFO do buffer de fotograma.

stream seleciona se este CSI é a fonte de stream enviada para o IDE. Se None (predefinição), o CSI torna-se 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âmara. Efetua um reset por hardware alternando o GPIO do sinal RESET para o módulo de câmara se hard for True. hard deve ser definido como falso ao reiniciar sensores de câmara auxiliares que partilham o mesmo GPIO do sinal RESET que o módulo primário.

shutdown(enable: bool) None

Coloca a câmara num modo de menor consumo de energia do que o modo de suspensão (mas a câmara tem de ser reiniciada ao ser acordada).

sleep(enable: bool) None

Coloca a câmara em modo de suspensão se enable for True. Caso contrário, acorda-a novamente.

flush() None

Copia o conteúdo atual do buffer de fotograma para a pré-visualização do IDE. Chame este método após o último CSI.snapshot se o script terminar, para que o IDE mostre o último fotograma.

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

Tira uma fotografia usando a câmara e devolve um objeto image.Image.

Se time e/ou frames for passado, snapshot bloqueará durante esse número de milissegundos time e/ou frames capturados da câmara. Ambos os argumentos podem ser usados ao mesmo tempo. Após time e/ou frames ter decorrido, snapshot devolverá None.

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

image pode ser outro objeto image.Image para atualizar com a nova imagem capturada da câmara em vez de devolver um novo objeto image.Image. O conteúdo da imagem anterior é substituído por uma cópia profunda.

Se CSI.auto_rotation estiver ativada, este método devolverá um image.Image já rodado.

width() int

Devolve a largura de resolução do sensor.

height() int

Devolve a altura de resolução do sensor.

cid() int

Devolve o ID do chip do módulo de câmara. 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

Devolve True se houver uma imagem pronta a ser devolvida por CSI.snapshot, pelo que uma chamada a snapshot não bloqueará.

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

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

Devolve o pixformat atual se chamado sem argumentos.

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

Define o tamanho de fotograma do módulo de câmara para uma das constantes de tamanho (ex.: csi.QVGA, csi.VGA, csi.HD, etc. — consulte a secção de constantes).

Em alternativa, pode passar um tamanho de fotograma personalizado como um tuplo (w, h). Quando CSI.snapshot é chamado, o tamanho de fotograma personalizado será avaliado de acordo com as regras DMA. Geralmente, os tamanhos de fotograma têm de ser múltiplos de 8 pixels e/ou 16 bytes.

Devolve o tamanho de fotograma atual se chamado sem argumentos.

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

Define a taxa de fotogramas em Hz para o módulo de câmara.

Devolve a taxa de fotogramas atual se chamado sem argumentos.

Nota

CSI.framerate funciona descartando fotogramas recebidos pelo módulo de câmara para manter a taxa de fotogramas igual ou inferior à taxa especificada. Por padrão, a câmara funcionará à taxa de fotogramas máxima. Se implementado para o sensor de câmara em questão, CSI.framerate também reduzirá internamente a taxa de fotogramas do sensor de câmara para poupar energia e melhorar a qualidade de imagem ao aumentar a exposição do sensor. CSI.framerate pode entrar em conflito com CSI.auto_exposure em algumas câmaras.

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

Define a resolução da câmara para uma sub-região da resolução atual. roi é um tuplo (x, y, w, h). Também pode passar (w, h) e a janela será centrada.

Devolve o tuplo (x, y, w, h) atual se chamado sem argumentos.

gainceiling(gainceiling: int) bool

Define o teto de ganho de imagem da câmara para um de 2, 4, 8, 16, 32, 64 ou 128.

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

brightness(brightness: int) bool

Define o brilho da imagem da câmara.

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

contrast(contrast: int) bool

Define o contraste da imagem da câmara.

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

saturation(saturation: int) bool

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

Devolve 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âmara. 0 - 100.

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

Nota

Apenas para as câmaras OV2640/OV5640.

colorbar(enable: bool) bool

Liga (True) ou desliga (False) o modo de barras de cor. Por padrão está desligado.

Devolve 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 controlo automático de ganho. A câmara arranca com o controlo automático de ganho ligado.

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

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

Nota

Também é necessário desligar o balanço de brancos se pretender rastrear cores.

gain_db() float

Devolve o valor atual de ganho da câmara em decibéis.

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

enable liga (True) ou desliga (False) o controlo automático de exposição. A câmara arranca com o controlo automático de exposição ligado.

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

Nota

Os algoritmos de auto-exposição da câmara são bastante conservadores no que respeita ao ajuste do valor de exposição e geralmente evitam alterá-lo significativamente. Em vez disso, ajustam bastante o valor de ganho para lidar com variações de iluminação.

exposure_us() int

Devolve o valor atual de exposição da câmara 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 brancos automático. A câmara arranca com o balanço de brancos automático ligado.

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

Nota

Também é necessário desligar o controlo de ganho se pretender rastrear cores.

rgb_gain_db() Tuple[float, float, float]

Devolve um tuplo (r, g, b) com os valores atuais de ganho dos canais vermelho, verde e azul da câmara em decibéis.

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

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

enable passe True ou False para ligar ou desligar a BLC. Normalmente é sempre conveniente ter esta opção ligada.

regs se desativada, pode definir manualmente os valores dos registos BLC a partir de uma chamada anterior a CSI.blc_regs.

blc_regs() List[int]

Devolve os registos 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 espelho horizontal. Por padrão está desligado.

Devolve a definição atual se chamado sem argumentos.

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

Liga (True) ou desliga (False) o modo de inversão vertical. Por padrão está desligado.

Devolve a definição atual se chamado sem argumentos.

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

Liga (True) ou desliga (False) o modo de transposição. Por padrão está desligado.

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

  • 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

Devolve a definiçã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. Por padrão está desligado.

Devolve a definição atual se chamado sem argumentos.

Nota

Este método só funciona quando a OpenMV Cam tem um imu instalado e está ativado automaticamente.

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

Define o número de buffers de fotograma utilizados para receber dados de imagem. Por padrão, a OpenMV Cam tentará alocar o número máximo de buffers de fotograma que conseguir. A reafetaçã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 controlador em modo FIFO de vídeo onde count buffers são enfileirados — útil para gravação de vídeo num cartão SD. Em caso de descarte de fotograma, todos os buffers de fotograma exceto o ativo são limpos, pelo que CSI.snapshot devolve sempre um fotograma recente.

Devolve o count atual se chamado sem argumentos.

special_effect(effect: int) bool

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

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

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

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

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

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

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

cb recebe um argumento e recebe o estado atual do pino vsync após a mudança.

Devolve o callback registado se chamado sem argumentos. Passe qualquer valor não chamável para limpar o callback.

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

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

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

Devolve o callback registado se chamado sem argumentos. Passe qualquer valor não chamável para limpar o callback.

ioctl(request: int, *args) Any

Executa um pedido específico do sensor. request é uma das constantes IOCTL_*; os restantes argumentos posicionais e o valor de retorno dependem do pedido. Os pedidos suportados estão agrupados por família de sensor 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 do sensor. Uma janela menor aumenta a taxa de fotogramas à custa do campo de visão.

ioctl(IOCTL_GET_READOUT_WINDOW)

Devolve a janela de leitura atual como um tuplo (x, y, w, h).

ioctl(IOCTL_SET_TRIGGERED_MODE, enable)

Ativa (True) ou desativa (False) o modo disparado no MT9V034.

ioctl(IOCTL_GET_TRIGGERED_MODE)

Devolve o estado atual do modo disparado 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 fotogramas.

ioctl(IOCTL_GET_FOV_WIDE)

Devolve o estado atual de FOV amplo como um bool.

ioctl(IOCTL_SET_NIGHT_MODE, enable)

Ativa (True) ou desativa (False) o «modo noturno» de baixa luminosidade do sensor. Apenas para OV7725 e OV5640.

ioctl(IOCTL_GET_NIGHT_MODE)

Devolve o estado atual do modo noturno como um bool.

ioctl(IOCTL_GET_RGB_STATS)

Devolve um tuplo de 4 elementos com as estatísticas brutas dos canais RGB (r, gb, gr, b) lidas do sensor (normalmente usadas para ajuste do balanço de brancos).

OV5640 FPC – focagem automática:

ioctl(IOCTL_TRIGGER_AUTO_FOCUS)

Inicia uma varredura de focagem automática no módulo OV5640 FPC.

ioctl(IOCTL_PAUSE_AUTO_FOCUS)

Pausa uma varredura de focagem automática em curso.

ioctl(IOCTL_RESET_AUTO_FOCUS)

Repõe a posição de focagem automática para o valor predefinido.

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)

Bloqueia até que a varredura de focagem automática atual termine. timeout_ms assume o valor predefinido de 5000 se omitido.

FLIR Lepton:

ioctl(IOCTL_LEPTON_GET_WIDTH)

Devolve a largura da imagem Lepton em pixels.

ioctl(IOCTL_LEPTON_GET_HEIGHT)

Devolve a altura da imagem Lepton em pixels.

ioctl(IOCTL_LEPTON_GET_RADIOMETRY)

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

ioctl(IOCTL_LEPTON_GET_REFRESH)

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

ioctl(IOCTL_LEPTON_GET_RESOLUTION)

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

ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)

Executa um comando do SDK 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 Lepton. attr_id é o id de atributo de 16 bits; payload é um bytes/bytearray cujo comprimento tem de ser múltiplo de 16 bits.

ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)

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

ioctl(IOCTL_LEPTON_GET_FPA_TEMP)

Devolve a temperatura do array de plano focal do Lepton em graus Celsius.

ioctl(IOCTL_LEPTON_GET_AUX_TEMP)

Devolve 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 ativa a saída de temperatura direta. O sinalizador opcional high_temp_enabled seleciona o intervalo de alta temperatura.

ioctl(IOCTL_LEPTON_GET_MODE)

Devolve um tuplo de 2 elementos (measurement_enabled, high_temp_enabled).

ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))

Define o intervalo de temperatura mapeado para 0..255 quando o modo de medição está ativado.

ioctl(IOCTL_LEPTON_GET_RANGE)

Devolve o intervalo (min_celsius, max_celsius) atual.

Himax HM01B0 – deteção de movimento:

ioctl(IOCTL_HIMAX_MD_ENABLE, enable)

Ativa (True) ou desativa (False) o bloco de deteção de movimento no próprio sensor do HM01B0.

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

ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))

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

ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)

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

ioctl(IOCTL_HIMAX_MD_CLEAR)

Limpa o latch de interrupção de deteção de movimento.

ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)

Ativa (True) ou desativa (False) o oscilador interno do HM01B0.

Prophesee GENX320 – sensor de eventos:

ioctl(IOCTL_GENX320_SET_BIASES, preset)

Aplica um predefinido de polarização. preset é uma das constantes GENX320_BIASES_*.

ioctl(IOCTL_GENX320_SET_BIAS, bias, value)

Define uma única polarização. bias é uma das constantes GENX320_BIAS_*; value é a definição inteira.

ioctl(IOCTL_GENX320_SET_AFK, enable)

ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)

Configura o filtro anti-cintilação. enable é um bool; os argumentos de frequência opcionais 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 espácio-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 fotograma e de eventos. mode é uma das constantes GENX320_MODE_*. Para o modo de eventos, evt_res é o comprimento do eixo de linhas do buffer de eventos passado a IOCTL_GENX320_READ_EVENTS.

ioctl(IOCTL_GENX320_READ_EVENTS, buf)

Lê eventos para buf, um ndarray uint16 de forma (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 / gatilho).

  • [1] – segundos.

  • [2] – milissegundos.

  • [3] – microssegundos.

  • [4] – coordenada x.

  • [5] – coordenada y.

Devolve o número de eventos escritos.

ioctl(IOCTL_GENX320_READ_EVENTS_RAW)

Devolve um image.Image com o fotograma de eventos bruto do GENX320.

ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)

Desativa os pixels cujo ruído é superior a sigma desvios-padrão em relação à distribuição normal. iterations é o número inteiro de passes de calibração. Devolve 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 FLIR Lepton em escala de cinzentos para RGB565 ou a visualização de eventos GENX320. Uma de image.PALETTE_RAINBOW, image.PALETTE_IRONBOW e (quando suportado) image.PALETTE_DEPTH, image.PALETTE_EVT_DARK ou image.PALETTE_EVT_LIGHT.

Devolve a definição atual se chamado sem argumentos.

__write_reg(address: int, value: int) None

Escreve value no registo da câmara no endereço address.

Nota

Consulte a folha de dados da câmara para informações sobre registos.

__read_reg(address: int) int

Lê o registo da câmara no endereço address.

Nota

Consulte a folha de dados da câmara para informações sobre registos.

Funções

csi.devices() List[int]

Devolve uma lista dos IDs de chip do sensor detetados.

Constantes

csi.BINARY: int

Formato de pixel BINARY (bitmap). Cada pixel é 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 é 8 bits.

csi.RGB565: int

Formato de pixel RGB565. Cada pixel é 16 bits (5 bits vermelho, 6 bits verde, 5 bits 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 em escala de cinzentos de 8 bits seguido de valores de cor U/V alternados de 8 bits partilhados 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âmara produz imagens JPEG comprimidas. Use CSI.quality para controlar a qualidade JPEG. Funciona apenas para as câmaras OV2640/OV5640.

csi.OV2640: int

CSI.cid devolve este valor para a câmara OV2640.

csi.OV5640: int

CSI.cid devolve este valor para a câmara OV5640.

csi.OV7670: int

CSI.cid devolve este valor para a câmara OV7670.

csi.OV7690: int

CSI.cid devolve este valor para a câmara OV7690.

csi.OV7725: int

CSI.cid devolve este valor para a câmara OV7725.

csi.OV9650: int

CSI.cid devolve este valor para a câmara OV9650.

csi.MT9V022: int

CSI.cid devolve este valor para a câmara MT9V022.

csi.MT9V024: int

CSI.cid devolve este valor para a câmara MT9V024.

csi.MT9V032: int

CSI.cid devolve este valor para a câmara MT9V032.

csi.MT9V034: int

CSI.cid devolve este valor para a câmara MT9V034.

csi.MT9M114: int

CSI.cid devolve este valor para a câmara MT9M114.

csi.BOSON320: int

CSI.cid devolve este valor para a câmara BOSON 320x256.

csi.BOSON640: int

CSI.cid devolve este valor para a câmara BOSON 640x512.

csi.LEPTON: int

CSI.cid devolve este valor para as câmaras LEPTON1/2/3.

csi.HM01B0: int

CSI.cid devolve este valor para a câmara HM01B0.

csi.HM0360: int

CSI.cid devolve este valor para a câmara HM0360.

csi.GC2145: int

CSI.cid devolve este valor para a câmara GC2145.

csi.GENX320ES: int

CSI.cid devolve este valor para a câmara GENX320 (amostra de engenharia).

csi.GENX320: int

CSI.cid devolve este valor para a câmara GENX320.

csi.PAG7920: int

CSI.cid devolve este valor para a câmara PAG7920.

csi.PAG7936: int

CSI.cid devolve este valor para a câmara PAG7936.

csi.PAJ6100: int

CSI.cid devolve este valor para a câmara PAJ6100.

csi.FROGEYE2020: int

CSI.cid devolve este valor para a câmara FROGEYE2020.

csi.SOFTCSI: int

CSI.cid devolve este valor para a câmara 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âmara.

csi.CIF: int

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

csi.QSIF: int

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

csi.SIF: int

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

csi.QQQVGA: int

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

csi.QQVGA: int

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

csi.QVGA: int

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

csi.VGA: int

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

csi.HQVGA: int

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

csi.HVGA: int

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

csi.WVGA: int

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

csi.WVGA2: int

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

csi.SVGA: int

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

csi.XGA: int

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

csi.WXGA: int

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

csi.SXGA: int

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

csi.SXGAM: int

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

csi.UXGA: int

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

csi.HD: int

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

csi.FHD: int

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

csi.QHD: int

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

csi.QXGA: int

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

csi.WQXGA: int

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

csi.WQXGA2: int

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

csi.IOCTL_SET_READOUT_WINDOW: int

Define a janela de leitura. Consulte CSI.ioctl.

csi.IOCTL_GET_READOUT_WINDOW: int

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

csi.IOCTL_SET_TRIGGERED_MODE: int

Define o modo disparado para o MT9V034. Consulte CSI.ioctl.

csi.IOCTL_GET_TRIGGERED_MODE: int

Obtém o estado do modo disparado para o MT9V034. Consulte CSI.ioctl.

csi.IOCTL_SET_FOV_WIDE: int

Ativa CSI.framesize para otimizar para campo de visão em vez de FPS. Consulte CSI.ioctl.

csi.IOCTL_GET_FOV_WIDE: int

Devolve se CSI.framesize está a otimizar para campo de visão em vez de FPS. Consulte CSI.ioctl.

csi.IOCTL_TRIGGER_AUTO_FOCUS: int

Aciona a focagem automática no módulo de câmara OV5640 FPC. Consulte CSI.ioctl.

csi.IOCTL_PAUSE_AUTO_FOCUS: int

Pausa a focagem automática (enquanto em execução) para o módulo de câmara OV5640 FPC. Consulte CSI.ioctl.

csi.IOCTL_RESET_AUTO_FOCUS: int

Repõe a focagem automática para o valor predefinido para o módulo de câmara OV5640 FPC. Consulte CSI.ioctl.

csi.IOCTL_WAIT_ON_AUTO_FOCUS: int

Aguarda que a focagem automática termine no módulo de câmara OV5640 FPC. Consulte CSI.ioctl.

csi.IOCTL_SET_NIGHT_MODE: int

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

csi.IOCTL_GET_NIGHT_MODE: int

Devolve se o modo noturno está ativado. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_GET_WIDTH: int

Devolve a largura de resolução da imagem FLIR Lepton em pixels. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_GET_HEIGHT: int

Devolve a altura de resolução da imagem FLIR Lepton em pixels. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_GET_RADIOMETRY: int

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

csi.IOCTL_LEPTON_GET_REFRESH: int

Devolve a taxa de atualização do FLIR Lepton em Hz. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_GET_RESOLUTION: int

Devolve a resolução ADC do FLIR Lepton em bits. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_RUN_COMMAND: int

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

csi.IOCTL_LEPTON_SET_ATTRIBUTE: int

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

csi.IOCTL_LEPTON_GET_ATTRIBUTE: int

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

csi.IOCTL_LEPTON_GET_FPA_TEMP: int

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

csi.IOCTL_LEPTON_GET_AUX_TEMP: int

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

csi.IOCTL_LEPTON_SET_MODE: int

Coloca o controlador FLIR Lepton num modo em que cada pixel é um valor de temperatura. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_GET_MODE: int

Devolve se o modo de medição está ativado para o sensor FLIR Lepton. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_SET_RANGE: int

Define o intervalo de temperatura mapeado para valores de pixel no modo de medição. Consulte CSI.ioctl.

csi.IOCTL_LEPTON_GET_RANGE: int

Devolve o intervalo de temperatura utilizado para o modo de medição. Consulte CSI.ioctl.

csi.IOCTL_HIMAX_MD_ENABLE: int

Controla a interrupção de deteção de movimento no HM01B0. Consulte CSI.ioctl.

csi.IOCTL_HIMAX_MD_WINDOW: int

Define a janela de deteção de movimento no HM01B0. Consulte CSI.ioctl.

csi.IOCTL_HIMAX_MD_THRESHOLD: int

Define o limiar de deteção de movimento no HM01B0. Consulte CSI.ioctl.

csi.IOCTL_HIMAX_MD_CLEAR: int

Limpa a interrupção de deteção de movimento no HM01B0. Consulte CSI.ioctl.

csi.IOCTL_HIMAX_OSC_ENABLE: int

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

csi.IOCTL_GET_RGB_STATS: int

Devolve as estatísticas RGB do sensor de câmara. Consulte CSI.ioctl.

csi.IOCTL_GENX320_SET_BIASES: int

Define as polarizações do sensor GENX320 para um dos predefinidos GENX320_BIASES_*. Consulte CSI.ioctl. Após CSI.reset, o controlador aplica csi.GENX320_BIASES_LOW_NOISE, não csi.GENX320_BIASES_DEFAULT — use este ioctl para mudar para um predefinido diferente quando a aplicação precisar de maior sensibilidade ou largura de banda.

csi.GENX320_BIASES_DEFAULT: int

Predefinições da folha de dados GenX320 — sensibilidade, ruído e largura de banda equilibrados para cenas gerais.

csi.GENX320_BIASES_LOW_LIGHT: int

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

csi.GENX320_BIASES_ACTIVE_MARKER: int

Otimizado para rastrear LEDs intermitentes de alto contraste (marcadores ativos) — limiares de contraste elevados para que apenas transições nítidas disparem, FO e HPF aumentados para maximizar a largura de banda e rejeitar a deriva ambiente lenta, REFR=0 para que cada bordo de intermitência seja capturado.

csi.GENX320_BIASES_LOW_NOISE: int

Predefinição do controlador — sensibilidade inferior ao DEFAULT (limiares de contraste elevados) e um FO mais baixo para menor atividade de ruído de fundo. Melhor para cenas estáticas ou lentas onde eventos falsos dominariam.

csi.GENX320_BIASES_HIGH_SPEED: int

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

csi.IOCTL_GENX320_SET_BIAS: int

Define uma única polarização do sensor GENX320 para um valor 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 DAC. Cada polarização é independente — chame este ioctl repetidamente para ajustar apenas as polarizações necessárias após aplicar um predefinido. Consulte CSI.ioctl.

csi.GENX320_BIAS_DIFF_OFF: int

Limiar de contraste negativo do comparador — controla o quanto um pixel tem de escurecer antes de um csi.PIX_OFF_EVENT ser disparado. Valor mais baixo = mais sensível (mais eventos).

csi.GENX320_BIAS_DIFF_ON: int

Limiar de contraste positivo do comparador — controla o quanto um pixel tem de clarear antes de um csi.PIX_ON_EVENT ser disparado. Valor mais baixo = mais sensível (mais eventos).

csi.GENX320_BIAS_FO: int

Frequência de corte passa-baixo do pixel — compromisso entre a largura de banda do pixel (velocidade/latência) e a atividade de ruído de fundo. Valor mais alto = resposta de pixel mais rápida, mais ruído.

csi.GENX320_BIAS_HPF: int

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

csi.GENX320_BIAS_REFR: int

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

csi.IOCTL_GENX320_SET_AFK: int

Define o filtro anti-cintilação (AFK) do GENX320, que rejeita eventos de pixels que alternam a uma banda de frequência periódica (iluminação fluorescente, ecrãs controlados por LED, etc.). Passe enable (1 para ativar, 0 para desativar) e, ao ativar, as extremidades da banda em hertz: (enable, freq_low_hz, freq_high_hz). Consulte CSI.ioctl.

csi.IOCTL_GENX320_SET_STC: int

Define o modo do filtro de contraste espácio-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 dos limiares que o modo requer (em milissegundos). Consulte CSI.ioctl.

csi.GENX320_STC_DISABLE: int

Desativa o filtro STC/trail do GENX320 — todos os eventos passam.

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 arestas 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 uma proporção aproximada 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 no chip (a câmara comporta-se como uma câmara em escala de cinzentos normal à taxa de fotogramas configurada) ou csi.GENX320_MODE_EVENT seguido do comprimento do eixo de linhas do ndarray de eventos (uma potência de dois entre 1024 e 65536) para streaming de eventos brutos. Consulte CSI.ioctl.

csi.GENX320_MODE_HISTO: int

Modo histograma — os eventos são acumulados no chip em contadores por pixel e reportados como um fotograma em escala de cinzentos 320x320 à taxa configurada (~20-350 FPS). A câmara parece uma câmara normal, pelo que todas as rotinas padrão de processamento de imagem funcionam diretamente.

csi.GENX320_MODE_EVENT: int

Modo de eventos — ignora o histograma no chip e transmite eventos brutos para um ndarray numpy com marcações de tempo de microssegundos, para aplicações que precisam de detalhe temporal completo em vez de um fotograma pré-agregado.

csi.IOCTL_GENX320_READ_EVENTS: int

Lê eventos brutos para um ndarray uint16 de forma (EVT_res, 6) (com EVT_res correspondendo ao tamanho do buffer passado a 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] marcação de tempo em segundos, [2] milissegundos, [3] microssegundos, [4] coordenada X (0-319), [5] coordenada Y (0-319). Devolve o número de eventos escritos no buffer, deixando as linhas mais antigas além desse count intocadas. Consulte CSI.ioctl.

csi.IOCTL_GENX320_CALIBRATE: int

Desativa automaticamente os pixels quentes — pixels que disparam de forma espúria mesmo numa cena estática. O controlador cria um mapa de contagem de acertos por pixel 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 fiável, mais lento; ~10000 é um bom valor predefinido) e um float sigma (menor = mais agressivo, ~0.5 predefinido). Devolve o número de pixels desativados. Aponte a câmara para uma cena estática primeiro para que os eventos causados por movimento não sejam contabilizados contra pixels que estão realmente bem. Consulte CSI.ioctl.

csi.IOCTL_GENX320_READ_EVENTS_RAW: int

Devolve um image.Image de fotograma de eventos bruto do GENX320, com os eventos ainda na codificação nativa empacotada do chip — útil se pretender encaminhar o stream bruto para um PC para descodificação offline em vez de o processar na câmara. Consulte CSI.ioctl.

csi.PIX_OFF_EVENT: int

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

csi.PIX_ON_EVENT: int

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

csi.RST_TRIGGER_RISING: int

Tipo de evento GENX320 (coluna [0]) — gatilho de reset de pixel, bordo ascendente. X/Y não são utilizados. Não é gerado pelo firmware neste momento.

csi.RST_TRIGGER_FALLING: int

Tipo de evento GENX320 (coluna [0]) — gatilho de reset de pixel, bordo descendente. X/Y não são utilizados. Não é gerado pelo firmware neste momento.

csi.EXT_TRIGGER_RISING: int

Tipo de evento GENX320 (coluna [0]) — o pino de gatilho externo do sensor detetou um bordo ascendente. A entrada de gatilho externo do GENX320 está ligada à linha de sincronização de fotogramas da câmara, também encaminhada para P10 no processador e no conector de pinos. X/Y não são utilizados.

csi.EXT_TRIGGER_FALLING: int

Tipo de evento GENX320 (coluna [0]) — o pino de gatilho externo do sensor detetou um bordo descendente. A entrada de gatilho externo do GENX320 está ligada à linha de sincronização de fotogramas da câmara, também encaminhada para P10 no processador e no conector de pinos. X/Y não são utilizados.