fir --- trình điều khiển cảm biến nhiệt (fir == hồng ngoại xa)

Mô-đun fir điều khiển các mảng cảm biến nhiệt hồng ngoại xa (FIR) kết nối với OpenMV Cam qua I2C -- hỗ trợ cảm biến 8x8, 16x4, 16x12 và 32x24 (xem các hằng số ở cuối trang này). Mỗi khung hình trả về nhiệt độ theo từng điểm ảnh tính bằng độ Celsius, có thể hiển thị dưới dạng ảnh nhiệt độc lập bằng snapshot() hoặc ghép chồng lên khung hình ánh sáng thường từ cảm biến CSI bằng draw_ir(), thường thông qua bảng màu như image.PALETTE_RAINBOW hoặc image.PALETTE_IRONBOW.

Ví dụ sử dụng:

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)

Hàm

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

Khởi tạo cảm biến nhiệt đang kết nối.

type cho biết loại cảm biến nhiệt:

Mặc định type-1 khiến fir.init() tự động quét và khởi tạo cảm biến nhiệt đang kết nối dựa trên địa chỉ I2C của nó. Lưu ý rằng fir.FIR_MLX90640fir.FIR_MLX90641 dùng chung địa chỉ I2C, vì vậy bạn phải truyền fir.FIR_MLX90641 vào type để khởi tạo riêng loại đó.

refresh là tốc độ làm tươi của cảm biến nhiệt tính bằng Hz:

  • fir.FIR_MLX90621: Mặc định là 64 Hz. Có thể là 1, 2, 4, 8, 16, 32, 64, 128, 256 hoặc 512 Hz.

  • fir.FIR_MLX90640: Mặc định là 32 Hz. Có thể là 1, 2, 4, 8, 16, 32 hoặc 64 Hz.

  • fir.FIR_MLX90641: Mặc định là 32 Hz. Có thể là 1, 2, 4, 8, 16, 32 hoặc 64 Hz.

  • fir.FIR_AMG8833: Cố định ở 10 Hz.

Tốc độ làm tươi cao hơn sẽ giảm độ chính xác và ngược lại.

resolution là độ phân giải đo lường của cảm biến nhiệt tính bằng bit:

Độ phân giải cao hơn sẽ thu hẹp phạm vi nhiệt độ tối đa và ngược lại.

fir.deinit() None

Hủy khởi tạo cảm biến nhiệt và giải phóng tài nguyên.

fir.width() int

Trả về độ phân giải ngang (tính bằng điểm ảnh) của cảm biến nhiệt đang dùng.

fir.height() int

Trả về độ phân giải dọc (tính bằng điểm ảnh) của cảm biến nhiệt đang dùng.

fir.type() int

Trả về loại cảm biến nhiệt đang dùng. Một trong các giá trị fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 hoặc fir.FIR_AMG8833.

fir.refresh() int

Trả về tốc độ làm tươi hiện tại (Hz) đã đặt trong lần gọi fir.init().

fir.resolution() int

Trả về độ phân giải hiện tại (bit) đã đặt trong lần gọi fir.init().

fir.read_ta() float

Trả về nhiệt độ môi trường (tức là nhiệt độ cảm biến) tính bằng độ Celsius dưới dạng số thực.

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

Trả về một tuple 4 phần tử (ta, ir, to_min, to_max) chứa nhiệt độ môi trường, một danh sách phẳng width * height các nhiệt độ kiểu float, nhiệt độ nhỏ nhất quan sát được và nhiệt độ lớn nhất quan sát được. Tất cả giá trị đều tính bằng độ Celsius.

hmirror nếu là True thì lật ngang mảng ir.

vflip nếu là True thì lật dọc mảng ir.

transpose nếu là True thì chuyển vị mảng ir (hoán đổi chiều rộng và chiều cao).

timeout nếu không phải -1, là số mili giây chờ một khung hình mới.

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

Vẽ mảng ir lên image với góc trên bên trái tại tọa độ (x, y).

ir là danh sách nhiệt độ phẳng width * height được trả về bởi fir.read_ir().

x_scale điều khiển mức độ phóng to/thu nhỏ ảnh được kết xuất theo chiều x. Giá trị âm sẽ lật ngang. Nếu không được chỉ định, sẽ khớp với y_scale để duy trì tỷ lệ khung hình.

