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.
typeindica o tipo de sensor térmico:fir.FIR_SHIELD: 16x4 pixels (MLX90621).fir.FIR_MLX90621: 16x4 pixels.fir.FIR_MLX90640: 32x24 pixels.fir.FIR_MLX90641: 16x12 pixels.fir.FIR_AMG8833: 8x8 pixels.
Por omissão,
typeé-1, o que faz com quefir.init()detete e inicialize automaticamente o sensor térmico com base no seu endereço I2C. Note quefir.FIR_MLX90640efir.FIR_MLX90641partilham o mesmo endereço I2C, pelo que deve passarfir.FIR_MLX90641emtypepara o inicializar especificamente.refreshé a taxa de atualização do sensor térmico em Hz:fir.FIR_MLX90621: Por omissão 64 Hz. Pode ser 1, 2, 4, 8, 16, 32, 64, 128, 256 ou 512 Hz.fir.FIR_MLX90640: Por omissão 32 Hz. Pode ser 1, 2, 4, 8, 16, 32 ou 64 Hz.fir.FIR_MLX90641: Por omissão 32 Hz. Pode ser 1, 2, 4, 8, 16, 32 ou 64 Hz.fir.FIR_AMG8833: Fixo em 10 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:fir.FIR_MLX90621: Por omissão 18. Pode ser 15, 16, 17 ou 18.fir.FIR_MLX90640: Por omissão 19. Pode ser 16, 17, 18 ou 19.fir.FIR_MLX90641: Por omissão 19. Pode ser 16, 17, 18 ou 19.fir.FIR_AMG8833: Fixo em 12.
Uma resolução mais elevada reduz o intervalo máximo de temperatura e vice-versa.
- fir.type() int¶
Devolve o tipo do sensor térmico em uso. Um de
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641oufir.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 planawidth * heightde temperaturas float, a temperatura mínima detetada e a temperatura máxima detetada. Todos os valores estão em Celsius.hmirrorse True reflete horizontalmente o arrayir.vflipse True inverte verticalmente o arrayir.transposese True transpõe o arrayir(troca a largura pela altura).timeoutse 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
irsobreimagecom o canto superior esquerdo em(x, y).iré a lista plana de temperaturaswidth * heightdevolvida porfir.read_ir().x_scalecontrola o fator de escala da imagem renderizada na direção x. Um valor negativo reflete horizontalmente. Se não especificado, igualay_scalepara manter a proporção.y_scalecontrola o fator de escala da imagem renderizada na direção y. Um valor negativo reflete verticalmente. Se não especificado, igualax_scalepara 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.alphacontrola 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 modulaalphapor valor de pixel de origem.hinté um OR lógico de:image.AREA: Utiliza escala por área ao reduzir.image.BILINEAR: Utiliza escala bilinear.image.BICUBIC: Utiliza escala bicúbica.image.CENTER: Centra a imagem no destino.image.HMIRROR: Reflexão horizontal.image.VFLIP: Inversão vertical.image.TRANSPOSE: Transpõe (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica a extração de canal RGB antes da escala.image.APPLY_COLOR_PALETTE_FIRST: Aplica a paleta de cores antes da escala.image.SCALE_ASPECT_KEEP: Ajusta ao destino mantendo a proporção.image.SCALE_ASPECT_EXPAND: Preenche o destino mantendo a proporção (recorta).image.SCALE_ASPECT_IGNORE: Preenche o destino ignorando a proporção (estica).image.ROTATE_90: Roda 90 graus.image.ROTATE_180: Roda 180 graus.image.ROTATE_270: Roda 270 graus.
scaleé um tuplo de 2 elementos(min, max)que controla a temperatura mínima/máxima (em Celsius) utilizada para escalar o arrayir. Por omissão usa os valores mínimo e máximo reais doir.
- 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 asensor.snapshot(). Secopy_to_fbfor False, a nova imagem é alocada na memória heap do MicroPython (que é limitada); definacopy_to_fbcomo True para escrever o resultado no buffer de fotograma.hmirrorse True reflete horizontalmente a nova imagem.vflipse True inverte verticalmente a nova imagem.transposese True transpõe a nova imagem.x_scalecontrola o fator de escala da nova imagem na direção x. Um valor negativo reflete horizontalmente. Se não especificado, igualay_scalepara manter a proporção.y_scalecontrola o fator de escala da nova imagem na direção y. Um valor negativo reflete verticalmente. Se não especificado, igualax_scalepara 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.alphacontrola 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:image.AREA: Utiliza escala por área ao reduzir.image.BILINEAR: Utiliza escala bilinear.image.BICUBIC: Utiliza escala bicúbica.image.CENTER: Centra a imagem no destino.image.HMIRROR: Reflexão horizontal.image.VFLIP: Inversão vertical.image.TRANSPOSE: Transpõe (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica a extração de canal RGB antes da escala.image.APPLY_COLOR_PALETTE_FIRST: Aplica a paleta de cores antes da escala.image.SCALE_ASPECT_KEEP: Ajusta ao destino mantendo a proporção.image.SCALE_ASPECT_EXPAND: Preenche o destino mantendo a proporção (recorta).image.SCALE_ASPECT_IGNORE: Preenche o destino ignorando a proporção (estica).image.ROTATE_90: Roda 90 graus.image.ROTATE_180: Roda 180 graus.image.ROTATE_270: Roda 270 graus.
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.pixformatcontrola o formato de pixel de saída. Deve serimage.GRAYSCALEouimage.RGB565.copy_to_fbse True escreve o resultado no buffer de fotograma em vez de alocar na heap.timeoutse 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.