diff --git a/scripts/examples/27-Lepton/lepton_get_object_temp.py b/scripts/examples/27-Lepton/lepton_get_object_temp.py new file mode 100644 index 000000000..0b5e93dde --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_get_object_temp.py @@ -0,0 +1,58 @@ +# Lepton Get Object Temp Example +# +# This example shows off how to get an object's temperature using color tracking. + +# By turning the AGC off and setting a max and min temperature range you can make the lepton into +# a great sensor for seeing objects of a particular temperature. That said, the FLIR lepton is a +# microblobometer and not a thermophile. So, it needs to re-calibrate itself often (which is called +# flat-field-correction - FFC). Additionally, microblobmeter devices require pprocessing support +# onboard to deal with the effects of temperature drift which is called radiometry support. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +# If you are using a LEPTON other than the Lepton 3.5 this script may not work perfectly as other +# leptons don't have radiometry support or they don't activate their calibration process often +# enough to deal with temperature changes (FLIR 2.5). + +import sensor, image, time, math + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(200, 255)] + +# Set the target temp range here +min_temp_in_celsius = 20.0 +max_temp_in_celsius = 35.0 + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True) +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius) +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time=5000) +clock = time.clock() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +def map_g_to_temp(g): + return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + stats = img.get_statistics(thresholds=threshold_list, roi=blob.rect()) + img.draw_string(blob.x(), blob.y() - 10, "%.2f C" % map_g_to_temp(stats.mean()), mono_space=False) + print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE))) diff --git a/scripts/examples/27-Lepton/lepton_get_object_temp_color.py b/scripts/examples/27-Lepton/lepton_get_object_temp_color.py new file mode 100644 index 000000000..2cd2c5406 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_get_object_temp_color.py @@ -0,0 +1,66 @@ +# Lepton Get Object Temp Example +# +# This example shows off how to get an object's temperature using color tracking. + +# By turning the AGC off and setting a max and min temperature range you can make the lepton into +# a great sensor for seeing objects of a particular temperature. That said, the FLIR lepton is a +# microblobometer and not a thermophile. So, it needs to re-calibrate itself often (which is called +# flat-field-correction - FFC). Additionally, microblobmeter devices require pprocessing support +# onboard to deal with the effects of temperature drift which is called radiometry support. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +# If you are using a LEPTON other than the Lepton 3.5 this script may not work perfectly as other +# leptons don't have radiometry support or they don't activate their calibration process often +# enough to deal with temperature changes (FLIR 2.5). + +import sensor, image, time, math + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(200, 255)] + +# Set the target temp range here +min_temp_in_celsius = 20.0 +max_temp_in_celsius = 35.0 + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True) +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius) +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time=5000) +clock = time.clock() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +def map_g_to_temp(g): + return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius + +while(True): + clock.tick() + img = sensor.snapshot() + blob_stats = [] + blobs = img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True) + # Collect stats into a list of tuples + for blob in blobs: + blob_stats.append((blob.x(), blob.y(), map_g_to_temp(img.get_statistics(thresholds=threshold_list, + roi=blob.rect()).mean()))) + img.to_rainbow(color_palette=sensor.PALETTE_IRONBOW) # color it + # Draw stuff on the colored image + for blob in blobs: + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + for blob_stat in blob_stats: + img.draw_string(blob_stat[0], blob_stat[1] - 10, "%.2f C" % blob_stat[2], mono_space=False) + print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE))) diff --git a/scripts/examples/27-Lepton/lepton_get_object_temp_color_lcd.py b/scripts/examples/27-Lepton/lepton_get_object_temp_color_lcd.py new file mode 100644 index 000000000..f7d389b57 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_get_object_temp_color_lcd.py @@ -0,0 +1,68 @@ +# Lepton Get Object Temp Example +# +# This example shows off how to get an object's temperature using color tracking. + +# By turning the AGC off and setting a max and min temperature range you can make the lepton into +# a great sensor for seeing objects of a particular temperature. That said, the FLIR lepton is a +# microblobometer and not a thermophile. So, it needs to re-calibrate itself often (which is called +# flat-field-correction - FFC). Additionally, microblobmeter devices require pprocessing support +# onboard to deal with the effects of temperature drift which is called radiometry support. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +# If you are using a LEPTON other than the Lepton 3.5 this script may not work perfectly as other +# leptons don't have radiometry support or they don't activate their calibration process often +# enough to deal with temperature changes (FLIR 2.5). + +import sensor, image, time, math, lcd + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(200, 255)] + +# Set the target temp range here +min_temp_in_celsius = 20.0 +max_temp_in_celsius = 35.0 + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True) +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius) +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.LCD) +sensor.skip_frames(time=5000) +clock = time.clock() +lcd.init() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +def map_g_to_temp(g): + return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius + +while(True): + clock.tick() + img = sensor.snapshot() + blob_stats = [] + blobs = img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True) + # Collect stats into a list of tuples + for blob in blobs: + blob_stats.append((blob.x(), blob.y(), map_g_to_temp(img.get_statistics(thresholds=threshold_list, + roi=blob.rect()).mean()))) + img.to_rainbow(color_palette=sensor.PALETTE_IRONBOW) # color it + # Draw stuff on the colored image + for blob in blobs: + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + for blob_stat in blob_stats: + img.draw_string(blob_stat[0], blob_stat[1] - 10, "%.2f C" % blob_stat[2], mono_space=False) + lcd.display(img) + print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE))) diff --git a/scripts/examples/27-Lepton/lepton_get_object_temp_lcd.py b/scripts/examples/27-Lepton/lepton_get_object_temp_lcd.py new file mode 100644 index 000000000..6a619f279 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_get_object_temp_lcd.py @@ -0,0 +1,60 @@ +# Lepton Get Object Temp Example +# +# This example shows off how to get an object's temperature using color tracking. + +# By turning the AGC off and setting a max and min temperature range you can make the lepton into +# a great sensor for seeing objects of a particular temperature. That said, the FLIR lepton is a +# microblobometer and not a thermophile. So, it needs to re-calibrate itself often (which is called +# flat-field-correction - FFC). Additionally, microblobmeter devices require pprocessing support +# onboard to deal with the effects of temperature drift which is called radiometry support. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +# If you are using a LEPTON other than the Lepton 3.5 this script may not work perfectly as other +# leptons don't have radiometry support or they don't activate their calibration process often +# enough to deal with temperature changes (FLIR 2.5). + +import sensor, image, time, math, lcd + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(200, 255)] + +# Set the target temp range here +min_temp_in_celsius = 20.0 +max_temp_in_celsius = 35.0 + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True) +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius) +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.LCD) +sensor.skip_frames(time=5000) +clock = time.clock() +lcd.init() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +def map_g_to_temp(g): + return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + stats = img.get_statistics(thresholds=threshold_list, roi=blob.rect()) + img.draw_string(blob.x(), blob.y() - 10, "%.2f C" % map_g_to_temp(stats.mean()), mono_space=False) + lcd.display(img) + print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE))) diff --git a/scripts/examples/27-Lepton/lepton_hotspot_grayscale_color_tracking.py b/scripts/examples/27-Lepton/lepton_hotspot_grayscale_color_tracking.py new file mode 100644 index 000000000..36127724a --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_hotspot_grayscale_color_tracking.py @@ -0,0 +1,37 @@ +# Single Color Grayscale Blob Tracking Example +# +# This example shows off single color grayscale tracking using the OpenMV Cam using the FLIR LEPTON. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +import sensor, image, time, math + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(220, 255)] + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time=5000) +clock = time.clock() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect(), color=127) + img.draw_cross(blob.cx(), blob.cy(), color=127) + print(clock.fps()) diff --git a/scripts/examples/27-Lepton/lepton_hotspot_grayscale_color_tracking_lcd.py b/scripts/examples/27-Lepton/lepton_hotspot_grayscale_color_tracking_lcd.py new file mode 100644 index 000000000..c642da053 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_hotspot_grayscale_color_tracking_lcd.py @@ -0,0 +1,39 @@ +# Single Color Grayscale Blob Tracking Example +# +# This example shows off single color grayscale tracking using the OpenMV Cam using the FLIR LEPTON. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +import sensor, image, time, math, lcd + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(220, 255)] + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.LCD) +sensor.skip_frames(time=5000) +clock = time.clock() +lcd.init() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect(), color=127) + img.draw_cross(blob.cx(), blob.cy(), color=127) + lcd.display(img) + print(clock.fps()) diff --git a/scripts/examples/27-Lepton/lepton_hotspot_rgb565_color_tracking.py b/scripts/examples/27-Lepton/lepton_hotspot_rgb565_color_tracking.py new file mode 100644 index 000000000..3bab9b536 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_hotspot_rgb565_color_tracking.py @@ -0,0 +1,39 @@ +# Single Color RGB565 Blob Tracking Example +# +# This example shows off single color RGB565 tracking using the OpenMV Cam using the FLIR LEPTON. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +import sensor, image, time, math + +# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max) +threshold_list = [( 70, 100, -30, 40, 20, 100)] + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) +# Make the color palette cool +sensor.set_color_palette(sensor.PALETTE_IRONBOW) + +sensor.set_pixformat(sensor.RGB565) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time=5000) +clock = time.clock() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + print(clock.fps()) diff --git a/scripts/examples/27-Lepton/lepton_hotspot_rgb565_color_tracking_lcd.py b/scripts/examples/27-Lepton/lepton_hotspot_rgb565_color_tracking_lcd.py new file mode 100644 index 000000000..2ca9d9043 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_hotspot_rgb565_color_tracking_lcd.py @@ -0,0 +1,41 @@ +# Single Color RGB565 Blob Tracking Example +# +# This example shows off single color RGB565 tracking using the OpenMV Cam using the FLIR LEPTON. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +import sensor, image, time, math, lcd + +# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max) +threshold_list = [( 70, 100, -30, 40, 20, 100)] + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) +# Make the color palette cool +sensor.set_color_palette(sensor.PALETTE_IRONBOW) + +sensor.set_pixformat(sensor.RGB565) +sensor.set_framesize(sensor.LCD) +sensor.skip_frames(time=5000) +clock = time.clock() +lcd.init() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + lcd.display(img) + print(clock.fps()) diff --git a/scripts/examples/27-Lepton/lepton_target_temp_hotspot_grayscale_color_tracking.py b/scripts/examples/27-Lepton/lepton_target_temp_hotspot_grayscale_color_tracking.py new file mode 100644 index 000000000..c5ffa1a51 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_target_temp_hotspot_grayscale_color_tracking.py @@ -0,0 +1,53 @@ +# Single Color Grayscale Blob Tracking Example +# +# This example shows off single color grayscale tracking using the OpenMV Cam using the FLIR LEPTON. + +# By turning the AGC off and setting a max and min temperature range you can make the lepton into +# a great sensor for seeing objects of a particular temperature. That said, the FLIR lepton is a +# microblobometer and not a thermophile. So, it needs to re-calibrate itself often (which is called +# flat-field-correction - FFC). Additionally, microblobmeter devices require pprocessing support +# onboard to deal with the effects of temperature drift which is called radiometry support. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +# If you are using a LEPTON other than the Lepton 3.5 this script may not work perfectly as other +# leptons don't have radiometry support or they don't activate their calibration process often +# enough to deal with temperature changes (FLIR 2.5). + +import sensor, image, time, math + +# Color Tracking Thresholds (Grayscale Min, Grayscale Max) +threshold_list = [(220, 255)] + +# Set the target temp range here +min_temp_in_celsius = 20 +max_temp_in_celsius = 32 + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True) +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius) +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) + +sensor.set_pixformat(sensor.GRAYSCALE) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time=5000) +clock = time.clock() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect(), color=127) + img.draw_cross(blob.cx(), blob.cy(), color=127) + print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE))) diff --git a/scripts/examples/27-Lepton/lepton_target_temp_hotspot_rgb565_color_tracking.py b/scripts/examples/27-Lepton/lepton_target_temp_hotspot_rgb565_color_tracking.py new file mode 100644 index 000000000..7ce91a823 --- /dev/null +++ b/scripts/examples/27-Lepton/lepton_target_temp_hotspot_rgb565_color_tracking.py @@ -0,0 +1,55 @@ +# Single Color RGB565 Blob Tracking Example +# +# This example shows off single color RGB565 tracking using the OpenMV Cam using the FLIR LEPTON. + +# By turning the AGC off and setting a max and min temperature range you can make the lepton into +# a great sensor for seeing objects of a particular temperature. That said, the FLIR lepton is a +# microblobometer and not a thermophile. So, it needs to re-calibrate itself often (which is called +# flat-field-correction - FFC). Additionally, microblobmeter devices require pprocessing support +# onboard to deal with the effects of temperature drift which is called radiometry support. + +# FLIR Lepton Shutter Note: FLIR Leptons with radiometry and a shutter will pause the video often +# as they heatup to re-calibrate. This will happen less and less often as the sensor temperature +# stablizes. You can force the re-calibration to not happen if you need to via the lepton API. +# However, it is not recommended because the image will degrade overtime. + +# If you are using a LEPTON other than the Lepton 3.5 this script may not work perfectly as other +# leptons don't have radiometry support or they don't activate their calibration process often +# enough to deal with temperature changes (FLIR 2.5). + +import sensor, image, time, math + +# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max) +threshold_list = [( 70, 100, -30, 40, 20, 100)] + +# Set the target temp range here +min_temp_in_celsius = 20 +max_temp_in_celsius = 32 + +print("Resetting Lepton...") +# These settings are applied on reset +sensor.reset() +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True) +sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius) +print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH), + sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT))) +print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No")) +# Make the color palette cool +sensor.set_color_palette(sensor.PALETTE_IRONBOW) + +sensor.set_pixformat(sensor.RGB565) +sensor.set_framesize(sensor.QQVGA) +sensor.skip_frames(time=5000) +clock = time.clock() + +# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are +# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the +# camera resolution. "merge=True" merges all overlapping blobs in the image. + +while(True): + clock.tick() + img = sensor.snapshot() + for blob in img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_rectangle(blob.rect()) + img.draw_cross(blob.cx(), blob.cy()) + print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE)))