csi — sensores de cámara

El módulo csi es la interfaz moderna y orientada a objetos para los sensores de cámara de una OpenMV Cam. Cada sensor físico está representado por una instancia de CSI, de modo que las placas de imagen multiespectral que combinan un sensor de color con un sensor térmico o de eventos pueden controlar cada uno de forma independiente pasando un cid distinto al constructor. Las cámaras de un solo sensor simplemente instancian un único CSI.

Un objeto CSI posee la configuración completa del sensor: formato de píxel, framesize / ventana, exposición / ganancia / balance de blancos, espejo y volteo por hardware, patrón de prueba de barras de color, reloj de velocidad de fotogramas, ROI para la exposición automática y comandos ioctl específicos del chip. Los fotogramas se capturan con CSI.snapshot(), que devuelve una image.Image respaldada por el búfer de fotogramas (frame buffer).

Este módulo reemplaza al antiguo módulo sensor (que exponía la misma funcionalidad como funciones a nivel de módulo ligadas a un único sensor oculto). El código nuevo debería usar CSI.

Ejemplo 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 con asyncio

El bucle bloqueante de CSI.snapshot() anterior no coopera con el bucle de eventos de asyncio: mientras snapshot espera el siguiente fotograma, todas las demás corrutinas del programa quedan congeladas. Para que un bucle de captura coexista con otro trabajo concurrente (un cliente UART, un vigilante de botones, una tarea de red), envuelve CSI en un pequeño adaptador que convierte snapshot en una corrutina compatible con await sondeando snapshot(blocking=False) y cediendo al bucle de eventos entre comprobaciones:

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__ reenvía cualquier otro atributo (reset, pixformat, framesize, los ajustes del sensor) al CSI subyacente, de modo que el envoltorio es un reemplazo directo. La primera llamada no bloqueante también inicia la captura DMA de la cámara si aún no estaba en marcha, por lo que no se necesita ningún arranque adicional.

Un bucle de captura encaja entonces en un programa asyncio más grande como una corrutina más:

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

El ajuste framebuffers sigue siendo importante en esta forma: el modo de búfer único hace que snapshot(blocking=False) devuelva None hasta que se capture el siguiente fotograma, mientras que el doble o triple búfer lo suaviza de modo que el envoltorio normalmente encuentra un fotograma en búfer esperando en el primer sondeo. Consulta la sección culminante AsyncCSI del tutorial de asyncio para ver el recorrido completo.

clase CSI – Interfaz del sensor de cámara

La clase CSI se usa para controlar un sensor de cámara.

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

Crea un objeto para comunicarse con un sensor de cámara. En placas con varios sensores, se puede seleccionar el objeto CSI concreto pasando un cid como csi.LEPTON para seleccionar un módulo de sensor FLIR Lepton. Si cid es -1 se selecciona el sensor principal (normalmente un módulo de cámara de color en placas multisensor).

Si delays es False, se desactivan todos los retardos de estabilización del controlador csi. De forma predeterminada, el controlador del sensor introduce retardos tras el reinicio o el cambio de modo para evitar que CSI.snapshot devuelva fotogramas corruptos. Desactivar los retardos te permite agrupar las actualizaciones y aplicar un único retardo al final antes de llamar a CSI.snapshot.

Si fflush es False, se desactiva el vaciado automático del framebuffer mencionado en CSI.framebuffers. Esto elimina cualquier límite de tiempo sobre los fotogramas en la cola FIFO del búfer de fotogramas (frame buffer).

stream selecciona si este CSI es la fuente de transmisión enviada al IDE. Si es None (predeterminado), el CSI se convierte en la fuente de transmisión solo si es el sensor principal (no auxiliar). Pasa True para forzar que este CSI sea la fuente de transmisión, o cualquier valor falso para dejar sin cambios la fuente de transmisión existente.

Métodos

reset(hard: bool = True) None

Inicializa el sensor de cámara. Realiza un reinicio por hardware alternando el GPIO de la señal RESET hacia el módulo de la cámara si hard es True. hard debe establecerse en false al reiniciar sensores de cámara auxiliares que comparten el mismo GPIO de señal RESET con el módulo principal.

shutdown(enable: bool) None

Pone la cámara en un modo de menor consumo que el de reposo (pero la cámara debe reiniciarse al despertar).

sleep(enable: bool) None

Pone la cámara en reposo si enable es True. De lo contrario, la vuelve a activar.

flush() None

Copia el contenido actual del búfer de fotogramas (frame buffer) a la vista previa del IDE. Llama a esto después de la última CSI.snapshot si el script termina, para que el IDE muestre el último fotograma.

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

Toma una foto con la cámara y devuelve un objeto image.Image.

Si se pasa time o frames, snapshot se bloqueará durante esa cantidad de time milisegundos o frames capturados desde la cámara. Ambos argumentos pueden usarse al mismo tiempo. Una vez transcurridos time o frames, snapshot devolverá None.

blocking puede ser False para habilitar el comportamiento no bloqueante, que hará que snapshot devuelva None cuando la siguiente imagen de la cámara no esté lista en lugar de esperar.

image puede ser otro objeto image.Image para actualizarlo con la nueva imagen capturada desde la cámara en lugar de devolver un nuevo objeto image.Image. El contenido anterior de la imagen se sobrescribe mediante una copia profunda.

