From d2e36ab0e7e9bbc711435cc7a522cdc3fe5e3fce Mon Sep 17 00:00:00 2001 From: Serein_Y Date: Fri, 5 Jun 2026 15:28:58 +0800 Subject: [PATCH 1/2] Add MaixCam2 Thermal160 reset and history recorder --- projects/app_thermal160_camera/README.md | 68 +- projects/app_thermal160_camera/README_EN.md | 65 +- projects/app_thermal160_camera/app.yaml | 5 + projects/app_thermal160_camera/main.py | 632 +++++++------ .../C_context/logs/v1.png | Bin 0 -> 116448 bytes .../maix-thermal160_camera_history/README.md | 51 + .../README_EN.md | 51 + .../maix-thermal160_camera_history/app.yaml | 18 + .../assets/thermal.json | 1 + .../maix-thermal160_camera_history/main.py | 878 ++++++++++++++++++ 10 files changed, 1433 insertions(+), 336 deletions(-) create mode 100644 projects/maix-thermal160_camera_history/C_context/logs/v1.png create mode 100644 projects/maix-thermal160_camera_history/README.md create mode 100644 projects/maix-thermal160_camera_history/README_EN.md create mode 100644 projects/maix-thermal160_camera_history/app.yaml create mode 100644 projects/maix-thermal160_camera_history/assets/thermal.json create mode 100644 projects/maix-thermal160_camera_history/main.py diff --git a/projects/app_thermal160_camera/README.md b/projects/app_thermal160_camera/README.md index ea6cc1d7..39a83801 100644 --- a/projects/app_thermal160_camera/README.md +++ b/projects/app_thermal160_camera/README.md @@ -1,34 +1,66 @@ -# MaixCAM Thermal 160 实时热成像监控 +# MaixCAM Thermal160 实时热成像监控 - 这是一个基于 MaixPy v4 框架开发的实时热成像监控程序,专门为 MaixCAM2(及后续支持型号)设计。该程序通过 UART 接收 160x120 - 分辨率的热成像原始数据,并实时渲染为具有 Ironbow(铁红) 伪彩映射的视频流。 +这是一个基于 MaixPy v4 的 MaixCAM2 Thermal160 实时热成像应用。程序通过 UART 接收 160x120 热成像帧,解析帧尾温度 telemetry,并实时渲染伪彩画面、中心点温度、最高/最低点和 NUC 状态。 ## 硬件要求 -* 设备:MaixCAM2, 可参考该APP 代码移植到其他能够使用串口外设的平台 -* 传感器:支持 PMOD 接口或 UART 输出的 160x120 像素热成像模组。 +* 设备:MaixCAM2。 +* 传感器:Thermal160 / TN160 160x120 热成像模组。 * 连接方式: - * MaixCAM2 默认使用 /dev/ttyS2。 - * 波特率:初始 2,000,000,握手后最高可跳变至 4,000,000。 + * UART:MaixCAM2 默认使用 `/dev/ttyS2`。 + * 波特率:初始 `2,000,000`,发送 `0x44` 握手后切到 `4,000,000`。 + * 复位:MaixCAM2 `A9` 配置为 `GPIOA9`,作为 Thermal160 软件复位脚。 + +## 启动行为 + +MaixCam2 电池供电时,Thermal160 可能不会自动上电/复位到可通信状态。应用启动 UART 前会自动执行一次 A9 软件复位: + +1. `pinmap.set_pin_function("A9", "GPIOA9")` +2. `GPIOA9` 默认释放为高电平 +3. 拉低约 `120ms` +4. 拉高释放并等待约 `400ms` + +当前按“低有效复位”实现。如果硬件接法是高有效,需要在代码顶部对调: + +```python +THERMAL_RESET_IDLE_LEVEL = 0 +THERMAL_RESET_ACTIVE_LEVEL = 1 +``` + +启动后前 3 秒显示 `Initializing thermal160` 和进度条;超过 3 秒仍没有合法帧,才显示 `thermal160 device not found`。 ## 配置说明 - 在代码顶层可以根据需要调整以下常量: +在代码顶层可以根据需要调整以下常量: -* CMAP = True:设为 True 显示彩色热成像,False 则显示原始灰度图(零拷贝,性能更高)。 -* SKIP_COUNT = 10:启动时跳过的初始帧数,用于稳定传感器数据。 +* `SKIP_COUNT = 10`:启动后跳过的初始帧数。 +* `STARTUP_GRACE_SEC = 3.0`:启动等待页到 `Device not found` 的延迟。 +* `THERMAL_RESET_ASSERT_SEC = 0.12`:A9 复位保持时间。 +* `THERMAL_RESET_RELEASE_DELAY_SEC = 0.40`:释放复位后的等待时间。 ## 协议简介 - 程序期望的 UART 数据格式为: +程序期望的 UART 数据格式为: + +* 帧头:`0xFF` +* 像素:`160 * 120 = 19200` 字节,8-bit 温度线性灰度 +* telemetry:30 字节,包含 `VTEMP / t_lo / t_hi / anchor / smooth / mean_diff / NTC / NUC` 等运行状态 +* 总长度:`1 + 19200 + 30 = 19231` 字节 + +注意:像素区允许出现合法的 `0xFF`。同步逻辑不能再用“payload 中出现 `0xFF` 就重同步”的旧方案,而是通过 telemetry 合理性和下一帧帧头位置校验。 + +## 历史记录应用 + +24 小时温度趋势记录已拆成独立应用包: + +```text +../maix-thermal160_camera_history/ +``` -* 帧头:0xFF -* 负载:19,200 字节 (160 * 120) 的单字节灰度数据。 -* 校验:负载中不包含 0xFF。 -总计单包大小为 19201 bytes +该包会每秒记录温度到 CSV,并支持一键保存完整历史 PNG。 ## 注意事项 -* MaixCAM2 兼容性:程序包含针对 MaixCAM2 的波特率切换指令 (0x44),使用其他串口设备时请根据实际通讯协议修改 HardwareHAL 类。 -* 资源释放:程序通过 finally 块确保在退出时安全释放 UART 资源。 -* 当 MaixCam2 仅由电池供电时,如果 TN160 在 MaixCam2 上电前已连接到 MaixCam2,则 MaixCam2 上电后需要手动按下 TN160 的RST复位按键。 \ No newline at end of file +* A9 只能作为复位控制信号,不要用 MaixCAM2 GPIO 直接给 Thermal160 供电。 +* 软件复位、电平有效性和等待时间需要结合实际硬件上板验证。 +* 程序通过 `finally` 释放 UART 资源。 diff --git a/projects/app_thermal160_camera/README_EN.md b/projects/app_thermal160_camera/README_EN.md index 3bb3a9c8..7da988ed 100644 --- a/projects/app_thermal160_camera/README_EN.md +++ b/projects/app_thermal160_camera/README_EN.md @@ -1,33 +1,66 @@ -# MaixCAM Thermal 160 Real-time Thermal Imaging Monitoring +# MaixCAM Thermal160 Real-time Thermal Imaging -This is a real-time thermal imaging monitoring application developed based on the MaixPy v4 framework, specifically designed for MaixCAM2 (and future supported models). The application receives raw thermal imaging data at 160x120 resolution via UART and renders it as a real-time video stream with Ironbow pseudo-color mapping. +This is a MaixPy v4 Thermal160 live-view app for MaixCAM2. It receives 160x120 thermal frames over UART, parses the tail telemetry, and renders pseudo-color live video with center temperature, min/max markers, and NUC status. ## Hardware Requirements -* Device: MaixCAM2, code can be ported to other platforms that support UART peripherals -* Sensor: Thermal imaging module with PMOD interface or UART output supporting 160x120 pixels. -* Connection method: - * MaixCAM2 defaults to /dev/ttyS2. - * Baud rate: Initial 2,000,000, can jump to up to 4,000,000 after handshake. +* Device: MaixCAM2. +* Sensor: Thermal160 / TN160 160x120 thermal imaging module. +* Connections: + * UART: MaixCAM2 uses `/dev/ttyS2` by default. + * Baud rate: starts at `2,000,000`, then switches to `4,000,000` after sending the `0x44` handshake. + * Reset: MaixCAM2 `A9` is configured as `GPIOA9` and used as the Thermal160 software reset pin. + +## Startup Behavior + +When MaixCAM2 is powered from battery, Thermal160 may not automatically enter a usable powered/reset state. Before opening UART, the app sends one A9 reset pulse: + +1. `pinmap.set_pin_function("A9", "GPIOA9")` +2. Release `GPIOA9` high by default +3. Pull it low for about `120ms` +4. Release it high and wait about `400ms` + +The current implementation assumes an active-low reset. If your hardware reset is active-high, swap these constants: + +```python +THERMAL_RESET_IDLE_LEVEL = 0 +THERMAL_RESET_ACTIVE_LEVEL = 1 +``` + +During startup, the UI shows `Initializing thermal160` with a progress bar for 3 seconds. It only shows `thermal160 device not found` if no valid frame is received after that grace period. ## Configuration Adjust the following constants at the top of the code as needed: -* CMAP = True: Set to True to display color thermal imaging, False to display original grayscale (zero-copy, higher performance). -* SKIP_COUNT = 10: Number of initial frames to skip on startup, used to stabilize sensor data. +* `SKIP_COUNT = 10`: Initial frames skipped after startup. +* `STARTUP_GRACE_SEC = 3.0`: Delay before showing `Device not found`. +* `THERMAL_RESET_ASSERT_SEC = 0.12`: A9 reset assert time. +* `THERMAL_RESET_RELEASE_DELAY_SEC = 0.40`: Delay after releasing reset. ## Protocol Overview The expected UART data format is: -* Header: 0xFF -* Payload: 19,200 bytes (160 * 120) of single-byte grayscale data. -* Checksum: Payload does not contain 0xFF. -* Total packet size: 19201 bytes +* Header: `0xFF` +* Pixels: `160 * 120 = 19200` bytes of 8-bit temperature-linear grayscale data +* Telemetry: 30 bytes, including `VTEMP / t_lo / t_hi / anchor / smooth / mean_diff / NTC / NUC` runtime state +* Total size: `1 + 19200 + 30 = 19231` bytes -## Notes +Note: valid pixel data may contain `0xFF`. The parser must not resync only because `0xFF` appears in the pixel payload. It validates frame alignment using telemetry plausibility and the next-frame header position. + +## History Recorder App + +The 24-hour temperature history recorder is a separate app package: -* MaixCAM2 Compatibility: The program includes baud rate switching commands (0x44) specifically for MaixCAM2. When using other UART devices, please modify the HardwareHAL class according to the actual communication protocol. -* Resource Release: The program ensures safe UART resource release on exit through the finally block. +```text +../maix-thermal160_camera_history/ +``` + +It records one temperature sample per second to CSV and supports one-tap full-history PNG export. + +## Notes +* A9 is only a reset control signal. Do not power Thermal160 directly from a MaixCAM2 GPIO. +* Reset polarity and timing still need validation on real hardware. +* UART resources are released in the `finally` block on exit. diff --git a/projects/app_thermal160_camera/app.yaml b/projects/app_thermal160_camera/app.yaml index 0b3eea0c..8623f9f9 100644 --- a/projects/app_thermal160_camera/app.yaml +++ b/projects/app_thermal160_camera/app.yaml @@ -10,3 +10,8 @@ include: - assets/thermal.json - app.yaml - main.py +files: + - assets\thermal.json + - main.py + - README_EN.md + - README.md diff --git a/projects/app_thermal160_camera/main.py b/projects/app_thermal160_camera/main.py index 09b5a7f6..5fbe277c 100644 --- a/projects/app_thermal160_camera/main.py +++ b/projects/app_thermal160_camera/main.py @@ -3,65 +3,56 @@ import time from typing import Tuple -import numpy as np import cv2 -from maix import app, image, display, touchscreen +import numpy as np +from maix import app, display, gpio, image, pinmap, touchscreen from maix.peripheral import uart from maix.sys import device_name + PMOD_W = 160 PMOD_H = 120 FRAME_PIXEL_SIZE = PMOD_W * PMOD_H -# 物理帧尾 30 字节(与 PC 端 thermocam_gui.exe protocol.py 的 FRAME_SIZE -# = 19231 一致:1 引导 FF + 19200 像素 + 30 telemetry)。本文件只解析前 -# 6 字节 (vtemp/t_lo/t_hi),但 FRAME_SIZE 必须按物理长度算,否则下一帧 -# 紧挨校验会落在 NTC 字节上把每帧都误杀。 FRAME_TAIL_SIZE = 30 -FRAME_SIZE = FRAME_PIXEL_SIZE + FRAME_TAIL_SIZE -SKIP_COUNT = 10 -CMAP = True # 渲染管线分支路由开关:True为热成像伪彩映射,False为原生灰度零拷贝 +FRAME_BODY_SIZE = FRAME_PIXEL_SIZE + FRAME_TAIL_SIZE INT16_MAX = 0x7FFF -# 配置常量 BAUDRATE_INIT = 2000000 BAUDRATE_HIGH = 4000000 +UART_BUFFER_SIZE = 32768 +UART_READ_TIMEOUT_MS = 10 + +SKIP_COUNT = 10 +STARTUP_GRACE_SEC = 3.0 FPS_WINDOW_SIZE = 30 EMA_ALPHA = 0.2 -SERIAL_TIMEOUT = 1 + +BACK_BUTTON_WIDTH_RATIO = 0.1 +DEFAULT_ICON_PATH = "/maixapp/share/icon/ret.png" + FONT_SCALE = 2.0 CENTER_TEMP_SCALE = 1.1 CORNER_TEMP_SCALE = 0.9 -# UART 配置 -# 单次 read 容量大于一帧(19220 B),让每帧只触发 1 次 serial.read 而非 ~5 -# 次,消除多次系统调用的调度开销,是这条流水线最显著的 FPS 瓶颈之一。 -UART_BUFFER_SIZE = 32768 # 读取缓冲区大小 -RETRY_DELAY = 0.1 # 重试延迟(秒) +THERMAL_RESET_PIN = "A9" +THERMAL_RESET_GPIO = "GPIOA9" +THERMAL_RESET_IDLE_LEVEL = 1 +THERMAL_RESET_ACTIVE_LEVEL = 0 +THERMAL_RESET_ASSERT_SEC = 0.12 +THERMAL_RESET_RELEASE_DELAY_SEC = 0.40 -# UI 配置 -BACK_BUTTON_WIDTH_RATIO = 0.1 # 返回按钮宽度占比 -# 资源路径 -DEFAULT_ICON_PATH = "/maixapp/share/icon/ret.png" - -# 配置日志 logging.basicConfig( level=logging.INFO, - format="%(asctime)s - %(levelname)s - %(message)s" + format="%(asctime)s - %(levelname)s - %(message)s", ) logger = logging.getLogger(__name__) +_thermal_reset_gpio = None -def pixels_to_temp(pixels: np.ndarray, t_lo: float, t_hi: float) -> np.ndarray: - if t_hi <= t_lo: - return np.full_like(pixels, t_lo, dtype=np.float32) - norm = (pixels.astype(np.float32) / 254.0).clip(0.0, 1.0) - return (t_lo + (t_hi - t_lo) * norm).astype(np.float32) - - -def draw_cross(img_disp: image.Image, x: int, y: int, color, size: int = 12) -> None: - img_disp.draw_line(x - size, y, x + size, y, color) - img_disp.draw_line(x, y - size, x, y + size, color) +def is_in_button(x: int, y: int, btn_pos: Tuple[int, int, int, int]) -> bool: + return (btn_pos[0] < x < btn_pos[0] + btn_pos[2] and + btn_pos[1] < y < btn_pos[1] + btn_pos[3]) def draw_label(img_disp: image.Image, x: int, y: int, text: str, color, scale: float = 0.8) -> None: @@ -69,18 +60,18 @@ def draw_label(img_disp: image.Image, x: int, y: int, text: str, color, scale: f img_disp.draw_string(x, y, text, color, scale=scale) -def is_in_button(x: int, y: int, btn_pos: Tuple[int, int, int, int]) -> bool: - return (btn_pos[0] < x < btn_pos[0] + btn_pos[2] and - btn_pos[1] < y < btn_pos[1] + btn_pos[3]) +def draw_cross(img_disp: image.Image, x: int, y: int, color, size: int = 12) -> None: + img_disp.draw_line(x - size, y, x + size, y, color) + img_disp.draw_line(x, y - size, x, y + size, color) def get_back_btn_img(width: int) -> Tuple[image.Image, int, int]: ret_width = int(width * BACK_BUTTON_WIDTH_RATIO) img_back = image.load(DEFAULT_ICON_PATH) w, h = (ret_width, img_back.height() * ret_width // img_back.width()) - if w % 2 != 0: + if w % 2: w += 1 - if h % 2 != 0: + if h % 2: h += 1 img_back = img_back.resize(w, h) img_back = img_back.rotate(0) @@ -88,11 +79,6 @@ def get_back_btn_img(width: int) -> Tuple[image.Image, int, int]: class HardwareHAL: - """Hardware Abstraction Layer for thermal camera device management. - - Provides platform-specific serial port configuration and device detection. - """ - _PORT_REGISTRY = { "MaixCAM2": "/dev/ttyS2", "MaixCAM": None, @@ -104,14 +90,233 @@ class HardwareHAL: def serial_port(cls) -> str: dn = device_name() if not isinstance(dn, str) or not dn.strip(): - raise TypeError(f"Invalid device identifier received: '{dn}'") + raise TypeError("Invalid device identifier received: '%s'" % dn) port = cls._PORT_REGISTRY.get(dn) if port is None: - raise RuntimeError(f"Platform mismatch: Device '{dn}' is not supported") + raise RuntimeError("Platform mismatch: Device '%s' is not supported" % dn) cls._device = dn return port +def pulse_thermal_reset() -> None: + global _thermal_reset_gpio + if HardwareHAL._device != "MaixCAM2": + return + try: + ret = pinmap.set_pin_function(THERMAL_RESET_PIN, THERMAL_RESET_GPIO) + if ret != 0: + logger.warning( + "Thermal160 reset pinmap returned %s for %s -> %s", + ret, THERMAL_RESET_PIN, THERMAL_RESET_GPIO, + ) + _thermal_reset_gpio = gpio.GPIO(THERMAL_RESET_GPIO, gpio.Mode.OUT) + _thermal_reset_gpio.value(THERMAL_RESET_IDLE_LEVEL) + time.sleep(0.02) + _thermal_reset_gpio.value(THERMAL_RESET_ACTIVE_LEVEL) + time.sleep(THERMAL_RESET_ASSERT_SEC) + _thermal_reset_gpio.value(THERMAL_RESET_IDLE_LEVEL) + time.sleep(THERMAL_RESET_RELEASE_DELAY_SEC) + logger.info("Thermal160 reset pulse sent on %s", THERMAL_RESET_PIN) + except Exception as exc: + logger.warning("Thermal160 reset pulse skipped: %s", exc) + + +def open_thermal_uart(): + devices = uart.list_devices() + if not devices: + raise RuntimeError("No available UART devices found") + + port_name = HardwareHAL.serial_port() + pulse_thermal_reset() + serial = uart.UART(port=port_name, baudrate=BAUDRATE_INIT) + if HardwareHAL._device == "MaixCAM2": + serial.write(b"\x44") + serial.close() + time.sleep(0.1) + serial = uart.UART(port=port_name, baudrate=BAUDRATE_HIGH) + return serial + + +def read_uart(serial, size: int, timeout_ms: int): + try: + return serial.read(size, timeout=timeout_ms) + except TypeError: + return serial.read(size, timeout_ms) + + +def telemetry_plausible(body: bytes) -> bool: + if len(body) != FRAME_BODY_SIZE: + return False + telemetry = body[FRAME_PIXEL_SIZE:] + raw_vtemp = struct.unpack_from(">H", telemetry, 0)[0] + if raw_vtemp & 0xC000: + return False + + t_lo_x10 = struct.unpack_from(">h", telemetry, 2)[0] + t_hi_x10 = struct.unpack_from(">h", telemetry, 4)[0] + if t_lo_x10 == INT16_MAX and t_hi_x10 == INT16_MAX: + return True + if not (-1000 <= t_lo_x10 <= 3200): + return False + if not (-1000 <= t_hi_x10 <= 3200): + return False + if t_hi_x10 < t_lo_x10: + return False + return True + + +def parse_frame_body(body: bytes): + telemetry = body[FRAME_PIXEL_SIZE:] + pixels = np.frombuffer(body[:FRAME_PIXEL_SIZE], dtype=np.uint8).reshape(PMOD_H, PMOD_W) + return { + "pixels": pixels, + "vtemp": struct.unpack_from(">H", telemetry, 0)[0] & 0x3FFF, + "t_lo_x10": struct.unpack_from(">h", telemetry, 2)[0], + "t_hi_x10": struct.unpack_from(">h", telemetry, 4)[0], + "anchor": struct.unpack_from(">i", telemetry, 6)[0], + "smooth_low": struct.unpack_from(">H", telemetry, 10)[0], + "smooth_high": struct.unpack_from(">H", telemetry, 12)[0], + "mean_diff": struct.unpack_from(">f", telemetry, 14)[0], + "ntc_ref": struct.unpack_from(">H", telemetry, 18)[0], + "ntc": struct.unpack_from(">H", telemetry, 20)[0], + "nuc_decision": telemetry[22], + "nuc_count": telemetry[23], + "nuc_dg": struct.unpack_from(">h", telemetry, 24)[0], + "nuc_dv": struct.unpack_from(">h", telemetry, 26)[0], + "nuc_dn": struct.unpack_from(">h", telemetry, 28)[0], + } + + +def drain_latest_frame(buffer: bytearray, skip: int, frame_count: int): + latest = None + while True: + idx = buffer.find(b"\xFF") + if idx < 0: + buffer.clear() + break + + end = idx + 1 + FRAME_BODY_SIZE + if len(buffer) < end: + if idx > 0: + del buffer[:idx] + break + + body = bytes(buffer[idx + 1:end]) + if not telemetry_plausible(body): + del buffer[:idx + 1] + continue + + if len(buffer) > end and buffer[end] != 0xFF: + del buffer[:idx + 1] + continue + + del buffer[:end] + frame_count += 1 + if skip <= SKIP_COUNT: + skip += 1 + continue + latest = parse_frame_body(body) + + return latest, skip, frame_count + + +def pixels_to_temp(pixels: np.ndarray, t_lo: float, t_hi: float) -> np.ndarray: + if t_hi <= t_lo: + return np.full_like(pixels, t_lo, dtype=np.float32) + norm = (pixels.astype(np.float32) / 254.0).clip(0.0, 1.0) + return (t_lo + (t_hi - t_lo) * norm).astype(np.float32) + + +def safe_colormap(name: str, fallback_id: int): + cp = getattr(cv2, name, fallback_id) + test = np.arange(256, dtype=np.uint8).reshape(1, 256) + try: + cv2.applyColorMap(test, cp) + return (name.replace("COLORMAP_", "").lower(), cp) + except Exception: + return None + + +def build_colormap_options(): + options = [] + for name, fallback in [ + ("COLORMAP_TURBO", 20), + ("COLORMAP_HOT", 0), + ("COLORMAP_COOL", 1), + ("COLORMAP_DEEPGREEN", 15), + ("COLORMAP_MAGMA", 13), + ]: + entry = safe_colormap(name, fallback) + if entry: + options.append(entry) + if not options: + raise RuntimeError("No supported OpenCV colormap") + return options + + +def get_cv2_lut(cmap_entry): + _, cp = cmap_entry + gray = np.arange(256, dtype=np.uint8).reshape(1, 256) + colored = cv2.applyColorMap(gray, cp) + return cv2.cvtColor(colored, cv2.COLOR_BGR2RGB).reshape(256, 3) + + +def init_text_button(width: int, height: int, label: str) -> image.Image: + btn = image.Image(width, height, image.Format.FMT_RGB888) + btn.draw_rect(0, 0, width, height, image.COLOR_BLACK, -1) + text_x = max(2, (width - len(label) * 6) // 2) + text_y = max(2, (height - 15) // 2) + btn.draw_string(text_x, text_y, label, image.COLOR_WHITE, scale=0.6) + return btn.rotate(0) + + +def draw_wait_page(disp, img_back, img_cmap, elapsed: float, has_error: bool) -> None: + w, h = disp.width(), disp.height() + main_img = image.Image(w, h, image.Format.FMT_RGB888) + main_img.draw_rect(0, 0, w, h, image.COLOR_BLACK, -1) + + if has_error: + title = "thermal160 device not found" + else: + title = "Initializing thermal160" + + char_w = 10 * FONT_SCALE + char_h = 20 * FONT_SCALE + x_msg = int((w - len(title) * char_w) // 2) + y_msg = int((h - char_h) // 2) - 18 + main_img.draw_string(x_msg + 1, y_msg + 1, title, image.COLOR_BLACK, scale=FONT_SCALE) + main_img.draw_string(x_msg, y_msg, title, image.COLOR_WHITE, scale=FONT_SCALE) + + if not has_error: + bar_w = max(80, int(w * 0.58)) + bar_h = max(8, int(h * 0.035)) + bar_x = (w - bar_w) // 2 + bar_y = y_msg + int(char_h) + 22 + progress = max(0.0, min(elapsed / STARTUP_GRACE_SEC, 1.0)) + fill_w = int((bar_w - 4) * progress) + main_img.draw_rect(bar_x, bar_y, bar_w, bar_h, image.COLOR_WHITE, 1) + if fill_w > 0: + main_img.draw_rect(bar_x + 2, bar_y + 2, fill_w, bar_h - 4, image.COLOR_WHITE, -1) + + main_img.draw_image(0, 0, img_back) + if img_cmap is not None: + main_img.draw_image(w - img_cmap.width(), h - img_cmap.height(), img_cmap) + disp.show(main_img) + + +def nuc_status_text(frame) -> str: + decision = frame.get("nuc_decision", 255) + count = frame.get("nuc_count", 0) + dg = frame.get("nuc_dg", 0) + if decision == 1: + return "NUC ACC#%d dg%+d" % (count, dg) + if decision == 2: + return "NUC REJ_DG dg%+d" % dg + if decision == 3: + return "NUC REJ_JMP dg%+d" % dg + return "NUC --" + + def main() -> None: disp = display.Display() disp.set_hmirror(False) @@ -120,252 +325,95 @@ def main() -> None: img_back, img_back_w, img_back_h = get_back_btn_img(disp.width()) back_rect = [0, 0, img_back_w, img_back_h] + cmap_rect = [disp.width() - img_back_w, disp.height() - img_back_h, img_back_w, img_back_h] - img_cmap: image.Image = None - cmap_rect = [ - disp.width() - int(disp.width() * BACK_BUTTON_WIDTH_RATIO), - disp.height() - 0, - 1, - 1, - ] + cmap_options = build_colormap_options() + cmap_idx = 0 + cmap_abbrev = {"hot": "HOT", "cool": "COOL", "deepgreen": "DGRN", "magma": "MAGM", "turbo": "TRBO"} - def init_cmap_btn(label: str) -> None: - nonlocal img_cmap, cmap_rect - w, h = img_back_w, img_back_h - img_cmap = image.Image(w, h, image.Format.FMT_RGB888) - img_cmap.draw_rect(0, 0, w, h, image.COLOR_BLACK, -1) - char_h = 15 - text_y = (h - char_h) // 2 - text_x = max(2, (w - len(label) * 6) // 2) - img_cmap.draw_string(text_x, text_y, label, image.COLOR_WHITE, scale=0.6) - img_cmap = img_cmap.rotate(0) - cmap_rect = [disp.width() - w, disp.height() - h, w, h] + def current_cmap_button(): + name = cmap_options[cmap_idx][0] + label = cmap_abbrev.get(name, name[:5].upper()) + return init_text_button(img_back_w, img_back_h, label) - init_cmap_btn("CMAP") + img_cmap = current_cmap_button() + lut = get_cv2_lut(cmap_options[cmap_idx]) + color_buf = np.zeros((PMOD_H, PMOD_W, 3), dtype=np.uint8) - devices = uart.list_devices() - if not devices: - logger.error( - "Error: No available UART devices found! " - "Hardware HAL execution aborted." - ) + disp_w, disp_h = disp.width(), disp.height() + disp_buffers = [ + np.zeros((disp_h, disp_w, 3), dtype=np.uint8), + np.zeros((disp_h, disp_w, 3), dtype=np.uint8), + ] + db_idx = 0 + + try: + serial = open_thermal_uart() + except Exception as exc: + logger.error("UART init failed: %s", exc) + draw_wait_page(disp, img_back, img_cmap, STARTUP_GRACE_SEC, True) + time.sleep(3.0) return - hw = HardwareHAL() - port_name = hw.serial_port() - serial = uart.UART(port=port_name, baudrate=BAUDRATE_INIT) + buffer = bytearray() + skip = 0 + frame_count = 0 + frame_timestamps = [] + fps_ema = 0.0 + capture_started = False + t_start = time.time() + last_wait_draw = 0.0 + + logger.info("System: Maix test pipeline initialized.") try: - if HardwareHAL._device == "MaixCAM2": - serial.write(b"\x44") - serial.close() - time.sleep(0.1) - serial = uart.UART(port=port_name, baudrate=BAUDRATE_HIGH) - - def _safe_colormap(name: str, fallback_id: int): - cp = getattr(cv2, name, fallback_id) - test = np.arange(256, dtype=np.uint8).reshape(1, 256) - try: - cv2.applyColorMap(test, cp) - return (name.replace("COLORMAP_", "").lower(), cp) - except Exception: - return None - - # TURBO 放首位作为默认:中段为绿/黄,均匀场景噪声映射过去是自然 - # 过渡色,从根本上消除 HOT 默认下的「静置偏红」。HOT/COOL 等仍在列 - # 表里,CMAP 按键可循环切换,用户需要 HOT 风格随时可切回。 - cmap_options = [] - for _name, _fid in [ - ("COLORMAP_TURBO", 20), - ("COLORMAP_HOT", 0), - ("COLORMAP_COOL", 1), - ("COLORMAP_DEEPGREEN", 15), - ("COLORMAP_MAGMA", 13), - ]: - entry = _safe_colormap(_name, _fid) - if entry: - cmap_options.append(entry) - - if not cmap_options: - logger.error("Error: No supported colormaps available.") - return - - cmap_idx = 0 - - def get_cv2_lut(idx): - _, cp = cmap_options[idx] - gray = np.arange(256, dtype=np.uint8).reshape(1, 256) - colored = cv2.applyColorMap(gray, cp) - return cv2.cvtColor(colored, cv2.COLOR_BGR2RGB).reshape(256, 3) - - cmap_abbrev = {"hot": "HOT", "cool": "COOL", "deepgreen": "DGRN", "magma": "MAGM", "turbo": "TRBO"} - - def redraw_cmap_btn() -> None: - name = cmap_options[cmap_idx][0] - label = cmap_abbrev.get(name, name[:5].upper()) - init_cmap_btn(label) - - lut = get_cv2_lut(cmap_idx) - color_buf = np.zeros((PMOD_H, PMOD_W, 3), dtype=np.uint8) - - disp_w, disp_h = disp.width(), disp.height() - # 双缓冲:两个物理缓冲轮替。当前帧写 buffer[i],disp.show 异步读取 - # 的同时下一帧写 buffer[i^1],不会与 DMA 读竞争。配合下面的 - # copy=False,省掉 cv2image 每帧~900KB 的内存拷贝。 - disp_buffers = [ - np.zeros((disp_h, disp_w, 3), dtype=np.uint8), - np.zeros((disp_h, disp_w, 3), dtype=np.uint8), - ] - db_idx = 0 - - buffer = bytearray() - skip = 0 - frame_count = 0 - - frame_timestamps = [] - fps_ema = 0.0 - - logger.info( - "System: Data pump and rendering pipeline successfully initialized." - ) - - capture_start = False while not app.need_exit(): x, y, pressed = ts.read() - if is_in_button(x, y, back_rect): + if pressed and is_in_button(x, y, back_rect): app.set_exit_flag(True) break if pressed and is_in_button(x, y, cmap_rect): cmap_idx = (cmap_idx + 1) % len(cmap_options) - lut = get_cv2_lut(cmap_idx) - redraw_cmap_btn() - logger.info(f"System: Switched to colormap {cmap_options[cmap_idx][0]}") + lut = get_cv2_lut(cmap_options[cmap_idx]) + img_cmap = current_cmap_button() time.sleep(0.2) - chunk = serial.read(UART_BUFFER_SIZE, SERIAL_TIMEOUT) + chunk = read_uart(serial, UART_BUFFER_SIZE, UART_READ_TIMEOUT_MS) if chunk: - chunk = bytes(chunk) - - if not chunk and not capture_start: - main_img = image.Image(disp.width(), disp.height(), image.Format.FMT_RGB888) - main_img.draw_rect( - 0, 0, disp.width(), disp.height(), image.COLOR_BLACK, -1 - ) - msg = "thermal160 device not found" - char_w = 10 * FONT_SCALE - char_h = 20 * FONT_SCALE - x_msg = int((disp.width() - len(msg) * char_w) // 2) - y_msg = int((disp.height() - char_h) // 2) - main_img.draw_string( - x_msg, y_msg, msg, image.COLOR_WHITE, scale=FONT_SCALE - ) - main_img.draw_image(0, 0, img_back) - if img_cmap is not None: - main_img.draw_image(disp_w - img_back_w, disp_h - img_back_h, img_cmap) - disp.show(main_img) - continue - if frame_count == 0: - logger.info("System: First data chunk received.") - buffer.extend(chunk) - - # ---- Drain-to-latest 同步策略 ---- - # 同 PC 端 thermocam_gui.exe 的等价行为:解析阶段把缓冲里所有合 - # 法帧全部消费掉,但只保留 *最后一帧* 用于渲染,丢弃中间帧。 - # 单线程下 disp.show + cv2 流水线一旦落后,串口侧会堆积多帧; - # 旧版"每解析一帧就渲染一帧"会把延迟越拉越大,缓冲越拉越长, - # 既导致屏幕卡顿、也提高了伪 0xFF 假同步的命中率(就是 output/ - # 里那张半幅错乱图的成因)。drain-to-latest 让每外循环最多一 - # 次重渲染,CPU 富余、缓冲不堆积、误同步概率断崖下降。 - latest_frame_data = None - latest_t_lo_x10 = INT16_MAX - latest_t_hi_x10 = INT16_MAX - while True: - idx = buffer.find(b"\xFF") - if idx == -1: - buffer.clear() - break - if len(buffer) - (idx + 1) < FRAME_SIZE: - if idx > 0: - del buffer[:idx] - break - - frame_data = bytes(buffer[idx + 1: idx + 1 + FRAME_SIZE]) - - # 帧对齐校验走 telemetry 合理性,而非"像素区内有 0xFF 就 - # 重同步"——后者会把固件 FFC 瞬态/饱和像素产生的合法 255 - # 也误判为失步。VTEMP 是 14-bit 大端(固件对每行累加前已 - # &0x3FFF),telemetry[0] 高 2 bit 恒为 0;t_lo/t_hi 是 - # °C×10 的物理量,落在合理区间且 t_hi≥t_lo。 - telemetry = frame_data[FRAME_PIXEL_SIZE:] - if telemetry[0] & 0xC0: - del buffer[:idx + 1] - continue - t_lo_x10 = struct.unpack_from(">h", telemetry, 2)[0] - t_hi_x10 = struct.unpack_from(">h", telemetry, 4)[0] - if t_lo_x10 != INT16_MAX and t_hi_x10 != INT16_MAX: - if not (-1000 <= t_lo_x10 <= 3200 and - -1000 <= t_hi_x10 <= 3200 and - t_hi_x10 >= t_lo_x10): - del buffer[:idx + 1] - continue - - # 帧间紧挨校验:协议里相邻两帧背靠背,下一帧的 0xFF 必须正 - # 好出现在本帧消费完的位置。这条 magic 能筛掉"FF + telemetry - # 凑巧合理 + 像素区中段被 UART RX FIFO 短暂溢出/固件脏数据 - # 污染"的坏帧——这种坏帧在 drain-to-latest 下会持续显示一 - # 整个 drain 周期,比单帧渲染时显眼得多(即 output/ 里上 1/3 - # 真实图像 + 下 2/3 椒盐噪声那张图的成因)。 - # 缓冲不够长时跳过此校验,留到下一轮 drain 再判。 - next_ff_pos = idx + 1 + FRAME_SIZE - if len(buffer) > next_ff_pos and buffer[next_ff_pos] != 0xFF: - del buffer[:idx + 1] - continue - - # 通过校验,推进缓冲并记账 - del buffer[:idx + 1 + FRAME_SIZE] - frame_count += 1 - - if skip <= SKIP_COUNT: - skip += 1 - continue - - # 关键:只保留缓冲里最后一帧用于渲染,旧帧直接丢弃 - latest_frame_data = frame_data - latest_t_lo_x10 = t_lo_x10 - latest_t_hi_x10 = t_hi_x10 - - if latest_frame_data is None: + buffer.extend(bytes(chunk)) + latest, skip, frame_count = drain_latest_frame(buffer, skip, frame_count) + else: + latest = None + + if latest is None: + if not capture_started: + now = time.time() + elapsed = now - t_start + if now - last_wait_draw >= 0.15: + draw_wait_page(disp, img_back, img_cmap, elapsed, elapsed >= STARTUP_GRACE_SEC) + last_wait_draw = now continue - # ===== 渲染最新一帧(每外循环最多一次 disp.show)===== - t_lo_x10 = latest_t_lo_x10 - t_hi_x10 = latest_t_hi_x10 - gray_np = np.frombuffer(latest_frame_data[:FRAME_PIXEL_SIZE], dtype=np.uint8).reshape(PMOD_H, PMOD_W) - gray_np = cv2.flip(gray_np, -1) + if not capture_started: + logger.info("System: First valid frame received.") + capture_started = True + + gray_np = cv2.flip(latest["pixels"], -1) + t_lo_x10 = latest["t_lo_x10"] + t_hi_x10 = latest["t_hi_x10"] has_temp = ( t_lo_x10 != INT16_MAX and t_hi_x10 != INT16_MAX and t_hi_x10 > t_lo_x10 ) - # 选中当前帧要写入的物理缓冲。另一个缓冲此刻可能仍被 - # 上一帧的 disp.show DMA 读取,不会被本帧写动。 disp_buffer = disp_buffers[db_idx] - if CMAP: - gray_blurred = cv2.GaussianBlur(gray_np, (3, 3), 1) - np.take(lut, gray_blurred, axis=0, out=color_buf) - cv2.resize(color_buf, (disp_w, disp_h), dst=disp_buffer, interpolation=cv2.INTER_LINEAR) - else: - gray_resized = cv2.resize(gray_np, (disp_w, disp_h), interpolation=cv2.INTER_LINEAR) - disp_buffer[:, :, 0] = gray_resized - disp_buffer[:, :, 1] = gray_resized - disp_buffer[:, :, 2] = gray_resized + gray_blurred = cv2.GaussianBlur(gray_np, (3, 3), 1) + np.take(lut, gray_blurred, axis=0, out=color_buf) + cv2.resize(color_buf, (disp_w, disp_h), dst=disp_buffer, interpolation=cv2.INTER_LINEAR) - # 双缓冲保护下安全启用 copy=False,省掉每帧 ~900KB 的 - # cv2image 内部 memcpy。竞态由缓冲轮替天然隔离。 img_disp = image.cv2image(disp_buffer, bgr=False, copy=False) - center_x = disp_w // 2 center_y = disp_h // 2 draw_cross(img_disp, center_x, center_y, image.COLOR_WHITE, 14) @@ -374,7 +422,6 @@ def redraw_cmap_btn() -> None: t_lo = t_lo_x10 / 10.0 t_hi = t_hi_x10 / 10.0 temp_img = pixels_to_temp(gray_np, t_lo, t_hi) - min_idx = np.argmin(temp_img) max_idx = np.argmax(temp_img) min_y, min_x = np.unravel_index(min_idx, temp_img.shape) @@ -390,45 +437,27 @@ def redraw_cmap_btn() -> None: img_disp, min(max(center_x + 18, 8), disp_w - 96), min(max(center_y - 18, 8), disp_h - 24), - f"{center_temp:.1f}C", + "%.1fC" % center_temp, image.COLOR_WHITE, scale=CENTER_TEMP_SCALE, ) - text_x = 8 - text_y = disp_h - 82 - draw_label( - img_disp, - text_x, - text_y, - f"MAX {temp_img[max_y, max_x]:.1f}C", - image.COLOR_RED, - scale=CORNER_TEMP_SCALE, - ) - draw_label( - img_disp, - text_x, - text_y + 26, - f"MIN {temp_img[min_y, min_x]:.1f}C", - image.COLOR_BLUE, - scale=CORNER_TEMP_SCALE, - ) - draw_label( - img_disp, - text_x, - text_y + 52, - f"RNG {t_lo:.1f}~{t_hi:.1f}C", - image.COLOR_WHITE, - scale=0.85, - ) + text_y = disp_h - 104 + draw_label(img_disp, text_x, text_y, "MAX %.1fC" % temp_img[max_y, max_x], + image.COLOR_RED, scale=CORNER_TEMP_SCALE) + draw_label(img_disp, text_x, text_y + 24, "MIN %.1fC" % temp_img[min_y, min_x], + image.COLOR_BLUE, scale=CORNER_TEMP_SCALE) + draw_label(img_disp, text_x, text_y + 48, "RNG %.1f~%.1fC" % (t_lo, t_hi), + image.COLOR_WHITE, scale=0.85) + draw_label(img_disp, text_x, text_y + 72, nuc_status_text(latest), + image.COLOR_WHITE, scale=0.65) + else: + draw_label(img_disp, 8, disp_h - 32, "UNCALIBRATED", image.COLOR_WHITE, scale=0.9) img_disp.draw_image(0, 0, img_back) - if img_cmap is not None: - img_disp.draw_image(disp_w - img_back_w, disp_h - img_back_h, img_cmap) - - capture_start = True + img_disp.draw_image(disp_w - img_back_w, disp_h - img_back_h, img_cmap) disp.show(img_disp) - db_idx ^= 1 # 切到另一个物理缓冲供下一帧写入 + db_idx ^= 1 current_time = time.time() frame_timestamps.append(current_time) @@ -437,22 +466,21 @@ def redraw_cmap_btn() -> None: if len(frame_timestamps) > 1: window_duration = frame_timestamps[-1] - frame_timestamps[0] if window_duration > 0: - window_fps = ((len(frame_timestamps) - 1) / window_duration) + window_fps = (len(frame_timestamps) - 1) / window_duration if fps_ema == 0.0: fps_ema = window_fps else: - fps_ema = ((EMA_ALPHA * window_fps) + ((1.0 - EMA_ALPHA) * fps_ema)) + fps_ema = EMA_ALPHA * window_fps + (1.0 - EMA_ALPHA) * fps_ema if frame_count % 10 == 0: - osd_text = f"FPS: {fps_ema:.2f}" - logger.info(osd_text) + logger.info("FPS: %.2f", fps_ema) - except Exception as e: - logger.error(f"Fatal: Unhandled pipeline exception: {str(e)}") + except Exception as exc: + logger.error("Fatal: %s", exc) raise finally: if serial is not None: serial.close() - logger.info("System: UART resource securely released via interrupt vector.") + logger.info("System: UART closed.") if __name__ == "__main__": diff --git a/projects/maix-thermal160_camera_history/C_context/logs/v1.png b/projects/maix-thermal160_camera_history/C_context/logs/v1.png new file mode 100644 index 0000000000000000000000000000000000000000..44ffa4cbb0707c73f0572c3d1713de429286d2ef GIT binary patch literal 116448 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 literal 0 HcmV?d00001 diff --git a/projects/maix-thermal160_camera_history/README.md b/projects/maix-thermal160_camera_history/README.md new file mode 100644 index 00000000..163df0bd --- /dev/null +++ b/projects/maix-thermal160_camera_history/README.md @@ -0,0 +1,51 @@ +# Thermal160 历史记录 + +这是一个独立的 MaixCam2 应用包,用于长时间记录 Thermal160 运行温度。 + +## 功能 + +- 通过 MaixCam2 `/dev/ttyS2` 读取 Thermal160 UART 数据。 +- 按 1 秒间隔采样温度历史,适合 24 小时运行观察。 +- 持续保存 `output/history_*.csv`,避免长测中途断电丢失全部数据。 +- 屏幕显示实时预览、当前温度和最近 30 分钟趋势。 +- 点击右上角 `SAVE` 保存完整历史趋势图 PNG。 +- 退出程序时,如果样本足够,会自动再保存一次 PNG。 +- 启动 UART 前通过 MaixCAM2 `A9` / `GPIOA9` 给 Thermal160 发送一次软件复位脉冲。 + +## 软件复位 + +MaixCam2 电池供电时,Thermal160 可能不会自动上电/复位到可通信状态。程序启动时会执行: + +1. `pinmap.set_pin_function("A9", "GPIOA9")` +2. `GPIOA9` 默认释放为高电平 +3. 拉低约 `120ms` +4. 拉高释放并等待约 `400ms` + +当前按“低有效复位”实现。如果硬件接法是高有效,需要在代码顶部对调: + +```python +THERMAL_RESET_IDLE_LEVEL = 0 +THERMAL_RESET_ACTIVE_LEVEL = 1 +``` + +## 输出文件 + +- MaixCam2 安装运行时目录:`/maixapp/apps/thermal160_camera_history/output/` +- CSV:`/maixapp/apps/thermal160_camera_history/output/history_YYYYmmdd_HHMMSS.csv` +- PNG:`/maixapp/apps/thermal160_camera_history/output/trend_YYYYmmdd_HHMMSS.png` + +## 协议 + +程序按当前 Thermal160 监控帧解析: + +- 帧头:`0xFF` +- 像素:`160 * 120 = 19200` 字节 +- telemetry:30 字节 +- 总长度:`1 + 19200 + 30 = 19231` 字节 + +## 注意 + +- 这是历史记录应用,不替代实时热成像主应用。 +- 需要在 MaixCam2 上实测 A9 复位、UART、触屏和 PNG 保存。 +- 如果超过 3 秒仍没有合法帧,界面会显示 `thermal160 device not found`。 +- A9 只能作为复位控制信号,不要用 MaixCAM2 GPIO 直接给 Thermal160 供电。 diff --git a/projects/maix-thermal160_camera_history/README_EN.md b/projects/maix-thermal160_camera_history/README_EN.md new file mode 100644 index 00000000..01d77bc0 --- /dev/null +++ b/projects/maix-thermal160_camera_history/README_EN.md @@ -0,0 +1,51 @@ +# Thermal160 History Recorder + +This is a standalone MaixCam2 app package for long-running Thermal160 temperature logging. + +## Features + +- Reads Thermal160 UART frames from MaixCam2 `/dev/ttyS2`. +- Samples temperature history once per second for 24-hour observation. +- Continuously writes `output/history_*.csv` so data is not lost if the run is interrupted. +- Shows live preview, current temperature values, and a rolling 30-minute trend. +- Tap `SAVE` to save a full-history PNG trend chart. +- Saves one more PNG on exit when enough samples are available. +- Sends one Thermal160 software reset pulse through MaixCAM2 `A9` / `GPIOA9` before opening UART. + +## Software Reset + +When MaixCAM2 is powered from battery, Thermal160 may not automatically enter a usable powered/reset state. On startup, the app does: + +1. `pinmap.set_pin_function("A9", "GPIOA9")` +2. Release `GPIOA9` high by default +3. Pull it low for about `120ms` +4. Release it high and wait about `400ms` + +The current implementation assumes an active-low reset. If your hardware reset is active-high, swap these constants: + +```python +THERMAL_RESET_IDLE_LEVEL = 0 +THERMAL_RESET_ACTIVE_LEVEL = 1 +``` + +## Output + +- MaixCam2 installed app output directory: `/maixapp/apps/thermal160_camera_history/output/` +- CSV: `/maixapp/apps/thermal160_camera_history/output/history_YYYYmmdd_HHMMSS.csv` +- PNG: `/maixapp/apps/thermal160_camera_history/output/trend_YYYYmmdd_HHMMSS.png` + +## Frame Format + +The app uses the current Thermal160 monitor frame format: + +- Header: `0xFF` +- Pixels: `160 * 120 = 19200` bytes +- Telemetry: 30 bytes +- Total size: `1 + 19200 + 30 = 19231` bytes + +## Notes + +- This is a history recorder app, not a replacement for the live thermal camera app. +- A9 reset, UART, touchscreen, and PNG saving still need validation on MaixCam2 hardware. +- If no valid frame is received after 3 seconds, the UI shows `thermal160 device not found`. +- A9 is only a reset control signal. Do not power Thermal160 directly from a MaixCAM2 GPIO. diff --git a/projects/maix-thermal160_camera_history/app.yaml b/projects/maix-thermal160_camera_history/app.yaml new file mode 100644 index 00000000..36a4c1c3 --- /dev/null +++ b/projects/maix-thermal160_camera_history/app.yaml @@ -0,0 +1,18 @@ +id: thermal160_camera_history +name: Thermal160 History +name[zh]: 热成像160历史记录 +version: 1.0.0 +icon: assets/thermal.json +author: Sipeed Ltd +desc: 24-hour Thermal160 temperature history recorder +desc[zh]: Thermal160 24小时温度历史记录 +include: + - assets/thermal.json + - app.yaml + - main.py +files: + - assets\thermal.json + - app.yaml + - main.py + - README_EN.md + - README.md diff --git a/projects/maix-thermal160_camera_history/assets/thermal.json b/projects/maix-thermal160_camera_history/assets/thermal.json new file mode 100644 index 00000000..9e0597a4 --- /dev/null +++ b/projects/maix-thermal160_camera_history/assets/thermal.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 1.0.0","a":"Bas Milius","k":"Meteocons, Weather icons, Icon set","d":"Thermometer - Meteocons.com","tc":""},"fr":60,"ip":0,"op":360,"w":512,"h":512,"nm":"thermometer","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"thermometer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256,256,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4,-24],[32,-24]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4,-88],[32,-88]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4,-56],[32,-56]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,-19.305],[30.928,0],[0,31.389],[-14.496,10.272],[0,0],[-17.673,0],[0,-17.937],[0,0]],"o":[[0,31.389],[-30.928,0],[0,-19.305],[0,0],[0,-17.937],[17.673,0],[0,0],[14.496,10.272]],"v":[[56,79.164],[0,136],[-56,79.164],[-32,32.559],[-32,-103.522],[0,-136],[32,-103.522],[32,32.559]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.796078443527,0.835294127464,0.882352948189,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"thermometer-glass","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.985,236],[255.985,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.985,236],[255.985,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.985,236],[255.985,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":180,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":210,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.985,236],[255.985,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":240,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":270,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.985,236],[255.985,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":300,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":330,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.985,236],[255.985,336]],"c":false}]},{"t":359,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[255.798,213],[255.798,336]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254905701,0.266666680574,0.266666680574,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":24,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,19.882],[19.882,0],[0,-19.882],[-19.882,0]],"o":[[0,-19.882],[-19.882,0],[0,19.882],[19.882,0]],"v":[[292,336],[256,300],[220,336],[256,372]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254905701,0.266666680574,0.266666680574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[256,336],"ix":2},"a":{"a":0,"k":[256,336],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"thermometer-mercury","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/projects/maix-thermal160_camera_history/main.py b/projects/maix-thermal160_camera_history/main.py new file mode 100644 index 00000000..8d2cdfd1 --- /dev/null +++ b/projects/maix-thermal160_camera_history/main.py @@ -0,0 +1,878 @@ +import logging +import math +import os +import struct +import time +from array import array +from typing import Tuple + +import cv2 +import numpy as np +from maix import app, display, gpio, image, pinmap, touchscreen +from maix.peripheral import uart +from maix.sys import device_name + + +PMOD_W = 160 +PMOD_H = 120 +FRAME_PIXEL_SIZE = PMOD_W * PMOD_H +FRAME_TAIL_SIZE = 30 +FRAME_BODY_SIZE = FRAME_PIXEL_SIZE + FRAME_TAIL_SIZE +INT16_MAX = 0x7FFF + +BAUDRATE_INIT = 2000000 +BAUDRATE_HIGH = 4000000 +UART_BUFFER_SIZE = 32768 +UART_READ_TIMEOUT_MS = 10 + +SKIP_COUNT = 10 +STARTUP_GRACE_SEC = 3.0 +SAMPLE_INTERVAL_SEC = 1.0 +DISPLAY_REFRESH_SEC = 0.25 +LIVE_WINDOW_SEC = 30.0 * 60.0 +RUN_TARGET_SEC = 24.0 * 3600.0 + +APP_DIR = os.path.dirname(os.path.abspath(__file__)) if "__file__" in globals() else os.getcwd() +OUTPUT_DIR = os.path.join(APP_DIR, "output") +CSV_FLUSH_EVERY = 10 + +THERMAL_RESET_PIN = "A9" +THERMAL_RESET_GPIO = "GPIOA9" +THERMAL_RESET_IDLE_LEVEL = 1 +THERMAL_RESET_ACTIVE_LEVEL = 0 +THERMAL_RESET_ASSERT_SEC = 0.12 +THERMAL_RESET_RELEASE_DELAY_SEC = 0.40 + +RGB_BLACK = (0, 0, 0) +RGB_BG = (14, 16, 20) +RGB_PANEL = (28, 31, 38) +RGB_GRID = (62, 68, 78) +RGB_WHITE = (235, 238, 242) +RGB_MUTED = (148, 156, 168) +RGB_RED = (255, 120, 120) +RGB_GREEN = (125, 210, 145) +RGB_CYAN = (95, 205, 245) +RGB_YELLOW = (245, 210, 95) +RGB_BLUE = (100, 150, 255) + + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger(__name__) +_thermal_reset_gpio = None + + +def is_in_button(x: int, y: int, btn_pos: Tuple[int, int, int, int]) -> bool: + return (btn_pos[0] < x < btn_pos[0] + btn_pos[2] and + btn_pos[1] < y < btn_pos[1] + btn_pos[3]) + + +def ensure_dir(path: str) -> None: + try: + os.makedirs(path, exist_ok=True) + except TypeError: + if not os.path.exists(path): + os.makedirs(path) + except OSError: + pass + + +def stamp() -> str: + try: + return time.strftime("%Y%m%d_%H%M%S") + except Exception: + return str(int(time.time())) + + +def finite(v) -> bool: + try: + return v == v and abs(v) != float("inf") + except Exception: + return False + + +def fmt_float(v, digits: int = 2) -> str: + if not finite(v): + return "nan" + return ("%." + str(digits) + "f") % v + + +class HardwareHAL: + _PORT_REGISTRY = { + "MaixCAM2": "/dev/ttyS2", + "MaixCAM": None, + "MaixCAM-Pro": None, + } + _device = "" + + @classmethod + def serial_port(cls) -> str: + dn = device_name() + if not isinstance(dn, str) or not dn.strip(): + raise TypeError("Invalid device identifier received: '%s'" % dn) + port = cls._PORT_REGISTRY.get(dn) + if port is None: + raise RuntimeError("Platform mismatch: Device '%s' is not supported" % dn) + cls._device = dn + return port + + +def pulse_thermal_reset() -> None: + global _thermal_reset_gpio + if HardwareHAL._device != "MaixCAM2": + return + try: + ret = pinmap.set_pin_function(THERMAL_RESET_PIN, THERMAL_RESET_GPIO) + if ret != 0: + logger.warning( + "Thermal160 reset pinmap returned %s for %s -> %s", + ret, THERMAL_RESET_PIN, THERMAL_RESET_GPIO, + ) + _thermal_reset_gpio = gpio.GPIO(THERMAL_RESET_GPIO, gpio.Mode.OUT) + _thermal_reset_gpio.value(THERMAL_RESET_IDLE_LEVEL) + time.sleep(0.02) + _thermal_reset_gpio.value(THERMAL_RESET_ACTIVE_LEVEL) + time.sleep(THERMAL_RESET_ASSERT_SEC) + _thermal_reset_gpio.value(THERMAL_RESET_IDLE_LEVEL) + time.sleep(THERMAL_RESET_RELEASE_DELAY_SEC) + logger.info("Thermal160 reset pulse sent on %s", THERMAL_RESET_PIN) + except Exception as exc: + logger.warning("Thermal160 reset pulse skipped: %s", exc) + + +def open_thermal_uart(): + devices = uart.list_devices() + if not devices: + raise RuntimeError("No available UART devices found") + + port_name = HardwareHAL.serial_port() + pulse_thermal_reset() + serial = uart.UART(port=port_name, baudrate=BAUDRATE_INIT) + if HardwareHAL._device == "MaixCAM2": + serial.write(b"\x44") + serial.close() + time.sleep(0.1) + serial = uart.UART(port=port_name, baudrate=BAUDRATE_HIGH) + return serial + + +def read_uart(serial, size: int, timeout_ms: int): + try: + return serial.read(size, timeout=timeout_ms) + except TypeError: + return serial.read(size, timeout_ms) + + +def telemetry_plausible(body: bytes) -> bool: + if len(body) != FRAME_BODY_SIZE: + return False + telemetry = body[FRAME_PIXEL_SIZE:] + raw_vtemp = struct.unpack_from(">H", telemetry, 0)[0] + if raw_vtemp & 0xC000: + return False + + t_lo_x10 = struct.unpack_from(">h", telemetry, 2)[0] + t_hi_x10 = struct.unpack_from(">h", telemetry, 4)[0] + if t_lo_x10 == INT16_MAX and t_hi_x10 == INT16_MAX: + return True + if not (-1000 <= t_lo_x10 <= 3200): + return False + if not (-1000 <= t_hi_x10 <= 3200): + return False + if t_hi_x10 < t_lo_x10: + return False + return True + + +def parse_frame_body(body: bytes): + telemetry = body[FRAME_PIXEL_SIZE:] + pixels = np.frombuffer(body[:FRAME_PIXEL_SIZE], dtype=np.uint8).reshape(PMOD_H, PMOD_W) + return { + "pixels": pixels, + "vtemp": struct.unpack_from(">H", telemetry, 0)[0] & 0x3FFF, + "t_lo_x10": struct.unpack_from(">h", telemetry, 2)[0], + "t_hi_x10": struct.unpack_from(">h", telemetry, 4)[0], + "anchor": struct.unpack_from(">i", telemetry, 6)[0], + "smooth_low": struct.unpack_from(">H", telemetry, 10)[0], + "smooth_high": struct.unpack_from(">H", telemetry, 12)[0], + "mean_diff": struct.unpack_from(">f", telemetry, 14)[0], + "ntc_ref": struct.unpack_from(">H", telemetry, 18)[0], + "ntc": struct.unpack_from(">H", telemetry, 20)[0], + "nuc_decision": telemetry[22], + "nuc_count": telemetry[23], + "nuc_dg": struct.unpack_from(">h", telemetry, 24)[0], + "nuc_dv": struct.unpack_from(">h", telemetry, 26)[0], + "nuc_dn": struct.unpack_from(">h", telemetry, 28)[0], + } + + +def drain_latest_frame(buffer: bytearray, skip: int, frame_count: int): + latest = None + while True: + idx = buffer.find(b"\xFF") + if idx < 0: + buffer.clear() + break + + end = idx + 1 + FRAME_BODY_SIZE + if len(buffer) < end: + if idx > 0: + del buffer[:idx] + break + + body = bytes(buffer[idx + 1:end]) + if not telemetry_plausible(body): + del buffer[:idx + 1] + continue + + if len(buffer) > end and buffer[end] != 0xFF: + del buffer[:idx + 1] + continue + + del buffer[:end] + frame_count += 1 + if skip <= SKIP_COUNT: + skip += 1 + continue + latest = parse_frame_body(body) + + return latest, skip, frame_count + + +def safe_colormap(name: str, fallback_id: int): + cp = getattr(cv2, name, fallback_id) + test = np.arange(256, dtype=np.uint8).reshape(1, 256) + try: + cv2.applyColorMap(test, cp) + return cp + except Exception: + return None + + +def build_lut(): + cp = safe_colormap("COLORMAP_TURBO", 20) + if cp is None: + cp = safe_colormap("COLORMAP_HOT", 0) + if cp is None: + raise RuntimeError("No supported OpenCV colormap") + gray = np.arange(256, dtype=np.uint8).reshape(1, 256) + colored = cv2.applyColorMap(gray, cp) + return cv2.cvtColor(colored, cv2.COLOR_BGR2RGB).reshape(256, 3) + + +def fpa_to_celsius(vtemp: int) -> float: + if vtemp == 0: + return float("nan") + return 25.0 + (vtemp - 8192) / 70.0 + + +def ntc_adu_to_celsius(adc: int) -> float: + if adc <= 0 or adc >= 4095: + return float("nan") + r_ntc = 10000.0 * adc / (4095.0 - adc) + inv_t = 1.0 / 298.15 + math.log(r_ntc / 10000.0) / 3435.0 + return 1.0 / inv_t - 273.15 + + +def u8_to_temp(u8_value: int, t_lo: float, t_hi: float) -> float: + return t_lo + (t_hi - t_lo) * min(max(float(u8_value) / 254.0, 0.0), 1.0) + + +def frame_to_sample(frame, elapsed_s: float): + t_lo_x10 = frame["t_lo_x10"] + t_hi_x10 = frame["t_hi_x10"] + calibrated = (t_lo_x10 != INT16_MAX and + t_hi_x10 != INT16_MAX and + t_hi_x10 > t_lo_x10) + + t_lo = float("nan") + t_hi = float("nan") + scene_mid = float("nan") + center = float("nan") + min_temp = float("nan") + max_temp = float("nan") + + if calibrated: + t_lo = t_lo_x10 / 10.0 + t_hi = t_hi_x10 / 10.0 + scene_mid = (t_lo + t_hi) / 2.0 + pixels = frame["pixels"] + center = u8_to_temp(int(pixels[PMOD_H // 2, PMOD_W // 2]), t_lo, t_hi) + min_temp = u8_to_temp(int(pixels.min()), t_lo, t_hi) + max_temp = u8_to_temp(int(pixels.max()), t_lo, t_hi) + + return { + "t": elapsed_s, + "scene_mid": scene_mid, + "center": center, + "min": min_temp, + "max": max_temp, + "fpa": fpa_to_celsius(frame["vtemp"]), + "ntc": ntc_adu_to_celsius(frame["ntc"]), + "t_lo": t_lo, + "t_hi": t_hi, + "vtemp": frame["vtemp"], + "ntc_adu": frame["ntc"], + "anchor": frame["anchor"], + "smooth_low": frame["smooth_low"], + "smooth_high": frame["smooth_high"], + "mean_diff": frame["mean_diff"], + "nuc_decision": frame["nuc_decision"], + "nuc_count": frame["nuc_count"], + "nuc_dg": frame["nuc_dg"], + "nuc_dv": frame["nuc_dv"], + "nuc_dn": frame["nuc_dn"], + } + + +class HistoryStore: + def __init__(self): + self.t = array("f") + self.scene_mid = array("f") + self.center = array("f") + self.fpa = array("f") + self.ntc = array("f") + self.min = array("f") + self.max = array("f") + + def append(self, sample) -> None: + self.t.append(float(sample["t"])) + self.scene_mid.append(float(sample["scene_mid"])) + self.center.append(float(sample["center"])) + self.fpa.append(float(sample["fpa"])) + self.ntc.append(float(sample["ntc"])) + self.min.append(float(sample["min"])) + self.max.append(float(sample["max"])) + + def __len__(self) -> int: + return len(self.t) + + +class CsvLogger: + def __init__(self, out_dir: str): + ensure_dir(out_dir) + self.path = os.path.join(out_dir, "history_%s.csv" % stamp()) + self._file = open(self.path, "w") + self._count = 0 + self._file.write( + "elapsed_s,scene_mid_c,center_c,min_c,max_c,fpa_c,ntc_c," + "t_lo_c,t_hi_c,vtemp_adu,ntc_adu,anchor,smooth_low,smooth_high," + "mean_diff,nuc_decision,nuc_count,nuc_dg,nuc_dv,nuc_dn\n" + ) + self._file.flush() + + def write(self, sample) -> None: + row = [ + fmt_float(sample["t"], 3), + fmt_float(sample["scene_mid"], 3), + fmt_float(sample["center"], 3), + fmt_float(sample["min"], 3), + fmt_float(sample["max"], 3), + fmt_float(sample["fpa"], 3), + fmt_float(sample["ntc"], 3), + fmt_float(sample["t_lo"], 3), + fmt_float(sample["t_hi"], 3), + str(sample["vtemp"]), + str(sample["ntc_adu"]), + str(sample["anchor"]), + str(sample["smooth_low"]), + str(sample["smooth_high"]), + fmt_float(sample["mean_diff"], 3), + str(sample["nuc_decision"]), + str(sample["nuc_count"]), + str(sample["nuc_dg"]), + str(sample["nuc_dv"]), + str(sample["nuc_dn"]), + ] + self._file.write(",".join(row) + "\n") + self._count += 1 + if self._count % CSV_FLUSH_EVERY == 0: + self._file.flush() + + def close(self) -> None: + self._file.flush() + self._file.close() + + +def draw_text(canvas, text: str, x: int, y: int, color=RGB_WHITE, scale: float = 0.45, thickness: int = 1): + cv2.putText(canvas, text, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, + scale, color, thickness) + + +def text_size(text: str, scale: float = 0.45, thickness: int = 1): + size, baseline = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, scale, thickness) + return size[0], size[1], baseline + + +def draw_centered_text(canvas, text: str, rect, color=RGB_WHITE, + scale: float = 0.45, thickness: int = 1): + x, y, w, h = rect + tw, th, _ = text_size(text, scale, thickness) + tx = x + max(0, (w - tw) // 2) + ty = y + max(th + 1, (h + th) // 2 - 1) + draw_text(canvas, text, tx, ty, color, scale, thickness) + + +def latest_valid(values): + for i in range(len(values) - 1, -1, -1): + v = values[i] + if finite(v): + return v + return float("nan") + + +def compact_text(text: str, max_chars: int) -> str: + if not text or max_chars <= 0: + return "" + if len(text) <= max_chars: + return text + if max_chars <= 3: + return text[:max_chars] + return text[:max_chars - 3] + "..." + + +def fit_text_width(text: str, max_width: int, scale: float = 0.45, thickness: int = 1) -> str: + if not text or max_width <= 0: + return "" + if text_size(text, scale, thickness)[0] <= max_width: + return text + suffix = "..." + for length in range(len(text) - 1, 0, -1): + candidate = text[:length] + suffix + if text_size(candidate, scale, thickness)[0] <= max_width: + return candidate + return "" + + +def compact_saved_msg(saved_msg: str, max_chars: int = 28) -> str: + if not saved_msg: + return "" + if saved_msg.startswith("saved "): + saved_msg = "saved " + os.path.basename(saved_msg[6:]) + return compact_text(saved_msg, max_chars) + + +def compact_status(status: str) -> str: + if status.startswith("recording "): + return "REC " + status[10:] + if status.startswith("initializing thermal160"): + return "INIT" + status[len("initializing thermal160"):] + if status == "thermal160 device not found": + return "DEVICE NOT FOUND" + return status + + +def draw_hud_corners(canvas, rect): + x0, y0, w, h = rect + n = max(10, min(20, w // 8, h // 4)) + for sx, sy in ((x0, y0), (x0 + w, y0), (x0, y0 + h), (x0 + w, y0 + h)): + dx = 1 if sx == x0 else -1 + dy = 1 if sy == y0 else -1 + cv2.line(canvas, (sx, sy), (sx + dx * n, sy), RGB_CYAN, 1) + cv2.line(canvas, (sx, sy), (sx, sy + dy * n), RGB_CYAN, 1) + + +def finite_range_multi(series_list, start: int, end: int): + lo = None + hi = None + for values in series_list: + for i in range(start, end): + v = values[i] + if not finite(v): + continue + if lo is None or v < lo: + lo = v + if hi is None or v > hi: + hi = v + if lo is None: + return None + if hi <= lo: + lo -= 0.5 + hi += 0.5 + else: + pad = max(0.3, (hi - lo) * 0.10) + lo -= pad + hi += pad + return lo, hi + + +def nice_ticks(lo: float, hi: float, count: int = 4): + if not finite(lo) or not finite(hi) or hi <= lo: + return [] + if count <= 1: + return [lo] + return [lo + (hi - lo) * i / (count - 1) for i in range(count)] + + +def x_label(seconds: float) -> str: + if seconds < 3600.0: + return "%.0fm" % (seconds / 60.0) + return "%.1fh" % (seconds / 3600.0) + + +def draw_axis_ticks(canvas, rect, t0: float, t1: float, left_rng, right_rng): + x0, y0, w, h = rect + for k in range(5): + x = x0 + int(w * k / 4) + cv2.line(canvas, (x, y0), (x, y0 + h), RGB_GRID, 1) + label_t = t0 + (t1 - t0) * k / 4 + draw_text(canvas, x_label(label_t), x - 14, y0 + h + 16, RGB_MUTED, 0.34) + + for tick in nice_ticks(left_rng[0], left_rng[1], 4): + y = y0 + h - 1 - int((tick - left_rng[0]) / (left_rng[1] - left_rng[0]) * (h - 1)) + cv2.line(canvas, (x0, y), (x0 + w, y), RGB_GRID, 1) + draw_text(canvas, fmt_float(tick, 1), max(0, x0 - 42), y + 4, RGB_RED, 0.34) + + if right_rng is not None: + for tick in nice_ticks(right_rng[0], right_rng[1], 4): + y = y0 + h - 1 - int((tick - right_rng[0]) / (right_rng[1] - right_rng[0]) * (h - 1)) + draw_text(canvas, fmt_float(tick, 1), x0 + w + 6, y + 4, RGB_GREEN, 0.34) + + +def draw_series(canvas, rect, times, values, start: int, end: int, + value_range, color, max_points: int): + if value_range is None: + return + x0, y0, w, h = rect + t0 = times[start] + t1 = times[end - 1] + if t1 <= t0: + t1 = t0 + 1.0 + v0, v1 = value_range + step = max(1, int((end - start) / max_points)) + + prev = None + for i in range(start, end, step): + v = values[i] + if not finite(v): + prev = None + continue + x = x0 + int((times[i] - t0) / (t1 - t0) * (w - 1)) + y = y0 + h - 1 - int((v - v0) / (v1 - v0) * (h - 1)) + pt = (x, y) + if prev is not None: + cv2.line(canvas, prev, pt, color, 1) + prev = pt + + +def draw_chart(canvas, rect, history: HistoryStore, window_sec, max_points: int): + x0, y0, w, h = rect + cv2.rectangle(canvas, (x0, y0), (x0 + w, y0 + h), RGB_PANEL, -1) + cv2.rectangle(canvas, (x0, y0), (x0 + w, y0 + h), RGB_GRID, 1) + + if len(history) < 2: + draw_text(canvas, "Waiting for samples...", x0 + 10, y0 + h // 2, RGB_MUTED, 0.55) + return + + end = len(history) + start = 0 + if window_sec is not None: + threshold = history.t[end - 1] - window_sec + while start < end - 1 and history.t[start] < threshold: + start += 1 + + if end - start < 2: + draw_text(canvas, "Waiting for samples...", x0 + 10, y0 + h // 2, RGB_MUTED, 0.55) + return + + left_rng = finite_range_multi([history.fpa, history.ntc], start, end) + right_rng = finite_range_multi([history.scene_mid, history.center], start, end) + if left_rng is None and right_rng is None: + draw_text(canvas, "Waiting for valid temperature samples...", x0 + 10, y0 + h // 2, RGB_MUTED, 0.55) + return + if left_rng is None: + left_rng = right_rng + + plot_rect = (x0 + 48, y0 + 30, w - 96, h - 62) + px, py, pw, ph = plot_rect + cv2.rectangle(canvas, (px, py), (px + pw, py + ph), RGB_BLACK, -1) + + t0 = history.t[start] + t1 = history.t[end - 1] + if t1 <= t0: + t1 = t0 + 1.0 + draw_axis_ticks(canvas, plot_rect, t0, t1, left_rng, right_rng) + + draw_series(canvas, plot_rect, history.t, history.fpa, start, end, left_rng, RGB_RED, max_points) + draw_series(canvas, plot_rect, history.t, history.ntc, start, end, left_rng, RGB_CYAN, max_points) + if right_rng is not None: + draw_series(canvas, plot_rect, history.t, history.scene_mid, start, end, right_rng, RGB_BLUE, max_points) + draw_series(canvas, plot_rect, history.t, history.center, start, end, right_rng, RGB_GREEN, max_points) + + cv2.rectangle(canvas, (px, py), (px + pw, py + ph), RGB_GRID, 1) + + draw_text(canvas, "FPA/NTC C", px, y0 + 18, RGB_RED, 0.42) + draw_text(canvas, "scene/center C", px + pw - 118, y0 + 18, RGB_GREEN, 0.42) + + legend_x = px + 8 + legend_y = py + 18 + legend = [ + ("FPA", latest_valid(history.fpa), RGB_RED), + ("NTC", latest_valid(history.ntc), RGB_CYAN), + ("scene", latest_valid(history.scene_mid), RGB_BLUE), + ("center", latest_valid(history.center), RGB_GREEN), + ] + for label, val, color in legend: + text = "%s %sC" % (label, fmt_float(val, 1)) + draw_text(canvas, text, legend_x, legend_y, color, 0.42) + legend_x += max(74, len(text) * 8) + + span = history.t[end - 1] - history.t[start] + draw_text(canvas, "window %.0f min" % (span / 60.0), px + pw - 104, py + ph - 8, RGB_MUTED, 0.36) + + +def render_preview(canvas, frame, rect, lut, color_buf): + x0, y0, w, h = rect + cv2.rectangle(canvas, (x0, y0), (x0 + w, y0 + h), RGB_PANEL, -1) + if frame is None: + draw_text(canvas, "No frame", x0 + 18, y0 + h // 2, RGB_MUTED, 0.65) + return + + gray = cv2.flip(frame["pixels"], -1) + np.take(lut, gray, axis=0, out=color_buf) + preview = cv2.resize(color_buf, (w, h), interpolation=cv2.INTER_LINEAR) + canvas[y0:y0 + h, x0:x0 + w, :] = preview + cv2.rectangle(canvas, (x0, y0), (x0 + w, y0 + h), RGB_GRID, 1) + + +def draw_status_panel(canvas, rect, sample, csv_path: str, status: str, saved_msg: str): + x0, y0, w, h = rect + cv2.rectangle(canvas, (x0, y0), (x0 + w, y0 + h), RGB_PANEL, -1) + cv2.rectangle(canvas, (x0, y0), (x0 + w, y0 + h), RGB_GRID, 1) + draw_hud_corners(canvas, rect) + + elapsed = "" + if sample is not None: + elapsed = "%.1fh/%.0fh" % (sample["t"] / 3600.0, RUN_TARGET_SEC / 3600.0) + elapsed_w = text_size(elapsed, 0.46, 1)[0] + 10 if elapsed and w >= 250 else 0 + status_text = compact_status(status) + status_text = fit_text_width(status_text, w - elapsed_w - 18, 0.55, 2) + draw_text(canvas, status_text, x0 + 8, y0 + 24, RGB_WHITE, 0.55, 2) + if elapsed_w: + draw_text(canvas, elapsed, x0 + w - elapsed_w + 2, y0 + 24, RGB_MUTED, 0.46) + cv2.line(canvas, (x0 + 8, y0 + 36), (x0 + w - 8, y0 + 36), RGB_GRID, 1) + cv2.line(canvas, (x0 + 8, y0 + 38), (x0 + max(9, w // 3), y0 + 38), RGB_BLUE, 1) + + if sample is None: + draw_text(canvas, fit_text_width("Waiting for samples", w - 18, 0.56, 1), + x0 + 10, y0 + 70, RGB_MUTED, 0.56) + return + + main = "CENTER %sC" % fmt_float(sample["center"], 1) + draw_text(canvas, fit_text_width(main, w - 18, 0.90, 2), x0 + 10, y0 + 74, + RGB_GREEN, 0.90, 2) + + gauge_y = y0 + 84 + gauge_x0 = x0 + 10 + gauge_x1 = x0 + w - 10 + cv2.line(canvas, (gauge_x0, gauge_y), (gauge_x1, gauge_y), RGB_GRID, 1) + if finite(sample["min"]) and finite(sample["max"]) and sample["max"] > sample["min"]: + marker = int((sample["center"] - sample["min"]) / + (sample["max"] - sample["min"]) * (gauge_x1 - gauge_x0)) + marker = max(0, min(gauge_x1 - gauge_x0, marker)) + mx = gauge_x0 + marker + cv2.line(canvas, (gauge_x0, gauge_y), (mx, gauge_y), RGB_GREEN, 2) + cv2.line(canvas, (mx, gauge_y - 4), (mx, gauge_y + 4), RGB_CYAN, 1) + + center_line = "SCENE %sC MIN %sC MAX %sC" % ( + fmt_float(sample["scene_mid"], 1), + fmt_float(sample["min"], 1), + fmt_float(sample["max"], 1), + ) + draw_text(canvas, fit_text_width(center_line, w - 18, 0.43, 1), + x0 + 10, y0 + 106, RGB_MUTED, 0.43) + + telemetry_line = "FPA %sC NTC %sC" % ( + fmt_float(sample["fpa"], 1), + fmt_float(sample["ntc"], 1), + ) + if h >= 122: + draw_text(canvas, fit_text_width(telemetry_line, w - 18, 0.40, 1), + x0 + 10, y0 + 124, RGB_CYAN, 0.40) + + if h >= 142: + msg = fit_text_width(compact_saved_msg(saved_msg, 48), w - 20, 0.36, 1) + if msg: + draw_text(canvas, msg, x0 + 10, y0 + h - 10, RGB_BLUE, 0.36) + + +def render_screen(width: int, height: int, history: HistoryStore, frame, sample, + csv_path: str, status: str, saved_msg: str, lut, color_buf, + back_rect, save_rect): + canvas = np.zeros((height, width, 3), dtype=np.uint8) + canvas[:, :, :] = RGB_BG + + cv2.rectangle(canvas, (back_rect[0], back_rect[1]), + (back_rect[0] + back_rect[2], back_rect[1] + back_rect[3]), RGB_PANEL, -1) + cv2.rectangle(canvas, (save_rect[0], save_rect[1]), + (save_rect[0] + save_rect[2], save_rect[1] + save_rect[3]), RGB_BLUE, -1) + draw_centered_text(canvas, "BACK", back_rect, RGB_WHITE, 0.64, 2) + draw_centered_text(canvas, "SAVE", save_rect, RGB_WHITE, 0.64, 2) + title_x = back_rect[0] + back_rect[2] + 12 + title = fit_text_width("TN160 history", save_rect[0] - title_x - 8, 0.66, 2) + draw_text(canvas, title, title_x, 25, RGB_WHITE, 0.66, 2) + + top = max(back_rect[3], save_rect[3]) + 8 + preview_h = max(112, int((height - top) * 0.40)) + preview_w = max(132, int(width * 0.32)) + if width - preview_w - 24 < 250: + preview_w = max(112, width - 274) + preview_rect = (8, top, preview_w, preview_h) + status_rect = (preview_rect[0] + preview_rect[2] + 8, top, + width - preview_rect[2] - 24, preview_h) + chart_rect = (8, top + preview_h + 8, width - 16, height - top - preview_h - 14) + + render_preview(canvas, frame, preview_rect, lut, color_buf) + draw_status_panel(canvas, status_rect, sample, csv_path, status, saved_msg) + draw_chart(canvas, chart_rect, history, LIVE_WINDOW_SEC, max(120, width * 2)) + return canvas + + +def render_history_png(history: HistoryStore, csv_path: str, path: str) -> bool: + if len(history) < 2: + return False + width, height = 1400, 780 + canvas = np.zeros((height, width, 3), dtype=np.uint8) + canvas[:, :, :] = RGB_BG + draw_text(canvas, "TN160 temperature history", 28, 42, RGB_WHITE, 0.8, 2) + draw_text(canvas, "samples %d elapsed %.2f h csv %s" % + (len(history), history.t[-1] / 3600.0, csv_path), + 28, 76, RGB_MUTED, 0.5) + draw_chart(canvas, (28, 108, width - 56, height - 150), + history, None, max(1000, width * 3)) + + ensure_dir(os.path.dirname(path) or ".") + bgr = cv2.cvtColor(canvas, cv2.COLOR_RGB2BGR) + return bool(cv2.imwrite(path, bgr)) + + +def save_png(history: HistoryStore, csv_path: str): + ensure_dir(OUTPUT_DIR) + path = os.path.join(OUTPUT_DIR, "trend_%s.png" % stamp()) + if render_history_png(history, csv_path, path): + return path + return None + + +def show_error_page(disp, message: str) -> None: + w, h = disp.width(), disp.height() + canvas = np.zeros((h, w, 3), dtype=np.uint8) + canvas[:, :, :] = RGB_BLACK + draw_text(canvas, message, max(8, w // 2 - 150), h // 2, RGB_WHITE, 0.55) + disp.show(image.cv2image(canvas, bgr=False, copy=True)) + + +def main() -> None: + disp = display.Display() + disp.set_hmirror(False) + disp.set_vflip(True) + ts = touchscreen.TouchScreen() + + width, height = disp.width(), disp.height() + button_h = max(32, height // 11) + back_rect = [0, 0, max(68, width // 8), button_h] + save_rect = [width - max(76, width // 7), 0, max(76, width // 7), button_h] + + lut = build_lut() + color_buf = np.zeros((PMOD_H, PMOD_W, 3), dtype=np.uint8) + history = HistoryStore() + serial = None + csv_log = None + + try: + serial = open_thermal_uart() + except Exception as exc: + logger.error("UART init failed: %s", exc) + show_error_page(disp, "thermal160 UART init failed") + time.sleep(3.0) + return + + csv_log = CsvLogger(OUTPUT_DIR) + + buffer = bytearray() + skip = 0 + frame_count = 0 + latest_frame = None + latest_sample = None + last_frame_time = None + last_sample_time = 0.0 + last_draw_time = 0.0 + last_touch_time = 0.0 + saved_msg = "" + t_start = time.time() + + logger.info("History CSV: %s", csv_log.path) + + try: + while not app.need_exit(): + now = time.time() + x, y, pressed = ts.read() + if pressed and now - last_touch_time > 0.35: + last_touch_time = now + if is_in_button(x, y, back_rect): + app.set_exit_flag(True) + break + if is_in_button(x, y, save_rect): + path = save_png(history, csv_log.path) + if path: + saved_msg = "saved " + path + logger.info("Saved trend PNG: %s", path) + else: + saved_msg = "not enough samples" + + chunk = read_uart(serial, UART_BUFFER_SIZE, UART_READ_TIMEOUT_MS) + if chunk: + buffer.extend(bytes(chunk)) + frame, skip, frame_count = drain_latest_frame(buffer, skip, frame_count) + if frame is not None: + latest_frame = frame + last_frame_time = now + + if latest_frame is not None and now - last_sample_time >= SAMPLE_INTERVAL_SEC: + latest_sample = frame_to_sample(latest_frame, now - t_start) + history.append(latest_sample) + csv_log.write(latest_sample) + last_sample_time = now + + if now - last_draw_time >= DISPLAY_REFRESH_SEC: + elapsed = now - t_start + if last_frame_time is None: + if elapsed < STARTUP_GRACE_SEC: + dots = "." * ((int(elapsed * 3.0) % 3) + 1) + status = "initializing thermal160" + dots + else: + status = "thermal160 device not found" + else: + age = now - last_frame_time + if age > 2.0: + status = "no new frame %.1fs" % age + else: + status = "recording %.1ffps" % (frame_count / max(elapsed, 0.001)) + + canvas = render_screen(width, height, history, latest_frame, latest_sample, + csv_log.path, status, saved_msg, lut, color_buf, + back_rect, save_rect) + disp.show(image.cv2image(canvas, bgr=False, copy=True)) + last_draw_time = now + + except Exception as exc: + logger.error("Fatal: %s", exc) + raise + finally: + if csv_log is not None: + try: + csv_log.close() + except Exception: + pass + if serial is not None: + serial.close() + if csv_log is not None and len(history) >= 2: + path = save_png(history, csv_log.path) + if path: + logger.info("Saved exit trend PNG: %s", path) + + +if __name__ == "__main__": + main() From fb49525cddb394e6032be8afce7c0bbbc890dbfc Mon Sep 17 00:00:00 2001 From: Serein_Y Date: Fri, 5 Jun 2026 15:36:19 +0800 Subject: [PATCH 2/2] Revert "Add MaixCam2 Thermal160 reset and history recorder" This reverts commit d2e36ab0e7e9bbc711435cc7a522cdc3fe5e3fce. --- .../C_context/logs/v1.png | Bin 116448 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 projects/maix-thermal160_camera_history/C_context/logs/v1.png diff --git a/projects/maix-thermal160_camera_history/C_context/logs/v1.png b/projects/maix-thermal160_camera_history/C_context/logs/v1.png deleted file mode 100644 index 44ffa4cbb0707c73f0572c3d1713de429286d2ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116448 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