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é.
typeindique le type de capteur thermique :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.
Par défaut,
typevaut-1, ce qui amènefir.init()à scanner et initialiser automatiquement un capteur thermique connecté en fonction de son adresse I2C. Notez quefir.FIR_MLX90640etfir.FIR_MLX90641partagent la même adresse I2C, vous devez donc passerfir.FIR_MLX90641àtypepour l’initialiser spécifiquement.refreshest la fréquence de rafraîchissement du capteur thermique en Hz :fir.FIR_MLX90621: 64 Hz par défaut. Peut valoir 1, 2, 4, 8, 16, 32, 64, 128, 256 ou 512 Hz.fir.FIR_MLX90640: 32 Hz par défaut. Peut valoir 1, 2, 4, 8, 16, 32 ou 64 Hz.fir.FIR_MLX90641: 32 Hz par défaut. Peut valoir 1, 2, 4, 8, 16, 32 ou 64 Hz.fir.FIR_AMG8833: fixé à 10 Hz.
Une fréquence de rafraîchissement plus élevée réduit la précision et inversement.
resolutionest la résolution de mesure du capteur thermique en bits :fir.FIR_MLX90621: 18 par défaut. Peut valoir 15, 16, 17 ou 18.fir.FIR_MLX90640: 19 par défaut. Peut valoir 16, 17, 18 ou 19.fir.FIR_MLX90641: 19 par défaut. Peut valoir 16, 17, 18 ou 19.fir.FIR_AMG8833: fixé à 12.
Une résolution plus élevée réduit la plage de température maximale et inversement.
- fir.type() int¶
Renvoie le type du capteur thermique utilisé. L’une des valeurs
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641oufir.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 dewidth * heighttempératures en float, la température minimale observée et la température maximale observée. Toutes les valeurs sont en Celsius.hmirrorsi True, applique un effet miroir horizontal au tableauir.vflipsi True, retourne verticalement le tableauir.transposesi True, transpose le tableauir(échange largeur et hauteur).timeoutsi 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
irsurimageavec son coin supérieur gauche en(x, y).irest la liste plate de températures dewidth * heightrenvoyée parfir.read_ir().x_scalecontrô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_scalepour conserver le rapport d’aspect.y_scalecontrô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_scalepour conserver le rapport d’aspect.roiest le rectangle de région d’intérêt(x, y, w, h)des données IR source à dessiner.rgb_channelest 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.alphacontrôle la proportion de l’image source à fusionner dans la destination (0-255). 255 est totalement opaque ; 0 n’entraîne aucune modification.color_paletteest 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_paletteest une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha qui modulealphaselon la valeur de chaque pixel source.hintest un OU logique de :image.AREA: utilise la mise à l’échelle par aire lors d’une réduction.image.BILINEAR: utilise la mise à l’échelle bilinéaire.image.BICUBIC: utilise la mise à l’échelle bicubique.image.CENTER: centre l’image sur la destination.image.HMIRROR: applique un miroir horizontal.image.VFLIP: retourne verticalement.image.TRANSPOSE: transpose (échange x/y).image.EXTRACT_RGB_CHANNEL_FIRST: applique l’extraction de rgb_channel avant la mise à l’échelle.image.APPLY_COLOR_PALETTE_FIRST: applique la palette de couleurs avant la mise à l’échelle.image.SCALE_ASPECT_KEEP: ajuste à l’intérieur de la destination en conservant le rapport d’aspect.image.SCALE_ASPECT_EXPAND: remplit la destination en conservant le rapport d’aspect (rogne).image.SCALE_ASPECT_IGNORE: remplit la destination en ignorant le rapport d’aspect (étire).image.ROTATE_90: pivote de 90 degrés.image.ROTATE_180: pivote de 180 degrés.image.ROTATE_270: pivote de 270 degrés.
scaleest un couple(min, max)contrôlant la température minimale/maximale (en Celsius) utilisée pour mettre à l’échelle le tableauir. Vaut par défaut les valeurs min et max réelles 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¶
Capture une trame depuis le capteur thermique et la renvoie sous forme d”
image.Image. Fonctionne de manière similaire àsensor.snapshot(). Sicopy_to_fbest False, la nouvelle image est allouée sur le tas MicroPython (qui est limité) ; mettezcopy_to_fbà True pour écrire le résultat dans le tampon d’image à la place.hmirrorsi True, applique un effet miroir horizontal à la nouvelle image.vflipsi True, retourne verticalement la nouvelle image.transposesi True, transpose la nouvelle image.x_scalecontrô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_scalepour conserver le rapport d’aspect.y_scalecontrô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_scalepour conserver le rapport d’aspect.roiest le rectangle de région d’intérêt(x, y, w, h)des données IR source à dessiner.rgb_channelest le canal RGB (0=R, 1=G, 2=B) à rendre.-1(par défaut) rend tous les canaux.alphacontrôle la proportion de l’image source qui est fusionnée (0-255). 255 est totalement opaque.color_paletteest 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_paletteest une image GRAYSCALE de 256 pixels utilisée comme table de correspondance alpha.hintest un OU logique de :image.AREA: utilise la mise à l’échelle par aire lors d’une réduction.image.BILINEAR: utilise la mise à l’échelle bilinéaire.image.BICUBIC: utilise la mise à l’échelle bicubique.image.CENTER: centre l’image sur la destination.image.HMIRROR: applique un miroir horizontal.image.VFLIP: retourne verticalement.image.TRANSPOSE: transpose (échange x/y).image.EXTRACT_RGB_CHANNEL_FIRST: applique l’extraction de rgb_channel avant la mise à l’échelle.image.APPLY_COLOR_PALETTE_FIRST: applique la palette de couleurs avant la mise à l’échelle.image.SCALE_ASPECT_KEEP: ajuste à l’intérieur de la destination en conservant le rapport d’aspect.image.SCALE_ASPECT_EXPAND: remplit la destination en conservant le rapport d’aspect (rogne).image.SCALE_ASPECT_IGNORE: remplit la destination en ignorant le rapport d’aspect (étire).image.ROTATE_90: pivote de 90 degrés.image.ROTATE_180: pivote de 180 degrés.image.ROTATE_270: pivote de 270 degrés.
scaleest 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.pixformatcontrôle le format de pixel de sortie. Doit êtreimage.GRAYSCALEouimage.RGB565.copy_to_fbsi True, écrit le résultat dans le tampon d’image au lieu de l’allouer sur le tas.timeoutsi 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.