fir — driver de sensor térmico (fir == infravermelho longínquo)

O módulo fir controla matrizes de termópios de infravermelhos longínquos (FIR) ligadas a uma OpenMV Cam via I2C – são suportados sensores 8x8, 16x4, 16x12 e 32x24 (consulte as constantes no final desta página). Cada fotograma devolve a temperatura por pixel em graus Celsius, que pode ser apresentada como imagem térmica autónoma com snapshot() ou composta sobre um fotograma 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 utilização:

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 o sensor térmico ligado.

type indica o tipo de sensor térmico:

Por omissão, type é -1, o que faz com que fir.init() detete e inicialize automaticamente o sensor térmico com base no seu endereço I2C. Note que fir.FIR_MLX90640 e fir.FIR_MLX90641 partilham o mesmo endereço I2C, pelo que deve passar fir.FIR_MLX90641 em type para o inicializar especificamente.

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

Uma taxa de atualização mais elevada diminui a precisão e vice-versa.

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

Uma resolução mais elevada reduz o intervalo máximo de temperatura e vice-versa.

fir.deinit() None

Desinicializa o sensor térmico e liberta os recursos.

fir.width() int

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

fir.height() int

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

fir.type() int

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

fir.refresh() int

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

fir.resolution() int

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

fir.read_ta() float

Devolve a temperatura ambiente (ou seja, a temperatura do sensor) em Celsius como valor float.

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

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

hmirror se True reflete horizontalmente o array ir.

vflip se True inverte verticalmente o array ir.

transpose se True transpõe o array ir (troca a largura pela altura).

timeout se não for -1, o número de milissegundos a aguardar por um novo 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

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

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

x_scale controla o fator de escala da imagem renderizada na direção x. Um valor negativo reflete horizontalmente. Se não especificado, iguala y_scale para manter a proporção.

y_scale controla o fator de escala da imagem renderizada na direção y. Um valor negativo reflete verticalmente. Se não especificado, iguala x_scale para manter a proporção.

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

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

alpha controla a quantidade de imagem de origem a fundir com o destino (0-255). 255 é totalmente opaco; 0 não produz qualquer modificação.

color_palette é uma enumeração de paleta de cores (por ex. 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 cinzentos.

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 é um tuplo de 2 elementos (min, max) que controla a temperatura mínima/máxima (em Celsius) utilizada para escalar o array ir. Por omissão usa os valores mínimo e máximo reais do 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 fotograma do sensor térmico e devolve-o como image.Image. Funciona de forma semelhante a sensor.snapshot(). Se copy_to_fb for False, a nova imagem é alocada na memória heap do MicroPython (que é limitada); defina copy_to_fb como True para escrever o resultado no buffer de fotograma.

hmirror se True reflete horizontalmente a nova imagem.

vflip se True inverte verticalmente a nova imagem.

transpose se True transpõe a nova imagem.

x_scale controla o fator de escala da nova imagem na direção x. Um valor negativo reflete horizontalmente. Se não especificado, iguala y_scale para manter a proporção.

y_scale controla o fator de escala da nova imagem na direção y. Um valor negativo reflete verticalmente. Se não especificado, iguala x_scale para manter a proporção.

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

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a renderizar. -1 (por omissão) renderiza todos os canais.

alpha controla a quantidade de imagem de origem a fundir (0-255). 255 é totalmente opaco.

color_palette é uma enumeração de paleta de cores ou uma imagem RGB565 de 256 pixels usada como tabela de consulta sobre o valor de origem em escala de cinzentos.

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

hint é um OR lógico de:

scale é um tuplo de 2 elementos (min, max) que controla a temperatura mínima/máxima (em Celsius) utilizada para escalar o array IR. Por omissão usa 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 escreve o resultado no buffer de fotograma em vez de alocar na heap.

timeout se não for -1, o número de milissegundos a aguardar por um novo fotograma.

Constantes

fir.FIR_SHIELD: int

O Shield de Termópios da OpenMV Cam (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).