thermal_overlay.py
# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Demostración de superposición térmica
#
# Este ejemplo muestra cómo superponer un mapa de calor sobre la salida de video en vivo de
# la cámara principal de su OpenMV Cam.
import csi
import image
import time
import fir
# o image.BILINEAR o 0 (vecino más cercano)
drawing_hint = image.BICUBIC | image.CENTER | image.SCALE_ASPECT_KEEP
ALT_OVERLAY = False # Establézcalo en True para asignar una segunda imagen infrarroja.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)
# Inicializa el sensor térmico
fir.init()
# Asigna otro framebuffer para un video más fluido.
extra_fb = image.Image(csi0.width(), csi0.height(), csi0.pixformat())
# Reloj de FPS
clock = time.clock()
while True:
clock.tick()
# Captura una imagen
img = csi0.snapshot()
# Captura los datos FIR
# ta: Temperatura ambiente
# ir: Temperaturas de los objetos (matriz IR)
# to_min: Temperatura mínima del objeto
# to_max: Temperatura máxima del objeto
try:
ta, ir, to_min, to_max = fir.read_ir()
except OSError:
continue
if not ALT_OVERLAY:
# Escala la imagen y la combina con el framebuffer
fir.draw_ir(img, ir, hint=drawing_hint)
else:
# Crea una imagen secundaria y luego la combina con el framebuffer.
extra_fb.clear()
fir.draw_ir(extra_fb, ir, hint=drawing_hint)
img.blend(extra_fb, alpha=128)
# Dibuja las temperaturas ambiente, mínima y máxima.
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
)
# Forzar streaming de alta calidad...
img.to_jpeg(quality=90)
# Imprime los FPS.
print(clock.fps())