Si CSI.auto_rotation está habilitado, este método devolverá una image.Image ya rotada.

width() int

Devuelve el ancho de la resolución del sensor.

height() int

Devuelve la altura de la resolución del sensor.

cid() int

Devuelve el ID del chip del módulo de cámara. Compáralo con cualquiera 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 o csi.SOFTCSI.

readable() bool

Devuelve True si hay una imagen lista para ser devuelta por CSI.snapshot, de modo que una llamada a snapshot no se bloqueará.

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

Establece el formato de píxel del módulo de cámara en uno de csi.GRAYSCALE, csi.RGB565, csi.BAYER, csi.YUV422 o csi.JPEG (solo en la OV2640/OV5640).

Devuelve el pixformat actual si se llama sin argumentos.

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

Establece el tamaño de fotograma del módulo de cámara en una de las constantes de tamaño (p. ej. csi.QVGA, csi.VGA, csi.HD, etc. — consulta la sección de constantes).

Como alternativa, puedes pasar un framesize personalizado como una tupla (w, h). Cuando se llama a CSI.snapshot, el framesize personalizado se evaluará según las reglas de DMA. En general, los framesizes deben ser múltiplos de 8 píxeles o de 16 bytes.

Devuelve el framesize actual si se llama sin argumentos.

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

Establece la velocidad de fotogramas en Hz del módulo de cámara.

Devuelve la velocidad de fotogramas actual si se llama sin argumentos.

Nota

CSI.framerate funciona descartando fotogramas recibidos del módulo de cámara para mantener la velocidad de fotogramas igual o por debajo de la velocidad especificada. De forma predeterminada, la cámara funcionará a la máxima velocidad de fotogramas. Si está implementado para el sensor de cámara concreto, CSI.framerate también reducirá internamente la velocidad de fotogramas del sensor de cámara para ahorrar energía y mejorar la calidad de imagen aumentando la exposición del sensor. CSI.framerate puede entrar en conflicto con CSI.auto_exposure en algunas cámaras.

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

Establece la resolución de la cámara en una subregión de la resolución actual. roi es una tupla (x, y, w, h). También puedes pasar (w, h) y la ventana quedará centrada.

Devuelve la tupla (x, y, w, h) actual si se llama sin argumentos.

gainceiling(gainceiling: int) bool

Establece el techo de ganancia de la imagen de la cámara en uno de 2, 4, 8, 16, 32, 64 o 128.

Devuelve True en caso de éxito y False en caso de fallo.

brightness(brightness: int) bool

Establece el brillo de la imagen de la cámara.

Devuelve True en caso de éxito y False en caso de fallo.

contrast(contrast: int) bool

Establece el contraste de la imagen de la cámara.

Devuelve True en caso de éxito y False en caso de fallo.

saturation(saturation: int) bool

Establece la saturación de la imagen de la cámara.

Devuelve True en caso de éxito y False en caso de fallo.

quality(quality: int) bool

Establece la calidad de compresión JPEG de la imagen de la cámara. 0 - 100.

Devuelve True en caso de éxito y False en caso de fallo.

Nota

Solo para las cámaras OV2640/OV5640.

colorbar(enable: bool) bool

Activa (True) o desactiva (False) el modo de barras de color. Está desactivado de forma predeterminada.

Devuelve True en caso de éxito y False en caso de fallo.

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

enable activa (True) o desactiva (False) el control automático de ganancia. La cámara arranca con el control automático de ganancia activado.

Si enable es False, puedes establecer una ganancia fija en decibelios con gain_db.

Si enable es True, puedes establecer el techo máximo de ganancia en decibelios con gain_db_ceiling para el algoritmo de control automático de ganancia.

Nota

También debes desactivar el balance de blancos si quieres rastrear colores.

gain_db() float

Devuelve el valor actual de ganancia de la cámara en decibelios.

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

enable activa (True) o desactiva (False) el control automático de exposición. La cámara arranca con el control automático de exposición activado.

Si enable es False, puedes establecer un tiempo de exposición fijo en microsegundos con exposure_us.

Nota

Los algoritmos de exposición automática de la cámara son bastante conservadores en cuanto a cuánto ajustan el valor de exposición y, por lo general, evitan cambiarlo mucho. En su lugar, cambian bastante el valor de ganancia para hacer frente a los cambios de iluminación.

exposure_us() int

Devuelve el valor actual de exposición de la cámara en microsegundos.

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

enable activa (True) o desactiva (False) el balance de blancos automático. La cámara arranca con el balance de blancos automático activado.

Si enable es False, puedes establecer una ganancia fija en decibelios para los canales rojo, verde y azul respectivamente con rgb_gain_db.

Nota

También debes desactivar el control de ganancia si quieres rastrear colores.

rgb_gain_db() Tuple[float, float, float]

Devuelve una tupla (r, g, b) con los valores actuales de ganancia roja, verde y azul de la cámara en decibelios.

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

Establece la calibración automática del nivel de negro (BLC) en la cámara.

enable pasa True o False para activar o desactivar el BLC. Normalmente siempre conviene tenerlo activado.

regs si está desactivado, puedes establecer manualmente los valores de los registros BLC de una llamada anterior a CSI.blc_regs.