y_scale điều khiển mức độ phóng to/thu nhỏ ảnh được kết xuất theo chiều y. Giá trị âm sẽ lật dọc. Nếu không được chỉ định, sẽ khớp với x_scale để duy trì tỷ lệ khung hình.

roi là hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của dữ liệu IR nguồn để vẽ.

rgb_channel là kênh RGB (0=R, 1=G, 2=B) để kết xuất lên ảnh đích khi đích là RGB565. -1 (mặc định) kết xuất tất cả các kênh.

alpha điều khiển mức độ pha trộn ảnh nguồn vào ảnh đích (0-255). 255 là hoàn toàn không trong suốt; 0 không tạo ra thay đổi nào.

color_palette là một enum bảng màu (ví dụ: image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) hoặc một ảnh RGB565 256 điểm ảnh được dùng làm bảng tra cứu cho giá trị nguồn thang xám.

alpha_palette là một ảnh GRAYSCALE 256 điểm ảnh được dùng làm bảng tra cứu alpha để điều chỉnh alpha theo từng giá trị điểm ảnh nguồn.

hint là phép OR logic của:

scale là một tuple 2 phần tử (min, max) kiểm soát nhiệt độ tối thiểu/tối đa (tính bằng độ Celsius) dùng để thay đổi tỷ lệ mảng ir. Mặc định là giá trị ir thực tế nhỏ nhất và lớn nhất.

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

Chụp một khung hình từ cảm biến nhiệt và trả về dưới dạng image.Image. Hoạt động tương tự sensor.snapshot(). Nếu copy_to_fb là False, ảnh mới được cấp phát trên heap MicroPython (bị giới hạn); đặt copy_to_fb thành True để ghi kết quả vào bộ đệm khung hình thay thế.

hmirror nếu là True thì lật ngang ảnh mới.

vflip nếu là True thì lật dọc ảnh mới.

transpose nếu là True thì chuyển vị ảnh mới.

x_scale điều khiển mức độ phóng to/thu nhỏ ảnh mới theo chiều x. Giá trị âm sẽ lật ngang. Nếu không được chỉ định, sẽ khớp với y_scale để duy trì tỷ lệ khung hình.

y_scale điều khiển mức độ phóng to/thu nhỏ ảnh mới theo chiều y. Giá trị âm sẽ lật dọc. Nếu không được chỉ định, sẽ khớp với x_scale để duy trì tỷ lệ khung hình.

roi là hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của dữ liệu IR nguồn để vẽ.

rgb_channel là kênh RGB (0=R, 1=G, 2=B) để kết xuất. -1 (mặc định) kết xuất tất cả các kênh.

alpha điều khiển mức độ pha trộn ảnh nguồn (0-255). 255 là hoàn toàn không trong suốt.

color_palette là một enum bảng màu hoặc một ảnh RGB565 256 điểm ảnh được dùng làm bảng tra cứu cho giá trị nguồn thang xám.

alpha_palette là một ảnh GRAYSCALE 256 điểm ảnh được dùng làm bảng tra cứu alpha.

hint là phép OR logic của:

scale là một tuple 2 phần tử (min, max) kiểm soát nhiệt độ tối thiểu/tối đa (tính bằng độ Celsius) dùng để thay đổi tỷ lệ mảng IR. Mặc định là giá trị IR thực tế nhỏ nhất và lớn nhất.

pixformat kiểm soát định dạng điểm ảnh đầu ra. Phải là image.GRAYSCALE hoặc image.RGB565.

copy_to_fb nếu là True thì ghi kết quả vào bộ đệm khung hình thay vì cấp phát trên heap.

timeout nếu không phải -1, là số mili giây chờ một khung hình mới.

Hằng số

fir.FIR_SHIELD: int

OpenMV Cam Thermopile Shield (MLX90621). Bí danh của fir.FIR_MLX90621.

fir.FIR_MLX90621: int

Cảm biến nhiệt MLX90621 (16x4).

fir.FIR_MLX90640: int

Cảm biến nhiệt MLX90640 (32x24).

fir.FIR_MLX90641: int

Cảm biến nhiệt MLX90641 (16x12).

fir.FIR_AMG8833: int

Cảm biến nhiệt AMG8833 (8x8).