Тут больше вопрос финансов, а не детей. Думаю выкроить пару неделек для себя любимого всегда можно без особых проблем.
Если финансы позволяют, есть очень много коротких, но хорошо организованных и насыщенных туров. Та даже если не позволяют, есть куча бюджетных вариантов. Было бы желание.
Radiometry enabled, TLinear enabled (default for Lepton 2.5 and 3.5)
• Radiometry enabled, TLinear disabled
• Radiometry disabled
3.5.1 Radiometry Enabled — TLinear
The radiometry enabled mode affects the transfer function between incident flux (scene temperature) and pixel
output. From an image-quality standpoint, both radiometry modes produce nearly identical performance (no
change in NEDT), and either mode is appropriate for strict imaging applications. However, for applications in
which temperature measurement is required, radiometry must be enabled to access the related calibration and
software features, such as TLinear and Spotmeter, which support these measurements. In radiometry enabled
mode, enabling the corresponding TLinear mode changes the pixel output from representing scene flux in 14-bit
digital counts to representing scene temperature values in Kelvin (multiplied by a scale factor to include
decimals). For example, with TLinear mode enabled with a resolution of 0.01, a pixel value of 30000 signifies that
the pixel is measuring 26.85°C (300.00K – 273.15K). The Lepton with Radiometry configuration is intended as a
fully radiometric camera; therefore, the factory defaults are defined to have both radiometry and TLinear modes
enabled.
Хочу заметить, что это все касается самого термомодуля, а не его обвязки под USB/SPI.
Сомневаюсь что тот контроллер что-то там конвертирует, кроме как поддержку USB.
Вот, например, питоновский модуль для работы с лептоном по SPI github.com/groupgets/pylepton
Ну что значит не напрямую. Я использую вот такую обвязку www.sparkfun.com/products/14670, она же умеет и в SPI. Принципиальной разницы как получать RAW через SPI или usb нету, данные одинаковые. Там, кстати, питновские примеры из api как раз под SPI все, я переделывал под USB. Принципиально там отличие только пару строчек получения картинки с камеры, остальной код будет тот же.
Там их обвязок куча разных, можно хоть к камере подпаяться, мне просто через USB удобнее.
Я не знаю как от модели к модели, но моя отдает сразу матрицу со значениями температур. Вроде в прошлых версиях было иначе, но мой модуль от Flir One Pro версии Lepton 3.5.
Вот мой рабочий код, который снимает картинку и выводит значения температур для каждого 15 пикселя, если он выше 30 градусов.
Получение изображения с модуля lepton через USB с преобразованием температур
import clr # needs the "pythonnet" package
import sys
import os
import time
import platform
import time
import numpy
from matplotlib import pyplot as plt
from collections import deque
from matplotlib import cm
clr.AddReference("LeptonUVC")
clr.AddReference("ManagedIR16Filters")
from Lepton import CCI
from IR16Filters import IR16Capture, NewIR16FrameEvent, NewBytesFrameEvent
def short_array_to_numpy(height, width, frame):
return numpy.fromiter(frame, dtype="uint16").reshape(height, width)
def centikelvin_to_celsius(t):
return (t - 27315) / 100
found_device = None
for device in CCI.GetDevices():
if device.Name.startswith("PureThermal"):
found_device = device
break
if not found_device:
sys.exit("Couldn't find lepton/ device")
else:
lep = found_device.Open()
#print(lep.oem.GetSoftwareVersion())
#print(lep.sys.GetCameraUpTime())
lep.sys.RunFFCNormalization()
capture = None
def show_ir_frame(net_array, width, height):
numpy_array = short_array_to_numpy(height, width, net_array)
plt.clf()
for y in range(height):
for x in range(width):
raw_temp = numpy_array[y][x]
temp_cel = centikelvin_to_celsius(raw_temp)
if y % 15 == 0 and x % 15 == 0:
if temp_cel > 30:
plt.text(x + 1, y + 1, str(temp_cel), va='center', ha='center')
#print(str(temp_cel)+" ", end = '')
raw_max = numpy_array.max()
max_temp = centikelvin_to_celsius(raw_max)
print(max_temp)
plt.imshow(numpy_array, cmap=cm.plasma)
plt.imsave('outfile.jpg',numpy_array)
plt.show(block=False)
plt.pause(10)
incoming_frames = deque(maxlen=10)
def got_a_frame(short_array, width, height):
incoming_frames.append((height, width, short_array))
capture = IR16Capture()
capture.SetupGraphWithBytesCallback(NewBytesFrameEvent(got_a_frame))
capture.RunGraph()
while True:
if len(incoming_frames) > 0:
height, width, net_array = incoming_frames[-1]
show_ir_frame(net_array, width, height)
Файлы которые должны быть в корне скрипта (взять из Lepton CCI SDK)
LeptonUVC.dll
LeptonUVC.xml
ManagedIR16Filters.dll
TIFFfile.dll
Правда как делать калибровку и добиться точности как в статье, я пока не придумал. Из чего сделать эталон. Сейчас у меня она на моей морде лица плавает +- 1-3 градуса.
Кстати пробовал скармливать вывод с лептона нейросети, думал оно распознает лицо и через какой-то dlib ловить то самое место в уголке глаза, но они не понимают тепловой профиль. Надо или переобучать сеть на тепловизионные снимки или получать изображение еще обычной камерой и совмещать.
Термин «выгорание» это не про недельный отпуск, это гораздо более серьезная проблема и так она не решается. Это больше больше к диагнозу Астения.
По себе знаю, что это такое. В один момент пришлось уйти и не вернуться. Не смотря на все перспективы и заработки. Хорошо что подушка многолетняя, была бы она на месяц-два даже не знаю, что бы делал.
Но ни о чем не жалею. Здоровье оно важнее.
К слову, мой совет, отдых с коктейлем у моря/океана от выгорания не спасёт. А вот жесткое глубокое погружение в нетуристическую среду, в идеале иной культуры (Азия, например), отлично помогает сделать перезагрузку. Сюда же всякие нестандартные походы, полеты, плавания… Главное чтобы мозг не переставал офигевать от новых видов, вкусов, запахов, ощущений.
Интересно, но много общей информации и ни какой технической конкретики. Например какие модули используются для определения температуры.
К слову, сейчас для себя открыл вот такой набор тепловизионной камеры: www.sparkfun.com/products/14670 + www.sparkfun.com/products/16465 (у китайцев дешевле)
У меня банально сломался тепловизор Flir One Pro, и я вытащил из него модуль, докупил плату управления и получил возможность программно снимать картинку с тепловизионной камеры.
Сейчас делаю just for fun определение температуры людей в поле зрения тепловизионной камеры, и вот интересно было бы почитать как на практике происходит калибровка и достигается такая точность измерений.
В точку! Так и есть. При чем, скажу больше, Андроид и iPad версии отличаются, и значительно. Вообще ни когда не понимал, почему такая корпорация не может сделать нормальное, универсальное приложение. Добавить функций, например поиск по комментариям, их перевод.
Кстати для mega.nz есть под питон удобная библиотека для заливки. Я вот буквально на днях на ней настроил заливку бакапов на бесплатные аккаунты. В фришные 50 Гб у меня помещается ежедневный бакап за 2 недели. Потом циклично удаляются все старые файлы.
Вообще бесплатно, просто и универсально.
Вот мой код, мож кому пригодится.
mega_upload.py
import os,sys
from mega import Mega
from datetime import datetime
import logging
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
if len(sys.argv) > 1:
upload_path = sys.argv[1]
else:
upload_path = "D:\\BAK\\test.txt"
upload_filename = os.path.basename(upload_path)
upload_filesize = os.stat(upload_path).st_size
file_exists = False
print("Uploading path: {} Size: {} ".format(upload_path, upload_filesize))
email = 'xxx@xxx.com'
password = '342143432'
mega = Mega()
m = mega.login(email, password)
details = m.get_user()
print(details)
files = m.get_files()
storage_space = m.get_storage_space()
print((m.get_quota()))
print(storage_space)
for file in files: #читаем список файлов и проверяем нет ли дубликатов, а также удаляем все файлы , залитые позже 14 дней назад
if 's' in files[file]:
file_size = files[file]['s']
name = files[file]['a']['n']
ts = files[file]['ts']
day_diff = (datetime.now() - datetime.fromtimestamp(ts)).days
print("File: {} Size: {} Date: {} [{} days]".format(name, file_size, datetime.fromtimestamp(ts), day_diff,))
if day_diff > 14:
m.delete(file)
print(" ******* ===> deleting file " + name)
if upload_filename == name:
file_exists = True
m.empty_trash() #очищаем корзину
if file_exists:
print("*** ALREADY EXISTS:" + upload_filename)
else:
free_space = storage_space['total']-storage_space['used']
print("Total: {} Used: {} Free: {}".format(storage_space['total'], storage_space['used'], free_space))
if upload_filesize > free_space:
print("NOT ENOUGH SPACE:" + name)
else:
print("ALL OK, UPLOADING ..." + upload_path)
remote_filesize = 0
upload_retry = 0
while remote_filesize != upload_filesize and upload_retry < 2: #проверяем , залился ли файл и совпадает ли размер
try:
res = m.upload(filename=upload_path, dest_filename=upload_filename)
if 'f' in res:
if len(res['f']) > 0:
if 's' in res['f'][0]:
remote_filesize = res['f'][0]['s']
except:
print("upload error! path: "+upload_path+" name: "+upload_filename)
upload_retry += 1
print("Done")
Ну и батник запуска
set MYDATE=%date%
"C:\Program Files\7-Zip\"7z.exe a -xr@exclude.txt -ssw -pMyPassword D:\BAK\1C\1C8_%MYDATE%.7z E:\DATA\1C
"C:\Program Files (x86)\Python"\python.exe mega_upload.py D:\BAK\1C\1C8_%MYDATE%.7z
в файл exclude.txt запихиваем в столбик ненужные расширения, например *.zip
прописываем его в планировщик и имеем простой, ежедневный бакап папки в бесплатное облако
У нас, например, Western Digital My Cloud Home 4TB стоит около 200 долл, а ценник на 4TB 2.5 " около 150 долл. Но эти вещи решают разные задачи. Смотря что нужно — раз в год скопировать данные и закинуть их в безопасное место или иметь постоянный доступ для ежедненвного бакапа.
Доступ извне, к слову, работает так себе. Прога для заливки, что под андроид, работает коряво. Нету ни какой информативности о том, что происходит и что оно там делает. Думал из отпуска заливать фотки с телефона, но не тут то было, по сути бестолковая вещь. Но может не разобрался до конца. Проплатил нормальное облако от гугла.
Есть бюджено-дешевый My WD cloud. Стоит по цене чуть дороже харда того же объема, зато своё облако из коробки с возможностью доступа извне.
А будучи подключенным к сети, обеспечивает скорость около 80 МБ/сек.
Собственно человеческий мозг сработает также. В зависимости от полученного опыта, каждый увидит что-то своё.
Сложно требовать от компьютерного зрения результатов, лучше, чем человеческий мозг.
Я использовал эту библиотеку github.com/abewley/sort
работала у меня и на PyTorch (Detectron2) и на TensorFlow (Mask_RCNN) для определения движущихся объектов на потоке с камеры.
Но спасибо за объяснение того, как оно реально работает. Полезно.
Раньше были обложки на тетрадки, где из шума надо было выделить изображение. Сначала фокусируешься на палец, а потом на изображение. Нечто похожее, но ни одного примера найти не могу. Неужели эти изображения канули в лета.
А какие есть варианты со своим собственным сервером? У Remote Utilities, как я понимаю, есть возможность использовать свой хост сервер, но серверная часть почему-то только под Windows
Да и вообще весь лог проекта hackaday.io/project/159615/logs человек свой тепловизор собрал. Тут репозитарий github.com/danjulio, много полезного кода, особенно вот github.com/danjulio/firecam/blob/master/firmware/components/lepton/lepton_utilities.c где как раз пересчет по вашей формуле.
Правда не знаю зачем он так заморочился. Я себе заказал тач дисплей под raspberry 3, подключу через USB будет самодельный тепловизор. А дальше сохранять в jpeg и можно открывать через Flir Tools.
Если финансы позволяют, есть очень много коротких, но хорошо организованных и насыщенных туров. Та даже если не позволяют, есть куча бюджетных вариантов. Было бы желание.
Это даташит к моему модулю www.sparkfun.com/products/16465
Хочу заметить, что это все касается самого термомодуля, а не его обвязки под USB/SPI.
А вот тут упоминается ваша формула cdn.sparkfun.com/assets/d/4/d/6/c/Getting-Started-Guide-16465-FLiR_Lepton_8760_-_Thermal_Imaging_Module.pdf при работе в режиме с выключенным TLinear.
Так понимаю в некоторых версиях этот режим включен по дефолту и в RAW уже отдается непосредственно преобразованная температура.
Вот, например, питоновский модуль для работы с лептоном по SPI github.com/groupgets/pylepton
Там такой же код:
по идее можно также делать…
и дальше numpy_array[x][y] получаем значения градусов в конкретной точке в кельвинах. Можно проверить взяв любой jpeg с тепловизора, снятого по SPI.
Там их обвязок куча разных, можно хоть к камере подпаяться, мне просто через USB удобнее.
Вот мой рабочий код, который снимает картинку и выводит значения температур для каждого 15 пикселя, если он выше 30 градусов.
Файлы которые должны быть в корне скрипта (взять из Lepton CCI SDK)
LeptonUVC.dll
LeptonUVC.xml
ManagedIR16Filters.dll
TIFFfile.dll
Правда как делать калибровку и добиться точности как в статье, я пока не придумал. Из чего сделать эталон. Сейчас у меня она на моей морде лица плавает +- 1-3 градуса.
Кстати пробовал скармливать вывод с лептона нейросети, думал оно распознает лицо и через какой-то dlib ловить то самое место в уголке глаза, но они не понимают тепловой профиль. Надо или переобучать сеть на тепловизионные снимки или получать изображение еще обычной камерой и совмещать.
По себе знаю, что это такое. В один момент пришлось уйти и не вернуться. Не смотря на все перспективы и заработки. Хорошо что подушка многолетняя, была бы она на месяц-два даже не знаю, что бы делал.
Но ни о чем не жалею. Здоровье оно важнее.
К слову, мой совет, отдых с коктейлем у моря/океана от выгорания не спасёт. А вот жесткое глубокое погружение в нетуристическую среду, в идеале иной культуры (Азия, например), отлично помогает сделать перезагрузку. Сюда же всякие нестандартные походы, полеты, плавания… Главное чтобы мозг не переставал офигевать от новых видов, вкусов, запахов, ощущений.
К слову, сейчас для себя открыл вот такой набор тепловизионной камеры:
www.sparkfun.com/products/14670 + www.sparkfun.com/products/16465 (у китайцев дешевле)
У меня банально сломался тепловизор Flir One Pro, и я вытащил из него модуль, докупил плату управления и получил возможность программно снимать картинку с тепловизионной камеры.
Сейчас делаю just for fun определение температуры людей в поле зрения тепловизионной камеры, и вот интересно было бы почитать как на практике происходит калибровка и достигается такая точность измерений.
Вообще бесплатно, просто и универсально.
Вот мой код, мож кому пригодится.
в файл exclude.txt запихиваем в столбик ненужные расширения, например *.zip
прописываем его в планировщик и имеем простой, ежедневный бакап папки в бесплатное облако
Доступ извне, к слову, работает так себе. Прога для заливки, что под андроид, работает коряво. Нету ни какой информативности о том, что происходит и что оно там делает. Думал из отпуска заливать фотки с телефона, но не тут то было, по сути бестолковая вещь. Но может не разобрался до конца. Проплатил нормальное облако от гугла.
А будучи подключенным к сети, обеспечивает скорость около 80 МБ/сек.
Сложно требовать от компьютерного зрения результатов, лучше, чем человеческий мозг.
работала у меня и на PyTorch (Detectron2) и на TensorFlow (Mask_RCNN) для определения движущихся объектов на потоке с камеры.
Но спасибо за объяснение того, как оно реально работает. Полезно.