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.
typeindica el tipo de sensor térmico:fir.FIR_SHIELD: 16x4 píxeles (MLX90621).fir.FIR_MLX90621: 16x4 píxeles.fir.FIR_MLX90640: 32x24 píxeles.fir.FIR_MLX90641: 16x12 píxeles.fir.FIR_AMG8833: 8x8 píxeles.
De forma predeterminada
typees-1, lo que hace quefir.init()escanee e inicialice automáticamente un sensor térmico conectado según su dirección I2C. Tenga en cuenta quefir.FIR_MLX90640yfir.FIR_MLX90641comparten la misma dirección I2C, por lo que debe pasarfir.FIR_MLX90641atypepara inicializarlo específicamente.refreshes la frecuencia de actualización del sensor térmico en Hz:fir.FIR_MLX90621: Predeterminado a 64 Hz. Puede ser 1, 2, 4, 8, 16, 32, 64, 128, 256 o 512 Hz.fir.FIR_MLX90640: Predeterminado a 32 Hz. Puede ser 1, 2, 4, 8, 16, 32 o 64 Hz.fir.FIR_MLX90641: Predeterminado a 32 Hz. Puede ser 1, 2, 4, 8, 16, 32 o 64 Hz.fir.FIR_AMG8833: Fijo en 10 Hz.
Una frecuencia de actualización más alta reduce la precisión y viceversa.
resolutiones la resolución de medición del sensor térmico en bits:fir.FIR_MLX90621: Predeterminado a 18. Puede ser 15, 16, 17 o 18.fir.FIR_MLX90640: Predeterminado a 19. Puede ser 16, 17, 18 o 19.fir.FIR_MLX90641: Predeterminado a 19. Puede ser 16, 17, 18 o 19.fir.FIR_AMG8833: Fijo en 12.
Una resolución más alta reduce el rango máximo de temperatura y viceversa.
- fir.type() int¶
Devuelve el tipo del sensor térmico en uso. Uno de
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641ofir.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 dewidth * heighttemperaturas en float, la temperatura mínima observada y la temperatura máxima observada. Todos los valores están en grados Celsius.hmirrorsi es True refleja horizontalmente la matrizir.vflipsi es True invierte verticalmente la matrizir.transposesi es True transpone la matrizir(intercambia ancho y alto).timeoutsi 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
irsobreimagecon su esquina superior izquierda en(x, y).ires la lista plana de temperaturas dewidth * heightdevuelta porfir.read_ir().x_scalecontrola cuánto se escala la imagen renderizada en la dirección x. Un valor negativo la voltea horizontalmente. Si no se especifica, coincide cony_scalepara mantener la relación de aspecto.y_scalecontrola cuánto se escala la imagen renderizada en la dirección y. Un valor negativo la voltea verticalmente. Si no se especifica, coincide conx_scalepara mantener la relación de aspecto.roies el rectángulo de la región de interés(x, y, w, h)de los datos IR de origen a dibujar.rgb_channeles 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.alphacontrola 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_palettees 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_palettees una imagen GRAYSCALE de 256 píxeles usada como tabla de consulta de alfa que modulaalphapor cada valor de píxel de origen.hintes un OR lógico de:image.AREA: Usa escalado por área al reducir.image.BILINEAR: Usa escalado bilineal.image.BICUBIC: Usa escalado bicúbico.image.CENTER: Centra la imagen en el destino.image.HMIRROR: Refleja horizontalmente.image.VFLIP: Invierte verticalmente.image.TRANSPOSE: Transpone (intercambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica la extracción de rgb_channel antes de escalar.image.APPLY_COLOR_PALETTE_FIRST: Aplica la paleta de colores antes de escalar.image.SCALE_ASPECT_KEEP: Ajusta dentro del destino manteniendo la relación de aspecto.image.SCALE_ASPECT_EXPAND: Rellena el destino manteniendo la relación de aspecto (recorta).image.SCALE_ASPECT_IGNORE: Rellena el destino ignorando la relación de aspecto (estira).image.ROTATE_90: Rota 90 grados.image.ROTATE_180: Rota 180 grados.image.ROTATE_270: Rota 270 grados.
scalees una tupla de 2 elementos(min, max)que controla la temperatura mínima/máxima (en grados Celsius) usada para escalar la matrizir. De forma predeterminada usa el mínimo y máximo reales deir.
- 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 asensor.snapshot(). Sicopy_to_fbes False, la nueva imagen se asigna en el montículo (heap) de MicroPython (que es limitado); establezcacopy_to_fben True para escribir el resultado en el búfer de fotogramas (frame buffer) en su lugar.hmirrorsi es True refleja horizontalmente la nueva imagen.vflipsi es True invierte verticalmente la nueva imagen.transposesi es True transpone la nueva imagen.x_scalecontrola cuánto se escala la nueva imagen en la dirección x. Un valor negativo la voltea horizontalmente. Si no se especifica, coincide cony_scalepara mantener la relación de aspecto.y_scalecontrola cuánto se escala la nueva imagen en la dirección y. Un valor negativo la voltea verticalmente. Si no se especifica, coincide conx_scalepara mantener la relación de aspecto.roies el rectángulo de la región de interés(x, y, w, h)de los datos IR de origen a dibujar.rgb_channeles el canal RGB (0=R, 1=G, 2=B) a renderizar.-1(predeterminado) renderiza todos los canales.alphacontrola cuánto de la imagen de origen se mezcla (0-255). 255 es totalmente opaco.color_palettees 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_palettees una imagen GRAYSCALE de 256 píxeles usada como tabla de consulta de alfa.hintes un OR lógico de:image.AREA: Usa escalado por área al reducir.image.BILINEAR: Usa escalado bilineal.image.BICUBIC: Usa escalado bicúbico.image.CENTER: Centra la imagen en el destino.image.HMIRROR: Refleja horizontalmente.image.VFLIP: Invierte verticalmente.image.TRANSPOSE: Transpone (intercambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica la extracción de rgb_channel antes de escalar.image.APPLY_COLOR_PALETTE_FIRST: Aplica la paleta de colores antes de escalar.image.SCALE_ASPECT_KEEP: Ajusta dentro del destino manteniendo la relación de aspecto.image.SCALE_ASPECT_EXPAND: Rellena el destino manteniendo la relación de aspecto (recorta).image.SCALE_ASPECT_IGNORE: Rellena el destino ignorando la relación de aspecto (estira).image.ROTATE_90: Rota 90 grados.image.ROTATE_180: Rota 180 grados.image.ROTATE_270: Rota 270 grados.
scalees 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.pixformatcontrola el formato de píxel de salida. Debe serimage.GRAYSCALEoimage.RGB565.copy_to_fbsi es True escribe el resultado en el búfer de fotogramas (frame buffer) en lugar de asignarlo en el montículo (heap).timeoutsi 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.