fir — driver pentru senzori termici (fir == far infrared)

Modulul fir controlează matrice de termopile cu infraroșu îndepărtat (FIR) conectate la o OpenMV Cam prin I2C – sunt acceptați senzorii 8x8, 16x4, 16x12 și 32x24 (vedeți constantele de la finalul acestei pagini). Fiecare cadru returnează o temperatură per pixel în grade Celsius, care poate fi redată ca imagine termică de sine stătătoare cu snapshot() sau compusă peste un cadru în lumină vizibilă de la senzorul CSI cu draw_ir(), de obicei printr-o paletă de culori precum image.PALETTE_RAINBOW sau image.PALETTE_IRONBOW.

Exemplu de utilizare:

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)

Funcții

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

Inițializează un senzor termic atașat.

type indică tipul senzorului termic:

În mod implicit type este -1, ceea ce face ca fir.init() să scaneze și să inițializeze automat un senzor termic atașat în funcție de adresa sa I2C. Rețineți că fir.FIR_MLX90640 și fir.FIR_MLX90641 partajează aceeași adresă I2C, așa că trebuie să transmiteți fir.FIR_MLX90641 în type pentru a-l inițializa în mod specific.

refresh este rata de reîmprospătare a senzorului termic în Hz:

O rată de reîmprospătare mai mare reduce acuratețea și invers.

resolution este rezoluția de măsurare a senzorului termic în biți:

O rezoluție mai mare reduce intervalul maxim de temperatură și invers.

fir.deinit() None

Dezinițializează senzorul termic și eliberează resursele.

fir.width() int

Returnează rezoluția orizontală (în pixeli) a senzorului termic utilizat.

fir.height() int

Returnează rezoluția verticală (în pixeli) a senzorului termic utilizat.

fir.type() int

Returnează tipul senzorului termic utilizat. Una dintre valorile fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 sau fir.FIR_AMG8833.

fir.refresh() int

Returnează rata de reîmprospătare curentă (Hz) setată în timpul apelului fir.init().

fir.resolution() int

Returnează rezoluția curentă (biți) setată în timpul apelului fir.init().

fir.read_ta() float

Returnează temperatura ambiantă (adică temperatura senzorului) în Celsius, ca valoare float.

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

Returnează un tuplu cu 4 elemente (ta, ir, to_min, to_max) care conține temperatura ambiantă, o listă plată width * height de temperaturi float, temperatura minimă observată și temperatura maximă observată. Toate valorile sunt în Celsius.

hmirror dacă este True, oglindește orizontal tabloul ir.

vflip dacă este True, răstoarnă vertical tabloul ir.

transpose dacă este True, transpune tabloul ir (schimbă lățimea cu înălțimea).

timeout dacă nu este -1, numărul de milisecunde de așteptare pentru un cadru nou.

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

Desenează tabloul ir peste image, cu colțul din stânga-sus la (x, y).

ir este lista plată width * height de temperaturi returnată de fir.read_ir().

x_scale controlează cât de mult este scalată imaginea redată pe direcția x. O valoare negativă o răstoarnă orizontal. Dacă nu este specificată, se potrivește cu y_scale pentru a menține raportul de aspect.

y_scale controlează cât de mult este scalată imaginea redată pe direcția y. O valoare negativă o răstoarnă vertical. Dacă nu este specificată, se potrivește cu x_scale pentru a menține raportul de aspect.

roi este dreptunghiul regiunii de interes (x, y, w, h) din datele IR sursă care urmează să fie desenat.

rgb_channel este canalul RGB (0=R, 1=G, 2=B) care va fi redat pe imaginea de destinație atunci când destinația este RGB565. -1 (implicit) redă toate canalele.

alpha controlează cât de mult din imaginea sursă este îmbinat în destinație (0-255). 255 este complet opac; 0 nu produce nicio modificare.

color_palette este o enumerare de paletă de culori (de exemplu image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) sau o imagine RGB565 de 256 de pixeli folosită ca tabel de căutare pe valoarea sursă în tonuri de gri.

alpha_palette este o imagine GRAYSCALE de 256 de pixeli folosită ca tabel de căutare alfa care modulează alpha per valoare a pixelului sursă.

hint este un SAU logic între:

scale este un tuplu cu 2 elemente (min, max) care controlează temperatura minimă/maximă (în Celsius) folosită pentru a scala tabloul ir. Implicit folosește valorile min și max reale ale 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

Capturează un cadru de la senzorul termic și îl returnează ca image.Image. Funcționează similar cu sensor.snapshot(). Dacă copy_to_fb este False, noua imagine este alocată pe heap-ul MicroPython (care este limitat); setați copy_to_fb la True pentru a scrie rezultatul în tamponul de cadre (frame buffer) în schimb.

hmirror dacă este True, oglindește orizontal noua imagine.

vflip dacă este True, răstoarnă vertical noua imagine.

transpose dacă este True, transpune noua imagine.

x_scale controlează cât de mult este scalată noua imagine pe direcția x. O valoare negativă o răstoarnă orizontal. Dacă nu este specificată, se potrivește cu y_scale pentru a menține raportul de aspect.

y_scale controlează cât de mult este scalată noua imagine pe direcția y. O valoare negativă o răstoarnă vertical. Dacă nu este specificată, se potrivește cu x_scale pentru a menține raportul de aspect.

roi este dreptunghiul regiunii de interes (x, y, w, h) din datele IR sursă care urmează să fie desenat.

rgb_channel este canalul RGB (0=R, 1=G, 2=B) care va fi redat. -1 (implicit) redă toate canalele.

alpha controlează cât de mult din imaginea sursă este îmbinat (0-255). 255 este complet opac.

color_palette este o enumerare de paletă de culori sau o imagine RGB565 de 256 de pixeli folosită ca tabel de căutare pe valoarea sursă în tonuri de gri.

alpha_palette este o imagine GRAYSCALE de 256 de pixeli folosită ca tabel de căutare alfa.

hint este un SAU logic între:

scale este un tuplu cu 2 elemente (min, max) care controlează temperatura minimă/maximă (în Celsius) folosită pentru a scala tabloul IR. Implicit folosește valorile min și max reale ale datelor IR.

pixformat controlează formatul de pixel al ieșirii. Trebuie să fie image.GRAYSCALE sau image.RGB565.

copy_to_fb dacă este True, scrie rezultatul în tamponul de cadre (frame buffer) în loc să-l aloce pe heap.

timeout dacă nu este -1, numărul de milisecunde de așteptare pentru un cadru nou.

Constante

fir.FIR_SHIELD: int

OpenMV Cam Thermopile Shield (MLX90621). Alias pentru fir.FIR_MLX90621.

fir.FIR_MLX90621: int

Senzor termic MLX90621 (16x4).

fir.FIR_MLX90640: int

Senzor termic MLX90640 (32x24).

fir.FIR_MLX90641: int

Senzor termic MLX90641 (16x12).

fir.FIR_AMG8833: int

Senzor termic AMG8833 (8x8).