Skip to content

COEX DuoCam

duocam

"COEX DuoCam" - это программно-аппаратный комплекс, позволяющий получать комбинированное визуально-тепловизионное изображение.

В качестве источника визуальной картинки теоретически можно использовать любую камерую, имеющую CSI или HDMI-выход.

В качестве источника тепловизионной картинки можно использовать тепловизоры Seek Compact или Seek Compact Pro.

В качестве платформы для запуска обрабатывающего софта рекомендуется использовать одноплатный компьютер Raspberry Pi 4B.

Подключение устройств

Тепловизор подключается в один из портов USB 3.0 на RPi4. Во второй USB 3.0-порт подключается Wi-Fi адаптер для осуществления связи с наземной станцией.

Визуальная камера подключается в CSI порт напрямую или через HDMI-CSI-конвертер.

В порт USB 2.0 следует подключить USB-flash устройство, на которое будет производиться сохранение фото и видеофайлов.

Принцип работы

Программная часть осуществляет наложение тепловизионной картинки на визуальную. С помощью конфигурационного файла или виджета управления свойствами камеры в QGroundControl можно изменять результирующее изображение.

Выбор модели тепловизора

Первоначально надо определиться, какая у вас можель тепловизора (простая или Pro) и выставить соответствующую настройку в конфиг-файле (enable: yes у seek_thermal_pro или seek_thermal в разделе thermal_camera_models. Важно не забыть выставить enable: no у камеры, которую не предполагается использовать)

Управление наложением

При включенном визуальном (show_visual: yes) и термическом (show_thermal: yes) изображениях, термическое будет налагаться на визуальное в регион, заданный в свойстве overlay_thermal_on_visual (начальная точка с координатами (x_start, y_start), ширина региона - thermal_region_width, высота - thermal_region_height).

Если отключить визуальное изображение (show_visual: no), то термическое развернется на весь экран.

Если отключить термическое (show_thermal: no), то будет транслироваться только визуальное.

Если отключить оба - изображение перестанет транслироваться.

Центровка

Для центровки результирующего изображения (из-за физического сдвига объективов камер термическое будет сдвинутого относительно центра визуального) следует использовать свойства раздела final_frame_cropping. Принцип аналогичен предыдущему разделу.

Детекторы контуров (edge detectors)

Для облегчения понимания термического изображения, есть возможность включения наложения на него соответствующих контуров визуального изображения. В программе реализована поддержва двух алгоритмов детектирования контуров: Sobel и Canny. В соответствующих разделах конфига (apply_sobel и apply_canny) можно поэкспериментировать с некоторыми свойствами детекторов.

Колоризация

Для большей наглядности, тепловизионное изображение можно колорифицировать. Для этого необходимо выставить свойство apply_colormap: yes.

Конкретную схему колорификации можно выбрать из списка, указав порядковый номер схемы в свойстве colormap.

Свойства транслируемого видео и сохраняемых файлов

Свойства транслируемого видео можно измкенять в разделе output_video. Делать это стоит с четким пониманием того, что делаешь - неправильные настройки могут сломать трансляцию. Например, разрешение видео должно совпадать с настройками gstreamer'а, который осуществляет последующее кодирование.

Для настройки сохраняемого на флеш-накопитель видео следует пользоваться группой свойств encode_video.

Каталоги для сохранения фото и видеофайлов можно указать в свойствах path_to_save.

Настройки дополнительной отображаемой информации

Скрывать\показывать частоту кадров в секунду визуального и термического изображений можно при помощи свойства show_fps.

Показывать\скрывать перекрестие с температурой центрального пикселя можно при помощи свойства draw_temp.

Подстройка температуры

В зависимости от используемого тепловизора, может потребоваться корректировка температурного диапазона. В секции temperature_calibration Доступны две настройки:

  • Сдвиг (offset) - линейный сдвиг температурного диапазон на указанное число.
  • Масштаб (scale) - пропорциональное изменение шкалы.

Выравнивание градиента температуры от центра к краям

