From 894b76a41c9567734a8ca38564b7357eeffc1bf7 Mon Sep 17 00:00:00 2001 From: mattdawson Date: Thu, 16 Apr 2020 11:51:31 +1200 Subject: [PATCH] Demo sample for applying palettes with drawimage and smoothing --- .../MLX90640_overlay_smoothed.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 scripts/examples/12-Thermopile-Shield/MLX90640_overlay_smoothed.py diff --git a/scripts/examples/12-Thermopile-Shield/MLX90640_overlay_smoothed.py b/scripts/examples/12-Thermopile-Shield/MLX90640_overlay_smoothed.py new file mode 100644 index 000000000..04c004281 --- /dev/null +++ b/scripts/examples/12-Thermopile-Shield/MLX90640_overlay_smoothed.py @@ -0,0 +1,60 @@ +# MLX90640 Overlay Demo with ir smoothing +# +# This example shows off how to overlay a smoothed heatmap onto your OpenMV Cam's +# live video output from the main camera. + +import sensor, image, time, fir + +IR_SCALE = 4 + +sensor.reset() +sensor.set_pixformat(sensor.RGB565) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time = 2000) + +# Initialize the thermal sensor +fir.init(type=fir.FIR_MLX90640, refresh=16) # Hz (higher end OpenMV Cam's may be able to run faster) + +# Allocate another frame buffer for smoother video. +ir_buffer = image.Image(fir.width() * IR_SCALE, fir.height() * IR_SCALE, sensor.GRAYSCALE) + +x_scale = sensor.width() / ir_buffer.width() +y_scale = sensor.height() / ir_buffer.height() + +# FPS clock +clock = time.clock() + +while (True): + clock.tick() + + # Capture an image + img = sensor.snapshot() + + # Capture FIR data + # ta: Ambient temperature + # ir: Object temperatures (IR array) + # to_min: Minimum object temperature + # to_max: Maximum object temperature + ta, ir, to_min, to_max = fir.read_ir() + + # Create a secondary image and then blend into the frame buffer. + + # Convert FIR data to a grayscale image and scale + fir.draw_ir(ir_buffer, ir, alpha=256) + + # Smooth the scaled image + ir_buffer.mean(IR_SCALE-1) + + # Convert the grayscale FIR image to color using a palette and combine with camera image + img.draw_image(ir_buffer, 0, 0, x_scale=x_scale, y_scale=y_scale, alpha=128, color_palette=sensor.PALETTE_IRONBOW) + + # Draw ambient, min and max temperatures. + img.draw_string(8, 0, "Ta: %0.2f C" % ta, color = (255, 0, 0), mono_space = False) + img.draw_string(8, 8, "To min: %0.2f C" % to_min, color = (255, 0, 0), mono_space = False) + img.draw_string(8, 16, "To max: %0.2f C"% to_max, color = (255, 0, 0), mono_space = False) + + # Force high quality streaming... + img.compress(quality=90) + + # Print FPS. + print(clock.fps())