fir — pilote de capteur thermique (fir == infrarouge lointain)

Le module fir pilote les matrices de thermopiles infrarouge lointain (FIR) connectées à une OpenMV Cam via I2C – les capteurs 8x8, 16x4, 16x12 et 32x24 sont pris en charge (voir les constantes au bas de cette page). Chaque trame renvoie une température par pixel en degrés Celsius, qui peut être rendue sous forme d’image thermique autonome avec snapshot() ou composée sur une trame en lumière visible du capteur CSI avec draw_ir(), normalement au travers d’une palette de couleurs telle que image.PALETTE_RAINBOW ou image.PALETTE_IRONBOW.

Exemple d’utilisation

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)

Fonctions

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

Initialise un capteur thermique connecté.

type indique le type de capteur thermique :

Par défaut, type vaut -1, ce qui amène fir.init() à scanner et initialiser automatiquement un capteur thermique connecté en fonction de son adresse I2C. Notez que fir.FIR_MLX90640 et fir.FIR_MLX90641 partagent la même adresse I2C, vous devez donc passer fir.FIR_MLX90641 à type pour l’initialiser spécifiquement.

refresh est la fréquence de rafraîchissement du capteur thermique en Hz :

Une fréquence de rafraîchissement plus élevée réduit la précision et inversement.

resolution est la résolution de mesure du capteur thermique en bits :

Une résolution plus élevée réduit la plage de température maximale et inversement.

fir.deinit() None

Désinitialise le capteur thermique et libère les ressources.

fir.width() int

Renvoie la résolution horizontale (en pixels) du capteur thermique utilisé.

fir.height() int

Renvoie la résolution verticale (en pixels) du capteur thermique utilisé.

fir.type() int

Renvoie le type du capteur thermique utilisé. L’une des valeurs fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 ou fir.FIR_AMG8833.

fir.refresh() int

Renvoie la fréquence de rafraîchissement actuelle (Hz) définie lors de l’appel à fir.init().

fir.resolution() int

Renvoie la résolution actuelle (bits) définie lors de l’appel à fir.init().

fir.read_ta() float

Renvoie la température ambiante (c.-à-d. la température du capteur) en Celsius sous forme de float.

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

Renvoie un quadruplet (ta, ir, to_min, to_max) contenant la température ambiante, une liste plate de width * height températures en float, la température minimale observée et la température maximale observée. Toutes les valeurs sont en Celsius.

hmirror si True, applique un effet miroir horizontal au tableau ir.

vflip si True, retourne verticalement le tableau ir.

transpose si True, transpose le tableau ir (échange largeur et hauteur).

timeout si différent de -1, le nombre de millisecondes à attendre pour une nouvelle trame.

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

Dessine le tableau ir sur image avec son coin supérieur gauche en (x, y).

ir est la liste plate de températures de width * height renvoyée par fir.read_ir().

x_scale contrôle l’ampleur de la mise à l’échelle de l’image rendue dans la direction x. Une valeur négative effectue un retournement horizontal. Si non spécifié, correspond à y_scale pour conserver le rapport d’aspect.

y_scale contrôle l’ampleur de la mise à l’échelle de l’image rendue dans la direction y. Une valeur négative effectue un retournement vertical. Si non spécifié, correspond à x_scale pour conserver le rapport d’aspect.

roi est le rectangle de région d’intérêt (x, y, w, h) des données IR source à dessiner.

rgb_channel est le canal RGB (0=R, 1=G, 2=B) à rendre sur l’image de destination lorsque celle-ci est en RGB565. -1 (par défaut) rend tous les canaux.

alpha contrôle la proportion de l’image source à fusionner dans la destination (0-255). 255 est totalement opaque ; 0 n’entraîne aucune modification.

color_palette est une énumération de palette de couleurs (p. ex. image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) ou une image RGB565 de 256 pixels utilisée comme table de correspondance sur la valeur source en niveaux de gris.

alpha_palette est une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha qui module alpha selon la valeur de chaque pixel source.

hint est un OU logique de :

scale est un couple (min, max) contrôlant la température minimale/maximale (en Celsius) utilisée pour mettre à l’échelle le tableau ir. Vaut par défaut les valeurs min et max réelles 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

Capture une trame depuis le capteur thermique et la renvoie sous forme d”image.Image. Fonctionne de manière similaire à sensor.snapshot(). Si copy_to_fb est False, la nouvelle image est allouée sur le tas MicroPython (qui est limité) ; mettez copy_to_fb à True pour écrire le résultat dans le tampon d’image à la place.

hmirror si True, applique un effet miroir horizontal à la nouvelle image.

vflip si True, retourne verticalement la nouvelle image.

transpose si True, transpose la nouvelle image.

x_scale contrôle l’ampleur de la mise à l’échelle de la nouvelle image dans la direction x. Une valeur négative effectue un retournement horizontal. Si non spécifié, correspond à y_scale pour conserver le rapport d’aspect.

y_scale contrôle l’ampleur de la mise à l’échelle de la nouvelle image dans la direction y. Une valeur négative effectue un retournement vertical. Si non spécifié, correspond à x_scale pour conserver le rapport d’aspect.

roi est le rectangle de région d’intérêt (x, y, w, h) des données IR source à dessiner.

rgb_channel est le canal RGB (0=R, 1=G, 2=B) à rendre. -1 (par défaut) rend tous les canaux.

alpha contrôle la proportion de l’image source qui est fusionnée (0-255). 255 est totalement opaque.

color_palette est une énumération de palette de couleurs ou une image RGB565 de 256 pixels utilisée comme table de correspondance sur la valeur source en niveaux de gris.

alpha_palette est une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha.

hint est un OU logique de :

scale est un couple (min, max) contrôlant la température minimale/maximale (en Celsius) utilisée pour mettre à l’échelle le tableau IR. Vaut par défaut les valeurs min et max réelles de l’IR.

pixformat contrôle le format de pixel de sortie. Doit être image.GRAYSCALE ou image.RGB565.

copy_to_fb si True, écrit le résultat dans le tampon d’image au lieu de l’allouer sur le tas.

timeout si différent de -1, le nombre de millisecondes à attendre pour une nouvelle trame.

Constantes

fir.FIR_SHIELD: int

Le shield thermopile OpenMV Cam (MLX90621). Alias de fir.FIR_MLX90621.

fir.FIR_MLX90621: int

Capteur thermique MLX90621 (16x4).

fir.FIR_MLX90640: int

Capteur thermique MLX90640 (32x24).

fir.FIR_MLX90641: int

Capteur thermique MLX90641 (16x12).

fir.FIR_AMG8833: int

Capteur thermique AMG8833 (8x8).