Если на тепловизионном изображении наблюдается "рамка", вызванная увеличением определяемой температуры к краям, то следует применить выравнивающий фильтр (виньетирование). Настройки располагаются в секции vignette:

  • enable - включить-выключить наложение фильтра
  • show_center - показать точку "центра" для отладки ее положения
  • center_x - X-координата "центра"
  • center_y - Y-координата "центра"
  • max_decrement_relative - максимальное уменьшение температуры к краям

Виджет управления камерой для QGroundControl

QGC_widget

Где взять

QGC c необходимый функционалом для управления "COEX DuoCam" можно скачать в нашем репозитории. Скачивать следует тот релиз, в названии которого присутствует слово duocam с максимальным порядковым номером.

Как использовать

При открытии виджета QGC пошлет MAVLink-сообщения с запросом текущих значений свойств. Необходимо дождаться, пока они все до конца загрузятся. Если загрузка не завершается в течение минуты, необходимо нажать кнопку "Refresh values".

При изменении значений свойств QGC осуществляет коммуникацию с DuoCam посредством протокола MAVLink, поэтому нет смысла очень часто нажимать контролы - наоборот, после нажатия следует дождаться изменения картинки и только потом переходить к следующему свойству.

Подробнее об архитектуре DuoCam и программе duocam-mavlink.

Конфигурационный файл

Для более глубокой настройки DuoCam можно использовать конфигурационный файл.

Как добраться

Для редактирования конфигурационного файла необходимо извлечь microSD-карту из RPi4, вставить в кард-ридер своего компьютера (от операционной системы требуется возможность читать файловую систему ext4), открыть файл по адресу <microSD>/etc/duocam/camera.yaml.

Также можно зайти по ssh на работающую RPi4 и отредактировать конфигурационный файл внутри системы по тому же пути.

Образец конфигурационного файла

show_visual: yes
show_thermal: yes
flip_thermal: no
apply_sobel:
  enable: yes
  sobel_scale: 3
  sobel_delta: 0
apply_canny: no
draw_temp: yes

output_video:
  device: /dev/video1
  width: 1280
  height: 720
  bytes_per_pixel: 3
  framerate: 20

path_to_save_photos: /media/usb0/
path_to_save_videos: /media/usb0/

encode_video:
  width: 720
  height: 480
  framerate: 10

thermal_camera_models:
  seek_thermal_pro:
    enable: no
    sensor_resolution:
      width: 320
      height: 240
    overlay_thermal_on_visual:
      # These values are for GitUp3
      x_start: 282
      y_start: 102
      thermal_region_width: 600
      thermal_region_height: 400
      transparency: 0.3
      # These values are for Raspicam
      #  x_start: 425
      #  y_start: 155
      #  thermal_region_width: 900
      #  thermal_region_height: 600
    final_frame_cropping:
      enable: yes
      x_start: 0
      y_start: 0
      width: 1160
      height: 610

  seek_thermal:
    enable: yes
    sensor_resolution:
      width: 206
      height: 156
    overlay_thermal_on_visual:
      x_start: 282
      y_start: 102
      thermal_region_width: 600
      thermal_region_height: 400
      transparency: 0.3
    final_frame_cropping:
      enable: yes
      x_start: 0
      y_start: 0
      width: 1160
      height: 610

# Colormaps are taken from: https://docs.opencv.org/2.4/modules/contrib/doc/facerec/colormaps.html
# COLORMAP_AUTUMN = 0,
# COLORMAP_BONE = 1,
# COLORMAP_JET = 2,
# COLORMAP_WINTER = 3,
# COLORMAP_RAINBOW = 4,
# COLORMAP_OCEAN = 5,
# COLORMAP_SUMMER = 6,
# COLORMAP_SPRING = 7,
# COLORMAP_COOL = 8,
# COLORMAP_HSV = 9,
# COLORMAP_PINK = 10,
# COLORMAP_HOT = 11
apply_colormap:
  enable: yes
  colormap: 4