fir — controlador de sensor térmico (fir == infrarrojo lejano)

El módulo fir controla matrices de termopilas de infrarrojo lejano (FIR) conectadas a una OpenMV Cam mediante I2C: se admiten sensores de 8x8, 16x4, 16x12 y 32x24 (consulte las constantes al final de esta página). Cada fotograma devuelve una temperatura por píxel en grados Celsius, que puede representarse como una imagen térmica independiente con snapshot() o componerse sobre un fotograma de luz visible del sensor CSI con draw_ir(), normalmente a través de una paleta de colores como image.PALETTE_RAINBOW o image.PALETTE_IRONBOW.

Ejemplo de uso:

import csi
import fir

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

fir.init()

while True:
    img = csi0.snapshot()
    ta, ir, to_min, to_max = fir.read_ir()
    fir.draw_ir(img, ir)
    print("====================")
    print("Ambient temperature: %0.2f" % ta)
    print("Min temperature seen: %0.2f" % to_min)
    print("Max temperature seen: %0.2f" % to_max)

Funciones

fir.init(type: int = -1, refresh: int | None = None, resolution: int | None = None) None

Inicializa un sensor térmico conectado.

type indica el tipo de sensor térmico:

De forma predeterminada type es -1, lo que hace que fir.init() escanee e inicialice automáticamente un sensor térmico conectado según su dirección I2C. Tenga en cuenta que fir.FIR_MLX90640 y fir.FIR_MLX90641 comparten la misma dirección I2C, por lo que debe pasar fir.FIR_MLX90641 a type para inicializarlo específicamente.

refresh es la frecuencia de actualización del sensor térmico en Hz:

Una frecuencia de actualización más alta reduce la precisión y viceversa.

resolution es la resolución de medición del sensor térmico en bits:

Una resolución más alta reduce el rango máximo de temperatura y viceversa.

fir.deinit() None

Desinicializa el sensor térmico y libera recursos.

fir.width() int

Devuelve la resolución horizontal (en píxeles) del sensor térmico en uso.

fir.height() int

Devuelve la resolución vertical (en píxeles) del sensor térmico en uso.

fir.type() int

Devuelve el tipo del sensor térmico en uso. Uno de fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 o fir.FIR_AMG8833.

fir.refresh() int

Devuelve la frecuencia de actualización actual (Hz) establecida durante la llamada a fir.init().

fir.resolution() int

Devuelve la resolución actual (bits) establecida durante la llamada a fir.init().

fir.read_ta() float

Devuelve la temperatura ambiente (es decir, la temperatura del sensor) en grados Celsius como un float.

fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]

Devuelve una tupla de 4 elementos (ta, ir, to_min, to_max) que contiene la temperatura ambiente, una lista plana de width * height temperaturas en float, la temperatura mínima observada y la temperatura máxima observada. Todos los valores están en grados Celsius.

hmirror si es True refleja horizontalmente la matriz ir.

vflip si es True invierte verticalmente la matriz ir.

transpose si es True transpone la matriz ir (intercambia ancho y alto).

timeout si no es -1, el número de milisegundos a esperar por un nuevo fotograma.

fir.draw_ir(image: image.Image, ir: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None

Dibuja la matriz ir sobre image con su esquina superior izquierda en (x, y).

ir es la lista plana de temperaturas de width * height devuelta por fir.read_ir().

x_scale controla cuánto se escala la imagen renderizada en la dirección x. Un valor negativo la voltea horizontalmente. Si no se especifica, coincide con y_scale para mantener la relación de aspecto.

y_scale controla cuánto se escala la imagen renderizada en la dirección y. Un valor negativo la voltea verticalmente. Si no se especifica, coincide con x_scale para mantener la relación de aspecto.

roi es el rectángulo de la región de interés (x, y, w, h) de los datos IR de origen a dibujar.

rgb_channel es el canal RGB (0=R, 1=G, 2=B) a renderizar sobre la imagen de destino cuando el destino es RGB565. -1 (predeterminado) renderiza todos los canales.

alpha controla cuánto de la imagen de origen se mezcla en el destino (0-255). 255 es totalmente opaco; 0 no produce ninguna modificación.

color_palette es una enumeración de paleta de colores (p. ej. image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) o una imagen RGB565 de 256 píxeles usada como tabla de consulta sobre el valor de origen en escala de grises.

alpha_palette es una imagen GRAYSCALE de 256 píxeles usada como tabla de consulta de alfa que modula alpha por cada valor de píxel de origen.

hint es un OR lógico de:

scale es una tupla de 2 elementos (min, max) que controla la temperatura mínima/máxima (en grados Celsius) usada para escalar la matriz ir. De forma predeterminada usa el mínimo y máximo reales de ir.

fir.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = -1) image.Image

Captura un fotograma del sensor térmico y lo devuelve como un image.Image. Funciona de manera similar a sensor.snapshot(). Si copy_to_fb es False, la nueva imagen se asigna en el montículo (heap) de MicroPython (que es limitado); establezca copy_to_fb en True para escribir el resultado en el búfer de fotogramas (frame buffer) en su lugar.

hmirror si es True refleja horizontalmente la nueva imagen.

vflip si es True invierte verticalmente la nueva imagen.

transpose si es True transpone la nueva imagen.

x_scale controla cuánto se escala la nueva imagen en la dirección x. Un valor negativo la voltea horizontalmente. Si no se especifica, coincide con y_scale para mantener la relación de aspecto.

y_scale controla cuánto se escala la nueva imagen en la dirección y. Un valor negativo la voltea verticalmente. Si no se especifica, coincide con x_scale para mantener la relación de aspecto.

roi es el rectángulo de la región de interés (x, y, w, h) de los datos IR de origen a dibujar.

rgb_channel es el canal RGB (0=R, 1=G, 2=B) a renderizar. -1 (predeterminado) renderiza todos los canales.

alpha controla cuánto de la imagen de origen se mezcla (0-255). 255 es totalmente opaco.

color_palette es una enumeración de paleta de colores o una imagen RGB565 de 256 píxeles usada como tabla de consulta sobre el valor de origen en escala de grises.

alpha_palette es una imagen GRAYSCALE de 256 píxeles usada como tabla de consulta de alfa.

hint es un OR lógico de:

scale es una tupla de 2 elementos (min, max) que controla la temperatura mínima/máxima (en grados Celsius) usada para escalar la matriz IR. De forma predeterminada usa el mínimo y máximo reales del IR.

pixformat controla el formato de píxel de salida. Debe ser image.GRAYSCALE o image.RGB565.

copy_to_fb si es True escribe el resultado en el búfer de fotogramas (frame buffer) en lugar de asignarlo en el montículo (heap).

timeout si no es -1, el número de milisegundos a esperar por un nuevo fotograma.

Constantes

fir.FIR_SHIELD: int

El OpenMV Cam Thermopile Shield (MLX90621). Alias de fir.FIR_MLX90621.

fir.FIR_MLX90621: int

Sensor térmico MLX90621 (16x4).

fir.FIR_MLX90640: int

Sensor térmico MLX90640 (32x24).

fir.FIR_MLX90641: int

Sensor térmico MLX90641 (16x12).

fir.FIR_AMG8833: int

Sensor térmico AMG8833 (8x8).