blc_regs() List[int]

Devuelve los registros BLC del sensor como una lista de enteros. Para usar con CSI.auto_blc.

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

Activa (True) o desactiva (False) el modo de espejo horizontal. Está desactivado de forma predeterminada.

Devuelve el ajuste actual si se llama sin argumentos.

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

Activa (True) o desactiva (False) el modo de volteo vertical. Está desactivado de forma predeterminada.

Devuelve el ajuste actual si se llama sin argumentos.

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

Activa (True) o desactiva (False) el modo de transposición. Está desactivado de forma predeterminada.

  • vflip=False, hmirror=False, transpose=False -> rotación de 0 grados

  • vflip=True, hmirror=False, transpose=True -> rotación de 90 grados

  • vflip=True, hmirror=True, transpose=False -> rotación de 180 grados

  • vflip=False, hmirror=True, transpose=True -> rotación de 270 grados

Devuelve el ajuste actual si se llama sin argumentos.

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

Activa (True) o desactiva (False) el modo de rotación automática. Está desactivado de forma predeterminada.

Devuelve el ajuste actual si se llama sin argumentos.

Nota

Este método solo funciona cuando la OpenMV Cam tiene una imu instalada y se habilita automáticamente.

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

Establece el número de búferes de fotogramas usados para recibir datos de imagen. De forma predeterminada, la OpenMV Cam intentará asignar el máximo número de búferes de fotogramas que pueda. La reasignación se produce cada vez que se llama a CSI.pixformat, CSI.framesize o CSI.window.

Un count de 1 (búfer único), 2 (doble búfer) o 3 (triple búfer) selecciona el modo de captura correspondiente. Pasa 4 o más para poner el controlador en modo FIFO de vídeo, donde se encolan count búferes — útil para grabar vídeo en una tarjeta SD. Al descartar un fotograma, se vacían todos los búferes de fotogramas excepto el activo, de modo que CSI.snapshot siempre devuelve un fotograma reciente.

Devuelve el recuento actual si se llama sin argumentos.

special_effect(effect: int) bool

Establece el efecto digital especial (uno de csi.NORMAL o csi.NEGATIVE).

Devuelve True en caso de éxito y False en caso de fallo.

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

enable True para habilitar, False para deshabilitar. radi radio entero de píxeles a corregir. coef potencia de la corrección.

Devuelve True en caso de éxito y False en caso de fallo.

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

Registra la función de retorno (callback) cb para ejecutarla (en contexto de interrupción) cada vez que el módulo de cámara genera un nuevo fotograma (pero antes de que se reciba el fotograma).

cb toma un argumento y se le pasa el estado actual del pin vsync tras el cambio.

Devuelve la función de retorno (callback) registrada si se llama sin argumentos. Pasa cualquier valor no invocable para borrar la función de retorno (callback).

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

Registra la función de retorno (callback) cb para ejecutarla (en contexto de interrupción) cada vez que el módulo de cámara genera un nuevo fotograma y el fotograma está listo para leerse mediante CSI.snapshot.

cb no toma argumentos. Úsalo para programar la lectura de un fotograma más tarde con micropython.schedule().

Devuelve la función de retorno (callback) registrada si se llama sin argumentos. Pasa cualquier valor no invocable para borrar la función de retorno (callback).

ioctl(request: int, *args) Any

Ejecuta una petición específica del sensor. request es una de las constantes IOCTL_*; los demás argumentos posicionales y el valor de retorno dependen de la petición. Las peticiones admitidas se agrupan por familia de sensores a continuación.

Genérico (cualquier sensor):

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

ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))

Establece la ventana de lectura del sensor. Una ventana más pequeña aumenta la velocidad de fotogramas a costa del campo de visión.

ioctl(IOCTL_GET_READOUT_WINDOW)

Devuelve la ventana de lectura actual como una tupla (x, y, w, h).

ioctl(IOCTL_SET_TRIGGERED_MODE, enable)

Habilita (True) o deshabilita (False) el modo disparado en el MT9V034.

ioctl(IOCTL_GET_TRIGGERED_MODE)

Devuelve el estado actual del modo disparado como un bool.

ioctl(IOCTL_SET_FOV_WIDE, enable)

Cuando es True, indica a framesize() que optimice para el campo de visión en lugar de la velocidad de fotogramas.

ioctl(IOCTL_GET_FOV_WIDE)

Devuelve el estado actual de FOV-wide como un bool.

ioctl(IOCTL_SET_NIGHT_MODE, enable)

Habilita (True) o deshabilita (False) el «modo nocturno» de baja luz del sensor. Solo OV7725 y OV5640.

ioctl(IOCTL_GET_NIGHT_MODE)

Devuelve el estado actual del modo nocturno como un bool.

ioctl(IOCTL_GET_RGB_STATS)

Devuelve una tupla de 4 elementos con estadísticas brutas de los canales RGB (r, gb, gr, b) leídas del sensor (normalmente usada para ajustar el balance de blancos).

OV5640 FPC – enfoque automático:

ioctl(IOCTL_TRIGGER_AUTO_FOCUS)

Inicia un barrido de enfoque automático en el módulo OV5640 FPC.

ioctl(IOCTL_PAUSE_AUTO_FOCUS)

