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– это частота обновления теплового датчика в Гц:fir.FIR_MLX90621: По умолчанию 64 Гц. Может быть 1, 2, 4, 8, 16, 32, 64, 128, 256 или 512 Гц.fir.FIR_MLX90640: По умолчанию 32 Гц. Может быть 1, 2, 4, 8, 16, 32 или 64 Гц.fir.FIR_MLX90641: По умолчанию 32 Гц. Может быть 1, 2, 4, 8, 16, 32 или 64 Гц.fir.FIR_AMG8833: Фиксированная 10 Гц.
Более высокая частота обновления снижает точность, и наоборот.
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¶
Возвращает текущую частоту обновления (Гц), заданную при вызове
fir.init().
- fir.resolution() int¶
Возвращает текущее разрешение (биты), заданное при вызове
fir.init().
- fir.read_ta() float¶
Возвращает температуру окружающей среды (т.е. температуру датчика) в градусах Цельсия в виде числа с плавающей точкой.
- fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]¶
Возвращает 4-кортеж
(ta, ir, to_min, to_max), содержащий температуру окружающей среды, плоский список температур с плавающей точкой длинойwidth * height, минимальную и максимальную наблюдаемые температуры. Все значения в градусах Цельсия.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– это перечисление цветовой палитры (например,image.PALETTE_RAINBOW,image.PALETTE_IRONBOW) или изображение RGB565 размером 256 пикселей, используемое как таблица поиска по значению исходного пикселя в оттенках серого.alpha_palette– это изображение GRAYSCALE размером 256 пикселей, используемое как таблица поиска альфа-канала, которая модулируетalphaдля каждого значения исходного пикселя.hint– это логическое ИЛИ из: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– это 2-кортеж(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 (которая ограничена); установитеcopy_to_fbв True, чтобы вместо этого записать результат в буфер кадра.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– это перечисление цветовой палитры или изображение RGB565 размером 256 пикселей, используемое как таблица поиска по значению исходного пикселя в оттенках серого.alpha_palette– это изображение GRAYSCALE размером 256 пикселей, используемое как таблица поиска альфа-канала.hint– это логическое ИЛИ из: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– это 2-кортеж(min, max), управляющий минимальной/максимальной температурой (в градусах Цельсия), используемой для масштабирования IR-массива. По умолчанию равен фактическим минимуму и максимуму IR.pixformatуправляет выходным форматом пикселей. Должен бытьimage.GRAYSCALEилиimage.RGB565.copy_to_fbесли True, записывает результат в буфер кадра вместо выделения в куче.timeoutесли не -1, число миллисекунд ожидания нового кадра.
Константы¶
- fir.FIR_SHIELD: int¶
OpenMV Cam Thermopile Shield (MLX90621). Псевдоним для
fir.FIR_MLX90621.