fir --- ไดรเวอร์เซนเซอร์ความร้อน (fir == far infrared)¶
โมดูล fir ขับเคลื่อนอาร์เรย์ thermopile อินฟราเรดไกล (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 Hzfir.FIR_MLX90640: ค่าเริ่มต้น 32 Hz สามารถเป็น 1, 2, 4, 8, 16, 32 หรือ 64 Hzfir.FIR_MLX90641: ค่าเริ่มต้น 32 Hz สามารถเป็น 1, 2, 4, 8, 16, 32 หรือ 64 Hzfir.FIR_AMG8833: คงที่ที่ 10 Hz
อัตราการรีเฟรชที่สูงขึ้นจะลดความแม่นยำ และในทางกลับกัน
resolutionคือความละเอียดการวัดของเซนเซอร์ความร้อนเป็นบิต:fir.FIR_MLX90621: ค่าเริ่มต้น 18 สามารถเป็น 15, 16, 17 หรือ 18fir.FIR_MLX90640: ค่าเริ่มต้น 19 สามารถเป็น 16, 17, 18 หรือ 19fir.FIR_MLX90641: ค่าเริ่มต้น 19 สามารถเป็น 16, 17, 18 หรือ 19fir.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]¶
คืนค่า 4-tuple
(ta, ir, to_min, to_max)ที่มีอุณหภูมิแวดล้อม รายการ float ของอุณหภูมิแบบแบนwidth * heightอุณหภูมิต่ำสุดที่พบ และอุณหภูมิสูงสุดที่พบ ค่าทั้งหมดอยู่ในหน่วยเซลเซียสhmirrorถ้าเป็น True จะกระจกแนวนอนอาร์เรย์irvflipถ้าเป็น True จะพลิกแนวตั้งอาร์เรย์irtransposeถ้าเป็น 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คือสี่เหลี่ยมบริเวณที่สนใจ (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 ที่ปรับalphaต่อค่าพิกเซลต้นทางhintคือ OR เชิงตรรกะของ:image.AREA: ใช้การปรับขนาดแบบพื้นที่เมื่อลดขนาดimage.BILINEAR: ใช้การปรับขนาดแบบ bilinearimage.BICUBIC: ใช้การปรับขนาดแบบ bicubicimage.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คือ 2-tuple(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 ภาพใหม่จะถูกจัดสรรบน MicroPython heap (ซึ่งมีจำกัด) ตั้งค่าcopy_to_fbเป็น True เพื่อเขียนผลลัพธ์ลงในบัฟเฟอร์เฟรมแทนhmirrorถ้าเป็น True จะกระจกแนวนอนภาพใหม่vflipถ้าเป็น True จะพลิกแนวตั้งภาพใหม่transposeถ้าเป็น True จะสลับตำแหน่งภาพใหม่x_scaleควบคุมว่าภาพใหม่จะถูกปรับขนาดในทิศทาง x มากเพียงใด ค่าลบจะพลิกแนวนอน หากไม่ระบุ จะจับคู่กับy_scaleเพื่อรักษาอัตราส่วนy_scaleควบคุมว่าภาพใหม่จะถูกปรับขนาดในทิศทาง y มากเพียงใด ค่าลบจะพลิกแนวตั้ง หากไม่ระบุ จะจับคู่กับx_scaleเพื่อรักษาอัตราส่วนroiคือสี่เหลี่ยมบริเวณที่สนใจ (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 พิกเซลที่ใช้เป็นตารางค้นหา alphahintคือ OR เชิงตรรกะของ:image.AREA: ใช้การปรับขนาดแบบพื้นที่เมื่อลดขนาดimage.BILINEAR: ใช้การปรับขนาดแบบ bilinearimage.BICUBIC: ใช้การปรับขนาดแบบ bicubicimage.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คือ 2-tuple(min, max)ที่ควบคุมอุณหภูมิต่ำสุด/สูงสุด (เป็นเซลเซียส) ที่ใช้ในการปรับขนาดอาร์เรย์ IR ค่าเริ่มต้นเป็นค่าต่ำสุดและสูงสุดจริงของ IRpixformatควบคุมรูปแบบพิกเซลเอาต์พุต ต้องเป็นimage.GRAYSCALEหรือimage.RGB565copy_to_fbถ้าเป็น True จะเขียนผลลัพธ์ลงในบัฟเฟอร์เฟรมแทนการจัดสรรบน heaptimeoutถ้าไม่ใช่ -1 คือจำนวนมิลลิวินาทีที่รอเฟรมใหม่
ค่าคงที่¶
- fir.FIR_SHIELD: int¶
OpenMV Cam Thermopile Shield (MLX90621) นามแฝงสำหรับ
fir.FIR_MLX90621