Pausa un barrido de enfoque automático en curso.

ioctl(IOCTL_RESET_AUTO_FOCUS)

Restablece la posición de enfoque automático al valor predeterminado.

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)

Se bloquea hasta que finaliza el barrido de enfoque automático actual. timeout_ms toma el valor 5000 de forma predeterminada si se omite.

FLIR Lepton:

ioctl(IOCTL_LEPTON_GET_WIDTH)

Devuelve el ancho de la imagen del Lepton en píxeles.

ioctl(IOCTL_LEPTON_GET_HEIGHT)

Devuelve la altura de la imagen del Lepton en píxeles.

ioctl(IOCTL_LEPTON_GET_RADIOMETRY)

Devuelve el tipo del Lepton (radiométrico o no) como un entero.

ioctl(IOCTL_LEPTON_GET_REFRESH)

Devuelve la tasa de refresco del Lepton en Hz.

ioctl(IOCTL_LEPTON_GET_RESOLUTION)

Devuelve la resolución ADC del Lepton en bits.

ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)

Ejecuta un comando del SDK de FLIR Lepton. cmd es el id de comando de 16 bits definido por el SDK.

ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)

Escribe un atributo del SDK de Lepton. attr_id es el id de atributo de 16 bits; payload es un bytes/bytearray cuya longitud debe ser múltiplo de 16 bits.

ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)

Lee un atributo del SDK de Lepton. attr_id es el id de atributo de 16 bits; words es el número de palabras de 16 bits a leer. Devuelve un bytearray.

ioctl(IOCTL_LEPTON_GET_FPA_TEMP)

Devuelve la temperatura de la matriz de plano focal del Lepton en grados Celsius.

ioctl(IOCTL_LEPTON_GET_AUX_TEMP)

Devuelve la temperatura auxiliar del Lepton en grados Celsius.

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)

Cambia el Lepton entre la salida AGC y la de temperatura directa. measurement_enabled=True habilita la salida de temperatura directa. La opción high_temp_enabled selecciona el rango de alta temperatura.

ioctl(IOCTL_LEPTON_GET_MODE)

Devuelve una tupla de 2 elementos (measurement_enabled, high_temp_enabled).

ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))

Establece el rango de temperatura asignado a 0..255 cuando el modo de medición está habilitado.

ioctl(IOCTL_LEPTON_GET_RANGE)

Devuelve el rango (min_celsius, max_celsius) actual.

Himax HM01B0 – detección de movimiento:

ioctl(IOCTL_HIMAX_MD_ENABLE, enable)

Habilita (True) o deshabilita (False) el bloque de detección de movimiento en el sensor del HM01B0.

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

ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))

Establece la ventana de detección de movimiento en el HM01B0.

ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)

Establece el umbral de detección de movimiento (0255).

ioctl(IOCTL_HIMAX_MD_CLEAR)

Borra el pestillo de interrupción de detección de movimiento.

ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)

Habilita (True) o deshabilita (False) el oscilador interno del HM01B0.

Prophesee GENX320 – sensor de eventos:

ioctl(IOCTL_GENX320_SET_BIASES, preset)

Aplica un preajuste de polarización (bias). preset es una de las constantes GENX320_BIASES_*.

ioctl(IOCTL_GENX320_SET_BIAS, bias, value)

Establece una única polarización (bias). bias es una de las constantes GENX320_BIAS_*; value es el ajuste entero.

ioctl(IOCTL_GENX320_SET_AFK, enable)

ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)

Configura el filtro antiparpadeo. enable es un bool; los argumentos de frecuencia opcionales establecen la banda de paso del filtro.

ioctl(IOCTL_GENX320_SET_STC, mode)

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

Configura el filtro de contraste espacio-temporal. mode es una de las constantes GENX320_STC_*; hasta dos argumentos adicionales son específicos del modo.

ioctl(IOCTL_GENX320_SET_MODE, mode)

ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)

Cambia el sensor entre los modos de fotograma y de eventos. mode es una de las constantes GENX320_MODE_*. Para el modo de eventos, evt_res es la longitud del eje de filas del búfer de eventos pasado a IOCTL_GENX320_READ_EVENTS.

ioctl(IOCTL_GENX320_READ_EVENTS, buf)

Lee eventos en buf, un ndarray de uint16 de forma (EVT_res, 6) donde EVT_res es una potencia de dos entre 1024 y 65536. Las columnas son:

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

  • [1] – segundos.

  • [2] – milisegundos.

  • [3] – microsegundos.

  • [4] – coordenada x.

  • [5] – coordenada y.

Devuelve el número de eventos escritos.

ioctl(IOCTL_GENX320_READ_EVENTS_RAW)

Devuelve una image.Image que contiene el fotograma de eventos en bruto del GENX320.

ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)

Desactiva los píxeles cuyo ruido supera sigma desviaciones estándar respecto a la distribución normal. iterations es el número entero de pasadas de calibración. Devuelve el número de píxeles desactivados.

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

Establece la paleta de colores que se usará para cosas como la conversión de escala de grises a RGB565 del FLIR Lepton o la visualización de eventos del GENX320. Una de image.PALETTE_RAINBOW, image.PALETTE_IRONBOW y (cuando sea compatible) image.PALETTE_DEPTH, image.PALETTE_EVT_DARK o image.PALETTE_EVT_LIGHT.

