lepton_get_object_temp.py

# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# مثال الحصول على درجة حرارة الجسم باستخدام Lepton
#
# يعرض هذا المثال كيفية الحصول على درجة حرارة جسم ما باستخدام تتبع اللون.

# من خلال إيقاف تشغيل AGC وتعيين نطاق درجة حرارة أقصى وأدنى، يمكنك تحويل Lepton إلى
# مستشعر رائع لرؤية الأجسام ذات درجة حرارة معينة. مع ذلك، فإن FLIR lepton هو
# microbolometer وليس thermophile. لذلك، يحتاج إلى إعادة معايرة نفسه بشكل متكرر (وهو ما يُسمى
# تصحيح المجال المسطح - FFC). بالإضافة إلى ذلك، تتطلب أجهزة microbolometer دعم معالجة
# على اللوحة للتعامل مع تأثيرات انحراف درجة الحرارة، وهو ما يُسمى دعم radiometry.

# ملاحظة حول غالق FLIR Lepton: ستقوم أجهزة FLIR Lepton المزودة بـ radiometry وغالق (shutter) بإيقاف الفيديو مؤقتاً بشكل متكرر
# أثناء تسخينها لإعادة المعايرة. سيحدث هذا بشكل أقل تدريجياً مع استقرار درجة حرارة المستشعر
# بمرور الوقت. يمكنك إجبار عدم حدوث إعادة المعايرة إذا لزم الأمر عبر واجهة برمجة lepton API.
# ومع ذلك، لا يُنصح بذلك لأن جودة الصورة ستتدهور بمرور الوقت.

# إذا كنت تستخدم LEPTON غير Lepton 3.5 فقد لا يعمل هذا البرنامج النصي بشكل مثالي لأن أجهزة
# lepton الأخرى لا تحتوي على دعم radiometry أو لا تقوم بتفعيل عملية المعايرة بشكل متكرر
# بما يكفي للتعامل مع تغيرات درجة الحرارة (FLIR 2.5).

import csi
import time

# عتبات تتبع اللون (الحد الأدنى لتدرج الرمادي، الحد الأقصى لتدرج الرمادي)
threshold_list = [(200, 255)]

# قم بتعيين نطاق درجة الحرارة المستهدف هنا
min_temp_in_celsius = 20.0
max_temp_in_celsius = 40.0

# تهيئة المستشعر.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)

# تفعيل وضع القياس
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, 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)))

# فقط البقع (blobs) التي تحتوي على بكسلات أكثر من "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))
    )

results matching ""

    No results matching ""