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.
typeindică tipul senzorului termic:fir.FIR_SHIELD: 16x4 pixeli (MLX90621).fir.FIR_MLX90621: 16x4 pixeli.fir.FIR_MLX90640: 32x24 pixeli.fir.FIR_MLX90641: 16x12 pixeli.fir.FIR_AMG8833: 8x8 pixeli.
În mod implicit
typeeste-1, ceea ce face cafir.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șifir.FIR_MLX90641partajează aceeași adresă I2C, așa că trebuie să transmitețifir.FIR_MLX90641întypepentru a-l inițializa în mod specific.refresheste rata de reîmprospătare a senzorului termic în Hz:fir.FIR_MLX90621: Implicit 64 Hz. Poate fi 1, 2, 4, 8, 16, 32, 64, 128, 256 sau 512 Hz.fir.FIR_MLX90640: Implicit 32 Hz. Poate fi 1, 2, 4, 8, 16, 32 sau 64 Hz.fir.FIR_MLX90641: Implicit 32 Hz. Poate fi 1, 2, 4, 8, 16, 32 sau 64 Hz.fir.FIR_AMG8833: Fix la 10 Hz.
O rată de reîmprospătare mai mare reduce acuratețea și invers.
resolutioneste rezoluția de măsurare a senzorului termic în biți:fir.FIR_MLX90621: Implicit 18. Poate fi 15, 16, 17 sau 18.fir.FIR_MLX90640: Implicit 19. Poate fi 16, 17, 18 sau 19.fir.FIR_MLX90641: Implicit 19. Poate fi 16, 17, 18 sau 19.fir.FIR_AMG8833: Fix la 12.
O rezoluție mai mare reduce intervalul maxim de temperatură și invers.
- fir.type() int¶
Returnează tipul senzorului termic utilizat. Una dintre valorile
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641saufir.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 * heightde temperaturi float, temperatura minimă observată și temperatura maximă observată. Toate valorile sunt în Celsius.hmirrordacă este True, oglindește orizontal tabloulir.vflipdacă este True, răstoarnă vertical tabloulir.transposedacă este True, transpune tabloulir(schimbă lățimea cu înălțimea).timeoutdacă 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
irpesteimage, cu colțul din stânga-sus la(x, y).ireste lista platăwidth * heightde temperaturi returnată defir.read_ir().x_scalecontrolează 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 cuy_scalepentru a menține raportul de aspect.y_scalecontrolează 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 cux_scalepentru a menține raportul de aspect.roieste dreptunghiul regiunii de interes(x, y, w, h)din datele IR sursă care urmează să fie desenat.rgb_channeleste 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.alphacontrolează cât de mult din imaginea sursă este îmbinat în destinație (0-255). 255 este complet opac; 0 nu produce nicio modificare.color_paletteeste o enumerare de paletă de culori (de exempluimage.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_paletteeste o imagine GRAYSCALE de 256 de pixeli folosită ca tabel de căutare alfa care moduleazăalphaper valoare a pixelului sursă.hinteste un SAU logic între:image.AREA: Folosește scalarea pe arie la reducerea dimensiunii.image.BILINEAR: Folosește scalarea biliniară.image.BICUBIC: Folosește scalarea bicubică.image.CENTER: Centrează imaginea pe destinație.image.HMIRROR: Oglindește orizontal.image.VFLIP: Răstoarnă vertical.image.TRANSPOSE: Transpune (schimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplică extragerea rgb_channel înainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplică paleta de culori înainte de scalare.image.SCALE_ASPECT_KEEP: Încadrează în interiorul destinației păstrând raportul de aspect.image.SCALE_ASPECT_EXPAND: Umple destinația păstrând raportul de aspect (decupează).image.SCALE_ASPECT_IGNORE: Umple destinația ignorând raportul de aspect (întinde).image.ROTATE_90: Rotește cu 90 de grade.image.ROTATE_180: Rotește cu 180 de grade.image.ROTATE_270: Rotește cu 270 de grade.
scaleeste un tuplu cu 2 elemente(min, max)care controlează temperatura minimă/maximă (în Celsius) folosită pentru a scala tabloulir. Implicit folosește valorile min și max reale aleir.
- 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 cusensor.snapshot(). Dacăcopy_to_fbeste False, noua imagine este alocată pe heap-ul MicroPython (care este limitat); setațicopy_to_fbla True pentru a scrie rezultatul în tamponul de cadre (frame buffer) în schimb.hmirrordacă este True, oglindește orizontal noua imagine.vflipdacă este True, răstoarnă vertical noua imagine.transposedacă este True, transpune noua imagine.x_scalecontrolează 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 cuy_scalepentru a menține raportul de aspect.y_scalecontrolează 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 cux_scalepentru a menține raportul de aspect.roieste dreptunghiul regiunii de interes(x, y, w, h)din datele IR sursă care urmează să fie desenat.rgb_channeleste canalul RGB (0=R, 1=G, 2=B) care va fi redat.-1(implicit) redă toate canalele.alphacontrolează cât de mult din imaginea sursă este îmbinat (0-255). 255 este complet opac.color_paletteeste 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_paletteeste o imagine GRAYSCALE de 256 de pixeli folosită ca tabel de căutare alfa.hinteste un SAU logic între:image.AREA: Folosește scalarea pe arie la reducerea dimensiunii.image.BILINEAR: Folosește scalarea biliniară.image.BICUBIC: Folosește scalarea bicubică.image.CENTER: Centrează imaginea pe destinație.image.HMIRROR: Oglindește orizontal.image.VFLIP: Răstoarnă vertical.image.TRANSPOSE: Transpune (schimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplică extragerea rgb_channel înainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplică paleta de culori înainte de scalare.image.SCALE_ASPECT_KEEP: Încadrează în interiorul destinației păstrând raportul de aspect.image.SCALE_ASPECT_EXPAND: Umple destinația păstrând raportul de aspect (decupează).image.SCALE_ASPECT_IGNORE: Umple destinația ignorând raportul de aspect (întinde).image.ROTATE_90: Rotește cu 90 de grade.image.ROTATE_180: Rotește cu 180 de grade.image.ROTATE_270: Rotește cu 270 de grade.
scaleeste 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.pixformatcontrolează formatul de pixel al ieșirii. Trebuie să fieimage.GRAYSCALEsauimage.RGB565.copy_to_fbdacă este True, scrie rezultatul în tamponul de cadre (frame buffer) în loc să-l aloce pe heap.timeoutdacă 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.