Devuelve el ajuste actual si se llama sin argumentos.

__write_reg(address: int, value: int) None

Escribe value en el registro de la cámara situado en address.

Nota

Consulta la hoja de datos de la cámara para obtener información sobre los registros.

__read_reg(address: int) int

Lee el registro de la cámara situado en address.

Nota

Consulta la hoja de datos de la cámara para obtener información sobre los registros.

Funciones

csi.devices() List[int]

Devuelve una lista de los ID de chip de sensor detectados.

Constantes

csi.BINARY: int

Formato de píxel BINARY (mapa de bits). Cada píxel es de 1 bit. Útil para almacenar máscaras; puede usarse con image.Image().

csi.GRAYSCALE: int

Formato de píxel GRAYSCALE (Y de YUV422). Cada píxel es de 8 bits.

csi.RGB565: int

Formato de píxel RGB565. Cada píxel es de 16 bits (5 bits rojo, 6 bits verde, 5 bits azul).

csi.BAYER: int

Formato de píxel de imagen RAW BAYER.

csi.YUV422: int

Formato de píxel YUV422. Cada píxel se almacena como un valor Y de 8 bits en escala de grises seguido de valores de color U/V de 8 bits alternados, compartidos entre dos valores Y (Y1, U, Y2, V, …). Solo algunos métodos de procesamiento de imágenes funcionan con YUV422.

csi.JPEG: int

Modo JPEG. El módulo de cámara emite imágenes JPEG comprimidas. Usa CSI.quality para controlar la calidad JPEG. Solo funciona en las cámaras OV2640/OV5640.

csi.OV2640: int

CSI.cid devuelve esto para la cámara OV2640.

csi.OV5640: int

CSI.cid devuelve esto para la cámara OV5640.

csi.OV7670: int

CSI.cid devuelve esto para la cámara OV7670.

csi.OV7690: int

CSI.cid devuelve esto para la cámara OV7690.

csi.OV7725: int

CSI.cid devuelve esto para la cámara OV7725.

csi.OV9650: int

CSI.cid devuelve esto para la cámara OV9650.

csi.MT9V022: int

CSI.cid devuelve esto para la cámara MT9V022.

csi.MT9V024: int

CSI.cid devuelve esto para la cámara MT9V024.

csi.MT9V032: int

CSI.cid devuelve esto para la cámara MT9V032.

csi.MT9V034: int

CSI.cid devuelve esto para la cámara MT9V034.

csi.MT9M114: int

CSI.cid devuelve esto para la cámara MT9M114.

csi.BOSON320: int

CSI.cid devuelve esto para la cámara BOSON 320x256.

csi.BOSON640: int

CSI.cid devuelve esto para la cámara BOSON 640x512.

csi.LEPTON: int

CSI.cid devuelve esto para las cámaras LEPTON1/2/3.

csi.HM01B0: int

CSI.cid devuelve esto para la cámara HM01B0.

csi.HM0360: int

CSI.cid devuelve esto para la cámara HM0360.

csi.GC2145: int

CSI.cid devuelve esto para la cámara GC2145.

csi.GENX320ES: int

CSI.cid devuelve esto para la cámara GENX320 (muestra de ingeniería).

csi.GENX320: int

CSI.cid devuelve esto para la cámara GENX320.

csi.PAG7920: int

CSI.cid devuelve esto para la cámara PAG7920.

csi.PAG7936: int

CSI.cid devuelve esto para la cámara PAG7936.

csi.PAJ6100: int

CSI.cid devuelve esto para la cámara PAJ6100.

csi.FROGEYE2020: int

CSI.cid devuelve esto para la cámara FROGEYE2020.

csi.SOFTCSI: int

CSI.cid devuelve esto para la 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

Resolución de 176x144 para el sensor de cámara.

csi.CIF: int

Resolución de 352x288 para el sensor de cámara.

csi.QSIF: int

Resolución de 176x120 para el sensor de cámara.

csi.SIF: int

Resolución de 352x240 para el sensor de cámara.

csi.QQQVGA: int

Resolución de 80x60 para el sensor de cámara.

csi.QQVGA: int

Resolución de 160x120 para el sensor de cámara.

csi.QVGA: int

Resolución de 320x240 para el sensor de cámara.

csi.VGA: int

Resolución de 640x480 para el sensor de cámara.

csi.HQVGA: int

Resolución de 240x160 para el sensor de cámara.

csi.HVGA: int

Resolución de 480x320 para el sensor de cámara.

csi.WVGA: int

Resolución de 720x480 para el sensor de cámara MT9V034.

csi.WVGA2: int

Resolución de 752x480 para el sensor de cámara MT9V034.

csi.SVGA: int

Resolución de 800x600 para el sensor de cámara.

csi.XGA: int

Resolución de 1024x768 para el sensor de cámara.

csi.WXGA: int

Resolución de 1280x768 para el sensor de cámara MT9M114.

csi.SXGA: int

Resolución de 1280x1024 para el sensor de cámara. Solo funciona en las cámaras OV2640/OV5640.

csi.SXGAM: int

Resolución de 1280x960 para el sensor de cámara MT9M114.

