fir — מנהל התקן לחיישן תרמי (fir == far infrared)¶
המודול fir מפעיל מערכים תרמופיליים של אינפרא-אדום רחוק (FIR) המחוברים ל-OpenMV Cam דרך I2C – חיישנים בגדלים 8x8, 16x4, 16x12 ו-32x24 נתמכים (ראו את הקבועים בתחתית עמוד זה). כל פריים מחזיר טמפרטורה לכל פיקסל במעלות צלזיוס, אותה ניתן להציג כתמונה תרמית עצמאית באמצעות snapshot(), או למזג אותה על גבי פריים באור נראה מחיישן ה-CSI באמצעות draw_ir(), בדרך כלל דרך פלטת צבעים כגון image.PALETTE_RAINBOW או image.PALETTE_IRONBOW.
דוגמת שימוש:
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)
פונקציות¶
- fir.init(type: int = -1, refresh: int | None = None, resolution: int | None = None) None¶
מאתחל חיישן תרמי מחובר.
typeמציין את סוג החיישן התרמי:fir.FIR_SHIELD: 16x4 פיקסלים (MLX90621).fir.FIR_MLX90621: 16x4 פיקסלים.fir.FIR_MLX90640: 32x24 פיקסלים.fir.FIR_MLX90641: 16x12 פיקסלים.fir.FIR_AMG8833: 8x8 פיקסלים.
כברירת מחדל
typeהוא-1, מה שגורם ל-fir.init()לסרוק ולאתחל אוטומטית חיישן תרמי מחובר על פי כתובת ה-I2C שלו. שימו לב ש-fir.FIR_MLX90640ו-fir.FIR_MLX90641חולקים את אותה כתובת I2C, ולכן עליכם להעביר אתfir.FIR_MLX90641ל-typeכדי לאתחל אותו באופן ספציפי.refreshהוא קצב הרענון של החיישן התרמי ב-Hz:fir.FIR_MLX90621: ברירת המחדל היא 64 Hz. יכול להיות 1, 2, 4, 8, 16, 32, 64, 128, 256 או 512 Hz.fir.FIR_MLX90640: ברירת המחדל היא 32 Hz. יכול להיות 1, 2, 4, 8, 16, 32 או 64 Hz.fir.FIR_MLX90641: ברירת המחדל היא 32 Hz. יכול להיות 1, 2, 4, 8, 16, 32 או 64 Hz.fir.FIR_AMG8833: קבוע על 10 Hz.
קצב רענון גבוה יותר מוריד את הדיוק ולהפך.
resolutionהיא רזולוציית המדידה של החיישן התרמי בביטים:fir.FIR_MLX90621: ברירת המחדל היא 18. יכול להיות 15, 16, 17 או 18.fir.FIR_MLX90640: ברירת המחדל היא 19. יכול להיות 16, 17, 18 או 19.fir.FIR_MLX90641: ברירת המחדל היא 19. יכול להיות 16, 17, 18 או 19.fir.FIR_AMG8833: קבוע על 12.
רזולוציה גבוהה יותר מורידה את טווח הטמפרטורה המרבי ולהפך.
- fir.type() int¶
מחזיר את סוג החיישן התרמי שבשימוש. אחד מבין
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641אוfir.FIR_AMG8833.
- fir.refresh() int¶
מחזיר את קצב הרענון הנוכחי (Hz) שנקבע במהלך קריאת
fir.init().
- fir.resolution() int¶
מחזיר את הרזולוציה הנוכחית (ביטים) שנקבעה במהלך קריאת
fir.init().
- fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]¶
מחזיר רביעייה
(ta, ir, to_min, to_max)המכילה את הטמפרטורה הסביבתית, רשימה שטוחה בגודלwidth * heightשל טמפרטורות float, הטמפרטורה המינימלית שנצפתה והטמפרטורה המרבית שנצפתה. כל הערכים בצלזיוס.hmirrorאם True משקף אופקית את המערךir.vflipאם True הופך אנכית את המערךir.transposeאם True משחלף את המערךir(מחליף רוחב וגובה).timeoutאם אינו -1, מספר המילישניות להמתנה לפריים חדש.
- 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¶
מצייר את המערך
irעל גביimageכשפינתו השמאלית-עליונה ב-(x, y).irהיא רשימת הטמפרטורות השטוחה בגודלwidth * heightהמוחזרת על ידיfir.read_ir().x_scaleשולט בכמה התמונה המעובדת מותאמת בכיוון ה-x. ערך שלילי הופך אופקית. אם לא צוין, מתאים את עצמו ל-y_scaleכדי לשמור על יחס הממדים.y_scaleשולט בכמה התמונה המעובדת מותאמת בכיוון ה-y. ערך שלילי הופך אנכית. אם לא צוין, מתאים את עצמו ל-x_scaleכדי לשמור על יחס הממדים.roiהוא מלבן אזור העניין(x, y, w, h)של נתוני ה-IR המקוריים לציור.rgb_channelהוא ערוץ ה-RGB (0=R, 1=G, 2=B) שיעובד אל תמונת היעד כאשר היעד הוא RGB565.-1(ברירת המחדל) מעבד את כל הערוצים.alphaשולט בכמה מתמונת המקור תמוזג אל היעד (0-255). 255 הוא אטום לחלוטין; 0 גורם לכך שלא יתבצע שינוי.color_paletteהוא enum של פלטת צבעים (למשלimage.PALETTE_RAINBOW,image.PALETTE_IRONBOW) או תמונת RGB565 בגודל 256 פיקסלים המשמשת כטבלת חיפוש על ערך המקור בגווני אפור.alpha_paletteהיא תמונת GRAYSCALE בגודל 256 פיקסלים המשמשת כטבלת חיפוש לאלפא אשר מווסתת אתalphaלכל ערך פיקסל מקור.hintהוא OR לוגי של:image.AREA: שימוש בקנה מידה לפי שטח בעת הקטנה.image.BILINEAR: שימוש בקנה מידה בילינארי.image.BICUBIC: שימוש בקנה מידה ביקובי.image.CENTER: מרכוז התמונה על היעד.image.HMIRROR: שיקוף אופקי.image.VFLIP: היפוך אנכי.image.TRANSPOSE: שחלוף (החלפת x/y).image.EXTRACT_RGB_CHANNEL_FIRST: החלת חילוץ rgb_channel לפני קנה המידה.image.APPLY_COLOR_PALETTE_FIRST: החלת פלטת הצבעים לפני קנה המידה.image.SCALE_ASPECT_KEEP: התאמה בתוך היעד תוך שמירה על יחס הממדים.image.SCALE_ASPECT_EXPAND: מילוי היעד תוך שמירה על יחס הממדים (חיתוך).image.SCALE_ASPECT_IGNORE: מילוי היעד תוך התעלמות מיחס הממדים (מתיחה).image.ROTATE_90: סיבוב ב-90 מעלות.image.ROTATE_180: סיבוב ב-180 מעלות.image.ROTATE_270: סיבוב ב-270 מעלות.
scaleהוא זוג(min, max)השולט בטמפרטורה המינימלית/מרבית (בצלזיוס) המשמשת לקנה המידה של המערךir. ברירת המחדל היא ערכי המינימום והמקסימום הממשיים של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¶
לוכד פריים מהחיישן התרמי ומחזיר אותו כ-
image.Image. עובד באופן דומה ל-sensor.snapshot(). אםcopy_to_fbהוא False, התמונה החדשה מוקצית על ה-heap של MicroPython (שהוא מוגבל); קבעו אתcopy_to_fbל-True כדי לכתוב את התוצאה לתוך חוצץ הפריימים (frame buffer) במקום זאת.hmirrorאם True משקף אופקית את התמונה החדשה.vflipאם True הופך אנכית את התמונה החדשה.transposeאם True משחלף את התמונה החדשה.x_scaleשולט בכמה התמונה החדשה מותאמת בכיוון ה-x. ערך שלילי הופך אופקית. אם לא צוין, מתאים את עצמו ל-y_scaleכדי לשמור על יחס הממדים.y_scaleשולט בכמה התמונה החדשה מותאמת בכיוון ה-y. ערך שלילי הופך אנכית. אם לא צוין, מתאים את עצמו ל-x_scaleכדי לשמור על יחס הממדים.roiהוא מלבן אזור העניין(x, y, w, h)של נתוני ה-IR המקוריים לציור.rgb_channelהוא ערוץ ה-RGB (0=R, 1=G, 2=B) לעיבוד.-1(ברירת המחדל) מעבד את כל הערוצים.alphaשולט בכמה מתמונת המקור תמוזג (0-255). 255 הוא אטום לחלוטין.color_paletteהוא enum של פלטת צבעים או תמונת RGB565 בגודל 256 פיקסלים המשמשת כטבלת חיפוש על ערך המקור בגווני אפור.alpha_paletteהיא תמונת GRAYSCALE בגודל 256 פיקסלים המשמשת כטבלת חיפוש לאלפא.hintהוא OR לוגי של:image.AREA: שימוש בקנה מידה לפי שטח בעת הקטנה.image.BILINEAR: שימוש בקנה מידה בילינארי.image.BICUBIC: שימוש בקנה מידה ביקובי.image.CENTER: מרכוז התמונה על היעד.image.HMIRROR: שיקוף אופקי.image.VFLIP: היפוך אנכי.image.TRANSPOSE: שחלוף (החלפת x/y).image.EXTRACT_RGB_CHANNEL_FIRST: החלת חילוץ rgb_channel לפני קנה המידה.image.APPLY_COLOR_PALETTE_FIRST: החלת פלטת הצבעים לפני קנה המידה.image.SCALE_ASPECT_KEEP: התאמה בתוך היעד תוך שמירה על יחס הממדים.image.SCALE_ASPECT_EXPAND: מילוי היעד תוך שמירה על יחס הממדים (חיתוך).image.SCALE_ASPECT_IGNORE: מילוי היעד תוך התעלמות מיחס הממדים (מתיחה).image.ROTATE_90: סיבוב ב-90 מעלות.image.ROTATE_180: סיבוב ב-180 מעלות.image.ROTATE_270: סיבוב ב-270 מעלות.
scaleהוא זוג(min, max)השולט בטמפרטורה המינימלית/מרבית (בצלזיוס) המשמשת לקנה המידה של מערך ה-IR. ברירת המחדל היא ערכי המינימום והמקסימום הממשיים של ה-IR.pixformatשולט בפורמט הפיקסלים של הפלט. חייב להיותimage.GRAYSCALEאוimage.RGB565.copy_to_fbאם True כותב את התוצאה לתוך חוצץ הפריימים (frame buffer) במקום להקצות על ה-heap.timeoutאם אינו -1, מספר המילישניות להמתנה לפריים חדש.
קבועים¶
- fir.FIR_SHIELD: int¶
מגן התרמופיל של OpenMV Cam (MLX90621). כינוי ל-
fir.FIR_MLX90621.