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.
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 padrão
typeé-1, o que faz com quefir.init()examine e inicialize automaticamente um sensor térmico conectado com base em seu endereço I2C. Observe quefir.FIR_MLX90640efir.FIR_MLX90641compartilham o mesmo endereço I2C, então você deve passarfir.FIR_MLX90641paratypepara inicializá-lo especificamente.refreshé a taxa de atualização do sensor térmico em Hz:fir.FIR_MLX90621: O padrão é 64 Hz. Pode ser 1, 2, 4, 8, 16, 32, 64, 128, 256 ou 512 Hz.fir.FIR_MLX90640: O padrão é 32 Hz. Pode ser 1, 2, 4, 8, 16, 32 ou 64 Hz.fir.FIR_MLX90641: O padrã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 alta reduz a precisão e vice-versa.
resolutioné a resolução de medição do sensor térmico em bits:fir.FIR_MLX90621: O padrão é 18. Pode ser 15, 16, 17 ou 18.fir.FIR_MLX90640: O padrão é 19. Pode ser 16, 17, 18 ou 19.fir.FIR_MLX90641: O padrão é 19. Pode ser 16, 17, 18 ou 19.fir.FIR_AMG8833: Fixo em 12.
Uma resolução mais alta reduz a faixa máxima de temperatura e vice-versa.
- fir.type() int¶
Retorna o tipo do sensor térmico em uso. Um dentre
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641oufir.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 planawidth * heightde temperaturas em float, a temperatura mínima observada e a temperatura máxima observada. Todos os valores estão em Celsius.hmirrorse True espelha horizontalmente o arranjoir.vflipse True inverte verticalmente o arranjoir.transposese True transpõe o arranjoir(troca largura e altura).timeoutse 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
irsobreimagecom seu canto superior esquerdo em(x, y).iré a lista planawidth * heightde temperaturas retornada porfir.read_ir().x_scalecontrola o quanto a imagem renderizada é escalada na direção x. Um valor negativo inverte horizontalmente. Se não especificado, corresponde ay_scalepara manter a proporção.y_scalecontrola o quanto a imagem renderizada é escalada na direção y. Um valor negativo inverte verticalmente. Se não especificado, corresponde ax_scalepara 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.alphacontrola 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 modulaalphapor valor de pixel de origem.hinté um OR lógico de:image.AREA: Usa escalonamento por área ao reduzir a escala.image.BILINEAR: Usa escalonamento bilinear.image.BICUBIC: Usa escalonamento bicúbico.image.CENTER: Centraliza a imagem no destino.image.HMIRROR: Espelha horizontalmente.image.VFLIP: Inverte verticalmente.image.TRANSPOSE: Transpõe (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica a extração de rgb_channel antes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplica a paleta de cores antes do escalonamento.image.SCALE_ASPECT_KEEP: Ajusta dentro do 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: Rotaciona em 90 graus.image.ROTATE_180: Rotaciona em 180 graus.image.ROTATE_270: Rotaciona em 270 graus.
scaleé uma 2-tupla(min, max)que controla a temperatura mínima/máxima (em Celsius) usada para escalar o arranjoir. O padrão são os valores mínimo e máximo reais 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 um quadro do sensor térmico e o retorna como uma
image.Image. Funciona de forma similar asensor.snapshot(). Secopy_to_fbfor False, a nova imagem é alocada no heap do MicroPython (que é limitado); definacopy_to_fbcomo True para gravar o resultado no frame buffer em vez disso.hmirrorse True espelha horizontalmente a nova imagem.vflipse True inverte verticalmente a nova imagem.transposese True transpõe a nova imagem.x_scalecontrola o quanto a nova imagem é escalada na direção x. Um valor negativo inverte horizontalmente. Se não especificado, corresponde ay_scalepara manter a proporção.y_scalecontrola o quanto a nova imagem é escalada na direção y. Um valor negativo inverte verticalmente. Se não especificado, corresponde ax_scalepara 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.alphacontrola 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:image.AREA: Usa escalonamento por área ao reduzir a escala.image.BILINEAR: Usa escalonamento bilinear.image.BICUBIC: Usa escalonamento bicúbico.image.CENTER: Centraliza a imagem no destino.image.HMIRROR: Espelha horizontalmente.image.VFLIP: Inverte verticalmente.image.TRANSPOSE: Transpõe (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica a extração de rgb_channel antes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplica a paleta de cores antes do escalonamento.image.SCALE_ASPECT_KEEP: Ajusta dentro do 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: Rotaciona em 90 graus.image.ROTATE_180: Rotaciona em 180 graus.image.ROTATE_270: Rotaciona em 270 graus.
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.pixformatcontrola o formato de pixel de saída. Deve serimage.GRAYSCALEouimage.RGB565.copy_to_fbse True grava o resultado no frame buffer em vez de alocá-lo no heap.timeoutse 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.