csi.UXGA: int

Resolución de 1600x1200 para el sensor de cámara. Solo funciona en las cámaras OV2640/OV5640.

csi.HD: int

Resolución de 1280x720 para el sensor de cámara.

csi.FHD: int

Resolución de 1920x1080 para el sensor de cámara. Solo funciona en la cámara OV5640.

csi.QHD: int

Resolución de 2560x1440 para el sensor de cámara. Solo funciona en la cámara OV5640.

csi.QXGA: int

Resolución de 2048x1536 para el sensor de cámara. Solo funciona en la cámara OV5640.

csi.WQXGA: int

Resolución de 2560x1600 para el sensor de cámara. Solo funciona en la cámara OV5640.

csi.WQXGA2: int

Resolución de 2592x1944 para el sensor de cámara. Solo funciona en la cámara OV5640.

csi.IOCTL_SET_READOUT_WINDOW: int

Establece la ventana de lectura. Consulta CSI.ioctl.

csi.IOCTL_GET_READOUT_WINDOW: int

Obtiene la ventana de lectura. Consulta CSI.ioctl.

csi.IOCTL_SET_TRIGGERED_MODE: int

Establece el modo disparado para el MT9V034. Consulta CSI.ioctl.

csi.IOCTL_GET_TRIGGERED_MODE: int

Obtiene el estado del modo disparado para el MT9V034. Consulta CSI.ioctl.

csi.IOCTL_SET_FOV_WIDE: int

Permite que CSI.framesize optimice para el campo de visión en lugar de los FPS. Consulta CSI.ioctl.

csi.IOCTL_GET_FOV_WIDE: int

Devuelve si CSI.framesize está optimizando para el campo de visión en lugar de los FPS. Consulta CSI.ioctl.

csi.IOCTL_TRIGGER_AUTO_FOCUS: int

Dispara el enfoque automático en el módulo de cámara OV5640 FPC. Consulta CSI.ioctl.

csi.IOCTL_PAUSE_AUTO_FOCUS: int

Pausa el enfoque automático (mientras se ejecuta) para el módulo de cámara OV5640 FPC. Consulta CSI.ioctl.

csi.IOCTL_RESET_AUTO_FOCUS: int

Restablece el enfoque automático al valor predeterminado para el módulo de cámara OV5640 FPC. Consulta CSI.ioctl.

csi.IOCTL_WAIT_ON_AUTO_FOCUS: int

Espera a que finalice el enfoque automático en el módulo de cámara OV5640 FPC. Consulta CSI.ioctl.

csi.IOCTL_SET_NIGHT_MODE: int

Activa o desactiva el modo nocturno. Reduce la velocidad de fotogramas para aumentar dinámicamente la exposición. Consulta CSI.ioctl.

csi.IOCTL_GET_NIGHT_MODE: int

Devuelve si el modo nocturno está habilitado. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_WIDTH: int

Devuelve el ancho de la resolución de imagen del FLIR Lepton en píxeles. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_HEIGHT: int

Devuelve la altura de la resolución de imagen del FLIR Lepton en píxeles. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_RADIOMETRY: int

Devuelve el tipo del FLIR Lepton (radiométrico o no). Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_REFRESH: int

Devuelve la tasa de refresco del FLIR Lepton en Hz. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_RESOLUTION: int

Devuelve la resolución ADC del FLIR Lepton en bits. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_RUN_COMMAND: int

Ejecuta un comando de 16 bits del SDK de FLIR Lepton. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_SET_ATTRIBUTE: int

Establece un atributo del FLIR Lepton del SDK de FLIR Lepton. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_ATTRIBUTE: int

Obtiene un atributo del FLIR Lepton del SDK de FLIR Lepton. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_FPA_TEMP: int

Obtiene la temperatura de la FPA del FLIR Lepton en Celsius. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_AUX_TEMP: int

Obtiene la temperatura AUX del FLIR Lepton en Celsius. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_SET_MODE: int

Pone el controlador del FLIR Lepton en un modo donde cada píxel es un valor de temperatura. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_MODE: int

Devuelve si el modo de medición está habilitado para el sensor FLIR Lepton. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_SET_RANGE: int

Establece el rango de temperatura asignado a los valores de píxel en el modo de medición. Consulta CSI.ioctl.

csi.IOCTL_LEPTON_GET_RANGE: int

Devuelve el rango de temperatura usado en el modo de medición. Consulta CSI.ioctl.

csi.IOCTL_HIMAX_MD_ENABLE: int

Controla la interrupción de detección de movimiento en el HM01B0. Consulta CSI.ioctl.

csi.IOCTL_HIMAX_MD_WINDOW: int

Establece la ventana de detección de movimiento en el HM01B0. Consulta CSI.ioctl.

csi.IOCTL_HIMAX_MD_THRESHOLD: int

Establece el umbral de detección de movimiento en el HM01B0. Consulta CSI.ioctl.

csi.IOCTL_HIMAX_MD_CLEAR: int

Borra la interrupción de detección de movimiento en el HM01B0. Consulta CSI.ioctl.

csi.IOCTL_HIMAX_OSC_ENABLE: int

Controla el oscilador interno en el HM01B0. Consulta CSI.ioctl.

csi.IOCTL_GET_RGB_STATS: int

