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
cidcomocsi.LEPTONpara seleccionar un módulo de sensor FLIR Lepton. Sicides -1 se selecciona el sensor principal (normalmente un módulo de cámara de color en placas multisensor).Si
delaysesFalse, 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 queCSI.snapshotdevuelva fotogramas corruptos. Desactivar los retardos te permite agrupar las actualizaciones y aplicar un único retardo al final antes de llamar aCSI.snapshot.Si
fflushesFalse, se desactiva el vaciado automático del framebuffer mencionado enCSI.framebuffers. Esto elimina cualquier límite de tiempo sobre los fotogramas en la cola FIFO del búfer de fotogramas (frame buffer).streamselecciona si este CSI es la fuente de transmisión enviada al IDE. Si esNone(predeterminado), el CSI se convierte en la fuente de transmisión solo si es el sensor principal (no auxiliar). PasaTruepara 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
hardesTrue.harddebe 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
enablees 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.snapshotsi 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
timeoframes, snapshot se bloqueará durante esa cantidad detimemilisegundos oframescapturados desde la cámara. Ambos argumentos pueden usarse al mismo tiempo. Una vez transcurridostimeoframes, snapshot devolveráNone.blockingpuede serFalsepara habilitar el comportamiento no bloqueante, que hará que snapshot devuelvaNonecuando la siguiente imagen de la cámara no esté lista en lugar de esperar.imagepuede ser otro objetoimage.Imagepara actualizarlo con la nueva imagen capturada desde la cámara en lugar de devolver un nuevo objetoimage.Image. El contenido anterior de la imagen se sobrescribe mediante una copia profunda.Si
CSI.auto_rotationestá habilitado, este método devolverá unaimage.Imageya rotada.
- 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.FROGEYE2020ocsi.SOFTCSI.
- readable() bool¶
Devuelve
Truesi hay una imagen lista para ser devuelta porCSI.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.YUV422ocsi.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 aCSI.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.frameratefunciona 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.frameratetambié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.frameratepuede entrar en conflicto conCSI.auto_exposureen 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.
roies 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
Trueen caso de éxito yFalseen caso de fallo.
- brightness(brightness: int) bool¶
Establece el brillo de la imagen de la cámara.
Devuelve
Trueen caso de éxito yFalseen caso de fallo.
- contrast(contrast: int) bool¶
Establece el contraste de la imagen de la cámara.
Devuelve
Trueen caso de éxito yFalseen caso de fallo.
- saturation(saturation: int) bool¶
Establece la saturación de la imagen de la cámara.
Devuelve
Trueen caso de éxito yFalseen caso de fallo.
- quality(quality: int) bool¶
Establece la calidad de compresión JPEG de la imagen de la cámara. 0 - 100.
Devuelve
Trueen caso de éxito yFalseen 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
Trueen caso de éxito yFalseen caso de fallo.
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
enableactiva (True) o desactiva (False) el control automático de ganancia. La cámara arranca con el control automático de ganancia activado.Si
enableesFalse, puedes establecer una ganancia fija en decibelios congain_db.Si
enableesTrue, puedes establecer el techo máximo de ganancia en decibelios congain_db_ceilingpara el algoritmo de control automático de ganancia.Nota
También debes desactivar el balance de blancos si quieres rastrear colores.
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
enableactiva (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
enableesFalse, puedes establecer un tiempo de exposición fijo en microsegundos conexposure_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.
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
enableactiva (True) o desactiva (False) el balance de blancos automático. La cámara arranca con el balance de blancos automático activado.Si
enableesFalse, puedes establecer una ganancia fija en decibelios para los canales rojo, verde y azul respectivamente conrgb_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.
enablepasaTrueoFalsepara activar o desactivar el BLC. Normalmente siempre conviene tenerlo activado.regssi está desactivado, puedes establecer manualmente los valores de los registros BLC de una llamada anterior aCSI.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
imuinstalada 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.framesizeoCSI.window.Un
countde 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 encolancountbú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 queCSI.snapshotsiempre 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.NORMALocsi.NEGATIVE).Devuelve
Trueen caso de éxito yFalseen caso de fallo.
- lens_correction(enable: bool, radi: int, coef: int) bool¶
enableTruepara habilitar,Falsepara deshabilitar.radiradio entero de píxeles a corregir.coefpotencia de la corrección.Devuelve
Trueen caso de éxito yFalseen caso de fallo.
- vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None¶
Registra la función de retorno (callback)
cbpara 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).cbtoma 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)
cbpara 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 medianteCSI.snapshot.cbno toma argumentos. Úsalo para programar la lectura de un fotograma más tarde conmicropython.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.
requestes una de las constantesIOCTL_*; 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 aframesize()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_mstoma 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.
cmdes 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_ides el id de atributo de 16 bits;payloades unbytes/bytearraycuya longitud debe ser múltiplo de 16 bits.ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)Lee un atributo del SDK de Lepton.
attr_ides el id de atributo de 16 bits;wordses el número de palabras de 16 bits a leer. Devuelve unbytearray.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=Truehabilita la salida de temperatura directa. La opciónhigh_temp_enabledselecciona 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..255cuando 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 (
0–255).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).
presetes una de las constantesGENX320_BIASES_*.ioctl(IOCTL_GENX320_SET_BIAS, bias, value)Establece una única polarización (bias).
biases una de las constantesGENX320_BIAS_*;valuees 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.
enablees 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.
modees una de las constantesGENX320_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.
modees una de las constantesGENX320_MODE_*. Para el modo de eventos,evt_reses la longitud del eje de filas del búfer de eventos pasado aIOCTL_GENX320_READ_EVENTS.ioctl(IOCTL_GENX320_READ_EVENTS, buf)Lee eventos en
buf, unndarraydeuint16de forma(EVT_res, 6)dondeEVT_reses 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]– coordenadax.[5]– coordenaday.
Devuelve el número de eventos escritos.
ioctl(IOCTL_GENX320_READ_EVENTS_RAW)Devuelve una
image.Imageque contiene el fotograma de eventos en bruto del GENX320.ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)Desactiva los píxeles cuyo ruido supera
sigmadesviaciones estándar respecto a la distribución normal.iterationses 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_IRONBOWy (cuando sea compatible)image.PALETTE_DEPTH,image.PALETTE_EVT_DARKoimage.PALETTE_EVT_LIGHT.Devuelve el ajuste actual si se llama sin argumentos.
Funciones¶
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.RGB565: int¶
Formato de píxel RGB565. Cada píxel es de 16 bits (5 bits rojo, 6 bits verde, 5 bits azul).
- 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.qualitypara controlar la calidad JPEG. Solo funciona en las cámaras OV2640/OV5640.
- csi.NORMAL: int¶
Modo normal para
CSI.special_effect.
- csi.NEGATIVE: int¶
Modo negativo para
CSI.special_effect.
- csi.SXGA: int¶
Resolución de 1280x1024 para el sensor de cámara. Solo funciona en las cámaras OV2640/OV5640.
- csi.UXGA: int¶
Resolución de 1600x1200 para el sensor de cámara. Solo funciona en las cámaras OV2640/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_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.framesizeoptimice para el campo de visión en lugar de los FPS. ConsultaCSI.ioctl.
- csi.IOCTL_GET_FOV_WIDE: int¶
Devuelve si
CSI.framesizeestá optimizando para el campo de visión en lugar de los FPS. ConsultaCSI.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_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_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_*. ConsultaCSI.ioctl. TrasCSI.reset, el controlador aplicacsi.GENX320_BIASES_LOW_NOISE, nocsi.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_HPFocsi.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. ConsultaCSI.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). ConsultaCSI.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). ConsultaCSI.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_thresholden 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_thresholden milisegundos.
- csi.GENX320_STC_TRAIL: int¶
Conserva el primer evento de una ráfaga más los flancos posteriores — combina
csi.GENX320_STC_ONLYycsi.GENX320_STC_TRAIL_ONLY. Toma dos parámetros,stc_thresholdytrail_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_HISTOpara 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) ocsi.GENX320_MODE_EVENTseguido de la longitud del eje de filas delndarrayde eventos (una potencia de dos entre 1024 y 65536) para la transmisión de eventos en bruto. ConsultaCSI.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
ndarrayde 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
ndarrayde uint16 de forma(EVT_res, 6)(conEVT_rescoincidiendo con el tamaño de búfer pasado acsi.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. ConsultaCSI.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. ConsultaCSI.ioctl.
- csi.IOCTL_GENX320_READ_EVENTS_RAW: int¶
Devuelve una
image.Imagede 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. ConsultaCSI.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.