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
cidcomocsi.LEPTONpara selecionar um módulo de sensor FLIR Lepton. Secidfor -1, o sensor primário é selecionado (tipicamente um módulo de câmera colorida em placas com múltiplos sensores).Se
delaysforFalse, 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 porCSI.snapshot. Desativar os atrasos permite que você agrupe atualizações e aplique um único atraso no final antes de chamarCSI.snapshot.Se
fflushforFalse, então o esvaziamento automático do framebuffer mencionado emCSI.framebuffersé desativado. Isso remove qualquer limite de tempo sobre os quadros no fifo do frame buffer.streamseleciona se este CSI é a fonte de stream enviada para a IDE. SeNone(padrão), o CSI se torna a fonte de stream apenas se for o sensor primário (não auxiliar). PasseTruepara 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
hardforTrue.harddeve 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
enablefor 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.snapshotse 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
timee/ouframesforem passados, o snapshot bloqueará por essa quantidade detimemilissegundos e/ouframescapturados da câmera. Ambos os argumentos podem ser usados ao mesmo tempo. Apóstimee/ouframester passado, o snapshot retornaráNone.blockingpode serFalsepara habilitar o comportamento não bloqueante, que fará com que o snapshot retorneNonequando a próxima imagem da câmera não estiver pronta, em vez de aguardar.imagepode ser outro objetoimage.Imagea ser atualizado com a nova imagem capturada da câmera, em vez de retornar um novo objetoimage.Image. O conteúdo anterior da imagem é sobrescrito via cópia profunda.Se
CSI.auto_rotationestiver habilitado, este método retornará umaimage.Imagejá rotacionada.
- 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, oucsi.SOFTCSI.
- readable() bool¶
Retorna
Truese houver uma imagem pronta para ser retornada porCSI.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, oucsi.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). QuandoCSI.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.frameratefunciona 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.frameratetambé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.frameratepode entrar em conflito comCSI.auto_exposureem 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
Trueem caso de sucesso eFalseem caso de falha.
- brightness(brightness: int) bool¶
Define o brilho da imagem da câmera.
Retorna
Trueem caso de sucesso eFalseem caso de falha.
- contrast(contrast: int) bool¶
Define o contraste da imagem da câmera.
Retorna
Trueem caso de sucesso eFalseem caso de falha.
- saturation(saturation: int) bool¶
Define a saturação da imagem da câmera.
Retorna
Trueem caso de sucesso eFalseem caso de falha.
- quality(quality: int) bool¶
Define a qualidade de compressão JPEG da imagem da câmera. 0 - 100.
Retorna
Trueem caso de sucesso eFalseem 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
Trueem caso de sucesso eFalseem caso de falha.
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
enableliga (True) ou desliga (False) o controle automático de ganho. A câmera inicia com o controle automático de ganho ligado.Se
enableforFalse, você pode definir um ganho fixo em decibéis comgain_db.Se
enableforTrue, você pode definir o teto máximo de ganho em decibéis comgain_db_ceilingpara o algoritmo de controle automático de ganho.Nota
Você precisa desligar o balanço de branco também se quiser rastrear cores.
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
enableliga (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
enableforFalse, você pode definir um tempo de exposição fixo em microssegundos comexposure_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.
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
enableliga (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
enableforFalse, você pode definir um ganho fixo em decibéis para os canais vermelho, verde e azul respectivamente comrgb_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.
enablepasseTrueouFalsepara ligar ou desligar o BLC. Normalmente você sempre vai querer isto ligado.regsse desativado, então você pode definir manualmente os valores dos registradores BLC a partir de uma chamada anterior aCSI.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
imuinstalado 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.framesizeouCSI.windowsão chamados.countde 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, ondecountbuffers 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 queCSI.snapshotsempre 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.NORMALoucsi.NEGATIVE).Retorna
Trueem caso de sucesso eFalseem caso de falha.
- lens_correction(enable: bool, radi: int, coef: int) bool¶
enableTruepara habilitar,Falsepara desabilitar.radiraio inteiro de pixels a corrigir.coefpotência da correção.Retorna
Trueem caso de sucesso eFalseem caso de falha.
- vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None¶
Registra o callback
cbpara 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).cbrecebe 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
cbpara 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 viaCSI.snapshot.cbnão recebe argumentos. Use isto para agendar a leitura de um quadro posteriormente commicropython.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 constantesIOCTL_*; 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, instruiframesize()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_msassume 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é umbytes/bytearraycujo 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 umbytearray.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=Truehabilita a saída de temperatura direta. O sinalizador opcionalhigh_temp_enabledseleciona 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..255quando 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 (
0–255).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 constantesGENX320_BIASES_*.ioctl(IOCTL_GENX320_SET_BIAS, bias, value)Define um único bias.
biasé uma das constantesGENX320_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 constantesGENX320_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 constantesGENX320_MODE_*. Para o modo de evento,evt_resé o comprimento do eixo de linhas do buffer de eventos passado paraIOCTL_GENX320_READ_EVENTS.ioctl(IOCTL_GENX320_READ_EVENTS, buf)Lê eventos em
buf, umndarrayuint16de formato(EVT_res, 6)ondeEVT_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]– coordenadax.[5]– coordenaday.
Retorna o número de eventos escritos.
ioctl(IOCTL_GENX320_READ_EVENTS_RAW)Retorna uma
image.Imagecontendo o quadro de eventos bruto do GENX320.ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)Desliga os pixels cujo ruído está a mais de
sigmadesvios 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, ouimage.PALETTE_EVT_LIGHT.Retorna a configuração atual se chamado sem argumentos.
Funções¶
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.RGB565: int¶
Formato de pixel RGB565. Cada pixel é de 16 bits (5 bits de vermelho, 6 bits de verde, 5 bits de azul).
- 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.qualitypara controlar a qualidade JPEG. Funciona apenas para as câmeras OV2640/OV5640.
- csi.NORMAL: int¶
Modo normal para
CSI.special_effect.
- csi.NEGATIVE: int¶
Modo negativo para
CSI.special_effect.
- csi.SXGA: int¶
Resolução 1280x1024 para o sensor de câmera. Funciona apenas para as câmeras OV2640/OV5640.
- csi.UXGA: int¶
Resolução 1600x1200 para o sensor de câmera. Funciona apenas para as câmeras OV2640/OV5640.
- csi.IOCTL_SET_FOV_WIDE: int¶
Habilita
CSI.framesizea otimizar para o campo de visão em vez do FPS. VejaCSI.ioctl.
- csi.IOCTL_GET_FOV_WIDE: int¶
Retorna se
CSI.framesizeestá otimizando para o campo de visão em vez do FPS. VejaCSI.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_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_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_GENX320_SET_BIASES: int¶
Define os biases do sensor GENX320 para um dos presets
GENX320_BIASES_*. VejaCSI.ioctl. ApósCSI.reset, o driver aplicacsi.GENX320_BIASES_LOW_NOISE, nãocsi.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, oucsi.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. VejaCSI.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_EVENTdispare. 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_EVENTdispare. 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). VejaCSI.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). VejaCSI.ioctl.
- 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_thresholdem 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_thresholdtenha decorrido. Recebe um parâmetro,trail_thresholdem milissegundos.
- csi.GENX320_STC_TRAIL: int¶
Mantém o primeiro evento de uma rajada mais as bordas subsequentes — combina
csi.GENX320_STC_ONLYecsi.GENX320_STC_TRAIL_ONLY. Recebe dois parâmetros,stc_thresholdetrail_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_HISTOpara 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) oucsi.GENX320_MODE_EVENTseguido pelo comprimento do eixo de linhas dondarrayde eventos (uma potência de dois entre 1024 e 65536) para streaming de eventos brutos. VejaCSI.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
ndarraynumpy 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
ndarrayuint16 de formato(EVT_res, 6)(comEVT_rescorrespondendo ao tamanho do buffer passado paracsi.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. VejaCSI.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. VejaCSI.ioctl.
- csi.IOCTL_GENX320_READ_EVENTS_RAW: int¶
Retorna uma
image.Imagede 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. VejaCSI.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.