Devuelve las estadísticas RGB del sensor de cámara. Consulta CSI.ioctl.

csi.IOCTL_GENX320_SET_BIASES: int

Establece las polarizaciones (biases) del sensor GENX320 en uno de los preajustes GENX320_BIASES_*. Consulta CSI.ioctl. Tras CSI.reset, el controlador aplica csi.GENX320_BIASES_LOW_NOISE, no csi.GENX320_BIASES_DEFAULT — usa este ioctl para cambiar a un preajuste distinto cuando la aplicación necesite más sensibilidad o ancho de banda.

csi.GENX320_BIASES_DEFAULT: int

Valores predeterminados de la hoja de datos del GenX320 — sensibilidad, ruido y ancho de banda equilibrados para escenas generales.

csi.GENX320_BIASES_LOW_LIGHT: int

Ajustado para condiciones de poca luz — ambos umbrales de contraste relajados para mayor sensibilidad, FO reducido, HPF desactivado para que los cambios lentos de brillo sigan registrándose.

csi.GENX320_BIASES_ACTIVE_MARKER: int

Ajustado para rastrear LED parpadeantes de alto contraste (marcadores activos) — umbrales de contraste elevados para que solo las transiciones bruscas disparen, FO y HPF muy altos para maximizar el ancho de banda y rechazar la deriva ambiental lenta, REFR=0 para que se capture cada flanco de parpadeo.

csi.GENX320_BIASES_LOW_NOISE: int

Valor predeterminado del controlador — menor sensibilidad que DEFAULT (umbrales de contraste elevados) y un FO más bajo para menos actividad por ruido de fondo. Ideal para escenas estáticas o lentas donde los eventos falsos dominarían.

csi.GENX320_BIASES_HIGH_SPEED: int

Ajustado para escenas de movimiento rápido — FO más alto para mayor ancho de banda de píxel, HPF más alto para rechazar cambios lentos, REFR más alto para un tiempo muerto más largo tras cada evento de modo que la lectura no se sature.

csi.IOCTL_GENX320_SET_BIAS: int

Establece una única polarización (bias) del sensor GENX320 a un valor DAC. Pasa una constante GENX320_BIAS_* (csi.GENX320_BIAS_DIFF_OFF, csi.GENX320_BIAS_DIFF_ON, csi.GENX320_BIAS_FO, csi.GENX320_BIAS_HPF o csi.GENX320_BIAS_REFR) y un valor DAC entero. Cada polarización es independiente — llama a este ioctl repetidamente para ajustar solo las polarizaciones que necesites tras aplicar un preajuste. Consulta CSI.ioctl.

csi.GENX320_BIAS_DIFF_OFF: int

Umbral de contraste del comparador negativo — controla cuánto debe oscurecerse un píxel antes de que se dispare un csi.PIX_OFF_EVENT. Valor más bajo = más sensible (más eventos).

csi.GENX320_BIAS_DIFF_ON: int

Umbral de contraste del comparador positivo — controla cuánto debe iluminarse un píxel antes de que se dispare un csi.PIX_ON_EVENT. Valor más bajo = más sensible (más eventos).

csi.GENX320_BIAS_FO: int

Frecuencia de corte del filtro paso bajo del píxel — equilibra el ancho de banda del píxel (velocidad/latencia) frente a la actividad por ruido de fondo. Valor más alto = respuesta de píxel más rápida, más ruido.

csi.GENX320_BIAS_HPF: int

Frecuencia de corte del filtro paso alto del píxel — rechaza los cambios lentos de brillo. Valor más alto = se filtran los cambios más lentos (solo se registran las transiciones rápidas).

csi.GENX320_BIAS_REFR: int

Periodo refractario del píxel — tiempo muerto tras la emisión de un evento por un píxel durante el cual no puede volver a dispararse. Valor más alto = tiempo muerto más largo, menos eventos de un píxel activo.

csi.IOCTL_GENX320_SET_AFK: int

Establece el filtro antiparpadeo (AFK) del GENX320, que rechaza eventos de píxeles que conmutan a una banda de frecuencia periódica (iluminación fluorescente, pantallas con LED, etc.). Pasa enable (1 para habilitar, 0 para deshabilitar) y, al habilitar, los bordes de la banda en hercios: (enable, freq_low_hz, freq_high_hz). Consulta CSI.ioctl.

csi.IOCTL_GENX320_SET_STC: int

Establece el modo del filtro de contraste espacio-temporal (STC) del GENX320. Pasa una constante GENX320_STC_* (csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY, csi.GENX320_STC_TRAIL) seguida del umbral o umbrales que el modo requiera (en milisegundos). Consulta CSI.ioctl.

csi.GENX320_STC_DISABLE: int

Deshabilita el filtro STC/trail del GENX320 — todos los eventos pasan.

csi.GENX320_STC_ONLY: int

Conserva el segundo evento de una ráfaga; descarta el primer evento y cualquier evento posterior. Toma un parámetro, stc_threshold en milisegundos — los eventos dentro de esa ventana respecto a un evento previo en el mismo píxel se consideran parte de la misma ráfaga.

csi.GENX320_STC_TRAIL_ONLY: int

