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.
typecho biết loại cảm biến nhiệt:fir.FIR_SHIELD: 16x4 điểm ảnh (MLX90621).fir.FIR_MLX90621: 16x4 điểm ảnh.fir.FIR_MLX90640: 32x24 điểm ảnh.fir.FIR_MLX90641: 16x12 điểm ảnh.fir.FIR_AMG8833: 8x8 điểm ảnh.
Mặc định
typelà-1khiếnfir.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ằngfir.FIR_MLX90640vàfir.FIR_MLX90641dùng chung địa chỉ I2C, vì vậy bạn phải truyềnfir.FIR_MLX90641vàotypeđể khởi tạo riêng loại đó.refreshlà 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.
resolutionlà độ phân giải đo lường của cảm biến nhiệt tính bằng bit:fir.FIR_MLX90621: Mặc định là 18. Có thể là 15, 16, 17 hoặc 18.fir.FIR_MLX90640: Mặc định là 19. Có thể là 16, 17, 18 hoặc 19.fir.FIR_MLX90641: Mặc định là 19. Có thể là 16, 17, 18 hoặc 19.fir.FIR_AMG8833: Cố định ở 12.
Độ 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.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_MLX90641hoặcfir.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ẳngwidth * heightcá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.hmirrornếu là True thì lật ngang mảngir.vflipnếu là True thì lật dọc mảngir.transposenếu là True thì chuyển vị mảngir(hoán đổi chiều rộng và chiều cao).timeoutnế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
irlênimagevới góc trên bên trái tại tọa độ(x, y).irlà danh sách nhiệt độ phẳngwidth * heightđược trả về bởifir.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ớiy_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ớix_scaleđể duy trì tỷ lệ khung hình.roilà 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_channellà 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_palettelà 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_palettelà một ảnh GRAYSCALE 256 điểm ảnh được dùng làm bảng tra cứu alpha để điều chỉnhalphatheo từng giá trị điểm ảnh nguồn.hintlà phép OR logic của:image.AREA: Dùng thay đổi tỷ lệ theo vùng khi thu nhỏ.image.BILINEAR: Dùng thay đổi tỷ lệ song tuyến.image.BICUBIC: Dùng thay đổi tỷ lệ song khối.image.CENTER: Căn giữa ảnh trên đích.image.HMIRROR: Lật ngang.image.VFLIP: Lật dọc.image.TRANSPOSE: Chuyển vị (hoán đổi x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Áp dụng trích xuất rgb_channel trước khi thay đổi tỷ lệ.image.APPLY_COLOR_PALETTE_FIRST: Áp dụng bảng màu trước khi thay đổi tỷ lệ.image.SCALE_ASPECT_KEEP: Vừa khít trong đích giữ nguyên tỷ lệ khung hình.image.SCALE_ASPECT_EXPAND: Lấp đầy đích giữ nguyên tỷ lệ khung hình (cắt xén).image.SCALE_ASPECT_IGNORE: Lấp đầy đích bỏ qua tỷ lệ khung hình (kéo giãn).image.ROTATE_90: Xoay 90 độ.image.ROTATE_180: Xoay 180 độ.image.ROTATE_270: Xoay 270 độ.
scalelà 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ảngir. Mặc định là giá trịirthự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ếucopy_to_fblà False, ảnh mới được cấp phát trên heap MicroPython (bị giới hạn); đặtcopy_to_fbthành True để ghi kết quả vào bộ đệm khung hình thay thế.hmirrornếu là True thì lật ngang ảnh mới.vflipnếu là True thì lật dọc ảnh mới.transposenế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ớiy_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ớix_scaleđể duy trì tỷ lệ khung hình.roilà 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_channellà 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_palettelà 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_palettelà một ảnh GRAYSCALE 256 điểm ảnh được dùng làm bảng tra cứu alpha.hintlà phép OR logic của:image.AREA: Dùng thay đổi tỷ lệ theo vùng khi thu nhỏ.image.BILINEAR: Dùng thay đổi tỷ lệ song tuyến.image.BICUBIC: Dùng thay đổi tỷ lệ song khối.image.CENTER: Căn giữa ảnh trên đích.image.HMIRROR: Lật ngang.image.VFLIP: Lật dọc.image.TRANSPOSE: Chuyển vị (hoán đổi x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Áp dụng trích xuất rgb_channel trước khi thay đổi tỷ lệ.image.APPLY_COLOR_PALETTE_FIRST: Áp dụng bảng màu trước khi thay đổi tỷ lệ.image.SCALE_ASPECT_KEEP: Vừa khít trong đích giữ nguyên tỷ lệ khung hình.image.SCALE_ASPECT_EXPAND: Lấp đầy đích giữ nguyên tỷ lệ khung hình (cắt xén).image.SCALE_ASPECT_IGNORE: Lấp đầy đích bỏ qua tỷ lệ khung hình (kéo giãn).image.ROTATE_90: Xoay 90 độ.image.ROTATE_180: Xoay 180 độ.image.ROTATE_270: Xoay 270 độ.
scalelà 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.pixformatkiểm soát định dạng điểm ảnh đầu ra. Phải làimage.GRAYSCALEhoặcimage.RGB565.copy_to_fbnếu là True thì ghi kết quả vào bộ đệm khung hình thay vì cấp phát trên heap.timeoutnế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.