fir — драйвер теплового датчика (fir == далекий інфрачервоний діапазон)#

Модуль 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 вказує тип теплового датчика:

За замовчуванням type має значення -1, що змушує fir.init() автоматично сканувати та ініціалізувати підключений тепловий датчик за його I2C-адресою. Зверніть увагу, що fir.FIR_MLX90640 і fir.FIR_MLX90641 мають однакову I2C-адресу, тому для ініціалізації саме MLX90641 необхідно явно передати 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.deinit() None#

Деініціалізує тепловий датчик та звільняє ресурси.

fir.width() int#

Повертає горизонтальну роздільну здатність (у пікселях) поточного теплового датчика.

fir.height() int#

Повертає вертикальну роздільну здатність (у пікселях) поточного теплового датчика.

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) області інтересу (ROI) у вихідних ІЧ-даних для відображення.

rgb_channel — RGB-канал (0=R, 1=G, 2=B) для відображення на цільовому зображенні, якщо воно у форматі RGB565. -1 (за замовчуванням) відображає всі канали.

alpha визначає ступінь змішування вихідного зображення з цільовим (0-255). 255 — повністю непрозоре; 0 — без змін.

color_palette — перерахування кольорової палітри (наприклад, image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) або 256-піксельне зображення RGB565, що використовується як таблиця відповідності для значень відтінків сірого вихідного зображення.

alpha_palette — 256-піксельне зображення у відтінках сірого (GRAYSCALE), що використовується як таблиця відповідності для значень прозорості, яка модулює 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) області інтересу (ROI) у вихідних ІЧ-даних для відображення.

rgb_channel — RGB-канал (0=R, 1=G, 2=B) для відображення. -1 (за замовчуванням) відображає всі канали.

alpha визначає ступінь змішування вихідного зображення (0-255). 255 — повністю непрозоре.

color_palette — перерахування кольорової палітри або 256-піксельне зображення RGB565, що використовується як таблиця відповідності для значень відтінків сірого вихідного зображення.

alpha_palette — 256-піксельне зображення у відтінках сірого (GRAYSCALE), що використовується як таблиця відповідності для значень прозорості.

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), що задає мінімальну/максимальну температуру (у градусах Цельсія) для масштабування ІЧ-масиву. За замовчуванням використовуються фактичні мінімум та максимум ІЧ-масиву.

pixformat визначає формат пікселів виводу. Має бути image.GRAYSCALE або image.RGB565.

copy_to_fb якщо True — записує результат у кадровий буфер замість виділення пам’яті в купі.

timeout якщо не -1 — кількість мілісекунд очікування нового кадру.

Константи#

fir.FIR_SHIELD: int#

Термопільний щит OpenMV Cam (MLX90621). Псевдонім для fir.FIR_MLX90621.

fir.FIR_MLX90621: int#

Тепловий датчик MLX90621 (16x4).

fir.FIR_MLX90640: int#

Тепловий датчик MLX90640 (32x24).

fir.FIR_MLX90641: int#

Тепловий датчик MLX90641 (16x12).

fir.FIR_AMG8833: int#

Тепловий датчик AMG8833 (8x8).