Conserva el primer evento de una ráfaga; descarta los eventos posteriores en el mismo píxel hasta que haya transcurrido trail_threshold. Toma un parámetro, trail_threshold en milisegundos.

csi.GENX320_STC_TRAIL: int

Conserva el primer evento de una ráfaga más los flancos posteriores — combina csi.GENX320_STC_ONLY y csi.GENX320_STC_TRAIL_ONLY. Toma dos parámetros, stc_threshold y trail_threshold (ambos en ms); el sensor requiere que ambos se mantengan aproximadamente dentro de una relación de 13:1.

csi.IOCTL_GENX320_SET_MODE: int

Establece el modo de funcionamiento del GENX320. Pasa csi.GENX320_MODE_HISTO para el histograma de eventos en el chip (la cámara se comporta como una cámara de escala de grises normal a la velocidad de fotogramas configurada) o csi.GENX320_MODE_EVENT seguido de la longitud del eje de filas del ndarray de eventos (una potencia de dos entre 1024 y 65536) para la transmisión de eventos en bruto. Consulta CSI.ioctl.

csi.GENX320_MODE_HISTO: int

Modo histograma — los eventos se acumulan en el chip en compartimentos por píxel y se reportan como un fotograma en escala de grises de 320x320 a la velocidad configurada (~20-350 FPS). La cámara parece una cámara normal, por lo que todas las rutinas estándar de procesamiento de imágenes funcionan directamente.

csi.GENX320_MODE_EVENT: int

Modo eventos — omite el histograma en el chip y transmite eventos en bruto a un ndarray de numpy con marcas de tiempo en microsegundos, para aplicaciones que necesitan todo el detalle temporal en lugar de un fotograma preagrupado.

csi.IOCTL_GENX320_READ_EVENTS: int

Lee eventos en bruto en un ndarray de uint16 de forma (EVT_res, 6) (con EVT_res coincidiendo con el tamaño de búfer pasado a csi.IOCTL_GENX320_SET_MODE). Las columnas son [0] tipo de evento (csi.PIX_OFF_EVENT, csi.PIX_ON_EVENT, csi.EXT_TRIGGER_RISING/FALLING, csi.RST_TRIGGER_RISING/FALLING), [1] marca de tiempo en segundos, [2] milisegundos, [3] microsegundos, [4] coordenada X (0-319), [5] coordenada Y (0-319). Devuelve el número de eventos escritos en el búfer, dejando intactas las filas más antiguas más allá de ese recuento. Consulta CSI.ioctl.

csi.IOCTL_GENX320_CALIBRATE: int

Desactiva automáticamente los píxeles calientes — píxeles que se disparan de forma espuria incluso en una escena estática. El controlador construye un recuento de impactos por píxel de 320x320, calcula la media y la desviación estándar, y desactiva todo píxel cuyo recuento supere mean + sigma * stddev. Pasa un presupuesto de recuento de eventos (eventos a contabilizar antes de calcular las estadísticas — más alto = estimación más fiable, más lento; ~10000 es un buen valor predeterminado) y un sigma float (más bajo = más agresivo, ~0.5 predeterminado). Devuelve el número de píxeles desactivados. Apunta primero la cámara a una escena estática para que los eventos provocados por el movimiento no se cuenten en contra de píxeles que en realidad están bien. Consulta CSI.ioctl.

csi.IOCTL_GENX320_READ_EVENTS_RAW: int

Devuelve una image.Image de fotograma de eventos en bruto del GENX320, con los eventos todavía en la codificación empaquetada nativa del chip — útil si quieres reenviar el flujo en bruto a un PC para decodificarlo sin conexión en lugar de procesarlo en la cámara. Consulta CSI.ioctl.

csi.PIX_OFF_EVENT: int

Tipo de evento del GENX320 (columna [0]) — un píxel detectó una disminución de brillo (se cruzó el umbral de contraste negativo). Las columnas [4]/[5] llevan la X/Y del píxel.

csi.PIX_ON_EVENT: int

Tipo de evento del GENX320 (columna [0]) — un píxel detectó un aumento de brillo (se cruzó el umbral de contraste positivo). Las columnas [4]/[5] llevan la X/Y del píxel.

csi.RST_TRIGGER_RISING: int

Tipo de evento del GENX320 (columna [0]) — disparador de reinicio de píxel, flanco de subida. X/Y no se usan. El firmware no lo genera por ahora.

csi.RST_TRIGGER_FALLING: int

Tipo de evento del GENX320 (columna [0]) — disparador de reinicio de píxel, flanco de bajada. X/Y no se usan. El firmware no lo genera por ahora.

csi.EXT_TRIGGER_RISING: int

Tipo de evento del GENX320 (columna [0]) — el pin de disparo externo del sensor vio un flanco de subida. La entrada de disparo externo del GENX320 está cableada a la línea de sincronización de fotogramas de la cámara, que también se enruta a P10 en el procesador y al conector de pines. X/Y no se usan.

csi.EXT_TRIGGER_FALLING: int

Tipo de evento del GENX320 (columna [0]) — el pin de disparo externo del sensor vio un flanco de bajada. La entrada de disparo externo del GENX320 está cableada a la línea de sincronización de fotogramas de la cámara, que también se enruta a P10 en el procesador y al conector de pines. X/Y no se usan.