lepton_get_object_high_temp.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Leptonで高温物体を取得する例
#
# この例では、カラートラッキングを使って物体の温度を取得する方法を示します。
# AGCをオフにして最大・最小の温度範囲を設定することで、Leptonを
# 特定の温度の物体を検出するのに優れたセンサーにすることができます。ただし、FLIR Leptonは
# マイクロボロメータであり、サーモパイルではありません。そのため頻繁に自己校正が必要です(これは
# フラットフィールド補正 - FFCと呼ばれます)。さらに、マイクロボロメータデバイスは
# 温度ドリフトの影響に対処するためのオンボード処理(ラジオメトリサポートと呼ばれます)を必要とします。
# FLIR Leptonシャッターに関する注意: ラジオメトリとシャッターを備えたFLIR Leptonは、再校正のために
# 温度が上昇するとしばしば映像を一時停止します。これはセンサー温度が安定するにつれて
# 徐々に少なくなります。必要であれば、lepton APIを使って再校正を強制的に無効にすることもできます。
# ただし、時間の経過とともに画質が劣化するため推奨されません。
# Lepton 3.5以外のLEPTONを使用している場合、このスクリプトは正しく動作しない可能性があります。他の
# Leptonにはラジオメトリサポートがなかったり、温度変化に対応するために十分な頻度で
# 校正処理を実行しなかったりするためです(FLIR 2.5など)。
import csi
import time
# カラートラッキングのしきい値(Grayscale Min, Grayscale Max)
threshold_list = [(100, 255)] # 非常に高温な物体を追跡します
# ここでターゲットの温度範囲を設定します
# 500℃はLepton 3.5センサーが測定できる最大値です
# 室温では最大値は約380℃です
min_temp_in_celsius = 0.0
max_temp_in_celsius = 400.0
# センサーを初期化します。
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)
# 高温用の測定モードを有効にします
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, True)
csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)
# フレームをスキップします
csi0.snapshot(time=5000)
clock = time.clock()
print("Radiometry: " + "Yes" if csi0.ioctl(csi.IOCTL_LEPTON_GET_RADIOMETRY) else "No")
print("Resolution: %dx%d" % (csi0.ioctl(csi.IOCTL_LEPTON_GET_WIDTH), csi0.ioctl(csi.IOCTL_LEPTON_GET_HEIGHT)))
# ピクセル数が"pixel_threshold"より多く、面積が"area_threshold"より大きいブロブのみが
# 以下の"find_blobs"によって返されます。カメラの解像度を変更する場合は
# "pixels_threshold"と"area_threshold"を変更してください。"merge=True"にすると画像内の重なり合うブロブがすべて統合されます。
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 = csi0.snapshot()
for blob in img.find_blobs(
threshold_list, pixels_threshold=200, area_threshold=200, merge=True
):
stats = img.get_statistics(thresholds=threshold_list, roi=blob.rect)
img.draw_detection(blob, label="%.2f C" % map_g_to_temp(stats.mean))
print(
"FPS %f - Lepton Temp: %f C"
% (clock.fps(), csi0.ioctl(csi.IOCTL_LEPTON_GET_FPA_TEMP))
)