fir — driver de sensor térmico (fir == far infrared)

O módulo fir controla arranjos de termopilhas de infravermelho distante (FIR) conectados a uma OpenMV Cam via I2C – sensores 8x8, 16x4, 16x12 e 32x24 são suportados (veja as constantes no final desta página). Cada quadro retorna uma temperatura por pixel em graus Celsius, que pode ser renderizada como uma imagem térmica independente com snapshot() ou composta sobre um quadro de luz visível do sensor CSI com draw_ir(), normalmente através de uma paleta de cores como image.PALETTE_RAINBOW ou image.PALETTE_IRONBOW.

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

Funções

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

Inicializa um sensor térmico conectado.

type indica o tipo de sensor térmico:

Por padrão type é -1, o que faz com que fir.init() examine e inicialize automaticamente um sensor térmico conectado com base em seu endereço I2C. Observe que fir.FIR_MLX90640 e fir.FIR_MLX90641 compartilham o mesmo endereço I2C, então você deve passar fir.FIR_MLX90641 para type para inicializá-lo especificamente.

refresh é a taxa de atualização do sensor térmico em Hz:

Uma taxa de atualização mais alta reduz a precisão e vice-versa.

resolution é a resolução de medição do sensor térmico em bits:

Uma resolução mais alta reduz a faixa máxima de temperatura e vice-versa.

fir.deinit() None

Desinicializa o sensor térmico e libera recursos.

fir.width() int

Retorna a resolução horizontal (em pixels) do sensor térmico em uso.

fir.height() int

Retorna a resolução vertical (em pixels) do sensor térmico em uso.

fir.type() int

Retorna o tipo do sensor térmico em uso. Um dentre fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 ou fir.FIR_AMG8833.

fir.refresh() int

Retorna a taxa de atualização atual (Hz) definida durante a chamada de fir.init().

fir.resolution() int

Retorna a resolução atual (bits) definida durante a chamada de fir.init().

fir.read_ta() float

Retorna a temperatura ambiente (ou seja, a temperatura do sensor) em Celsius como um float.

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

Retorna uma 4-tupla (ta, ir, to_min, to_max) contendo a temperatura ambiente, uma lista plana width * height de temperaturas em float, a temperatura mínima observada e a temperatura máxima observada. Todos os valores estão em Celsius.

hmirror se True espelha horizontalmente o arranjo ir.

vflip se True inverte verticalmente o arranjo ir.

transpose se True transpõe o arranjo ir (troca largura e altura).

timeout se diferente de -1, o número de milissegundos a aguardar por um novo quadro.

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

Desenha o arranjo ir sobre image com seu canto superior esquerdo em (x, y).

ir é a lista plana width * height de temperaturas retornada por fir.read_ir().

x_scale controla o quanto a imagem renderizada é escalada na direção x. Um valor negativo inverte horizontalmente. Se não especificado, corresponde a y_scale para manter a proporção.

y_scale controla o quanto a imagem renderizada é escalada na direção y. Um valor negativo inverte verticalmente. Se não especificado, corresponde a x_scale para manter a proporção.

roi é o retângulo da região de interesse (x, y, w, h) dos dados IR de origem a serem desenhados.

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a ser renderizado na imagem de destino quando o destino é RGB565. -1 (padrão) renderiza todos os canais.

alpha controla o quanto da imagem de origem é mesclado no destino (0-255). 255 é totalmente opaco; 0 não resulta em nenhuma modificação.

color_palette é um enum de paleta de cores (por exemplo, image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) ou uma imagem RGB565 de 256 pixels usada como tabela de consulta sobre o valor de origem em escala de cinza.

alpha_palette é uma imagem GRAYSCALE de 256 pixels usada como tabela de consulta de alfa que modula alpha por valor de pixel de origem.

hint é um OR lógico de:

scale é uma 2-tupla (min, max) que controla a temperatura mínima/máxima (em Celsius) usada para escalar o arranjo ir. O padrão são os valores mínimo e máximo reais 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 um quadro do sensor térmico e o retorna como uma image.Image. Funciona de forma similar a sensor.snapshot(). Se copy_to_fb for False, a nova imagem é alocada no heap do MicroPython (que é limitado); defina copy_to_fb como True para gravar o resultado no frame buffer em vez disso.

hmirror se True espelha horizontalmente a nova imagem.

vflip se True inverte verticalmente a nova imagem.

transpose se True transpõe a nova imagem.

x_scale controla o quanto a nova imagem é escalada na direção x. Um valor negativo inverte horizontalmente. Se não especificado, corresponde a y_scale para manter a proporção.

y_scale controla o quanto a nova imagem é escalada na direção y. Um valor negativo inverte verticalmente. Se não especificado, corresponde a x_scale para manter a proporção.

roi é o retângulo da região de interesse (x, y, w, h) dos dados IR de origem a serem desenhados.

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a ser renderizado. -1 (padrão) renderiza todos os canais.

alpha controla o quanto da imagem de origem é mesclado (0-255). 255 é totalmente opaco.

color_palette é um enum de paleta de cores ou uma imagem RGB565 de 256 pixels usada como tabela de consulta sobre o valor de origem em escala de cinza.

alpha_palette é uma imagem GRAYSCALE de 256 pixels usada como tabela de consulta de alfa.

hint é um OR lógico de:

scale é uma 2-tupla (min, max) que controla a temperatura mínima/máxima (em Celsius) usada para escalar o arranjo IR. O padrão são os valores mínimo e máximo reais do IR.

pixformat controla o formato de pixel de saída. Deve ser image.GRAYSCALE ou image.RGB565.

copy_to_fb se True grava o resultado no frame buffer em vez de alocá-lo no heap.

timeout se diferente de -1, o número de milissegundos a aguardar por um novo quadro.

Constantes

fir.FIR_SHIELD: int

O OpenMV Cam Thermopile Shield (MLX90621). Alias para 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).