Flir
Lepton Maker Community – Maker community for Lepton thermal imaging camera
GroupGets
Boson
Lepton 2.0
Lepton 2.5
Lepton 3.0
Lepton 3.5
FLIR Lepton Breakout Board v1.4
PureThermal 2
Raspberry Pi 3 FLIR Lepton Dev Kit
DIY-Thermocam
OEM Cameras
FLIR BOSON VPC Accessory with USB Cable
FLIR BOSON VPC Accessory with USB-ANALOG CABLE
PureThermal 2
GroupGets PureThermal 2
Digikey SparkFun Electronics DEV-14670
Mouser SparkFun DEV-14670
Mouser SparkFun DEV-14670-Board
SparkFun PureThermal 2 – FLIR Lepton Smart I/O Board
SparkFun FLIR Radiometric Lepton Dev Kit
GroupGets Store
PureThermal 2
Flir Boson 640
FLIR Boson & Accessories
github
github.com/groupgets/purethermal1-firmware, Reference firmware for PureThermal 1 FLIR Lepton Dev Kit
github.com/groupgets/purethermal1-uvc-capture, USB Video Class capture examples for PureThermal 1 / PureThermal 2 FLIR Lepton Dev Kit
github.com/groupgets/libuvc, a cross-platform library for USB video devices (FORK!)
github.com/groupgets/LeptonModule, Code for getting started with the FLIR Lepton breakout board
github.com/groupgets/pylepton, Quick and dirty pure python library for interfacing with FLIR lepton
github.com/groupgets/GetThermal, Cross-platform USB thermal camera viewer
github.com/groupgets/GetThermal/wiki/Building-for-Raspberry-Pi, Building for Raspberry Pi
RaspberryPi2EGLFS
“EGLFS is a platform plugin for running Qt5 applications on top of EGL and OpenGL ES 2.0 without an actual windowing system (like X11 or Wayland).”
Qt for Embedded Linux
github.com/maxritter/DIY-Thermocam
github.com/maxritter/diythermocam_firmware
Rest
PureThermal2
$ git clone git@github.com:groupgets/purethermal1-uvc-capture.git
$ cd purethermal1-uvc-capture/python/
$ ./uvc-radiometry.py
Error: could not find libuvc!
$ sudo apt-get install libuvc-dev
$ dpkg-query -L libuvc-dev
[...]
/usr/lib/x86_64-linux-gnu/libuvc.so
[...]
$ ./uvc-radiometry.py
Traceback (most recent call last):
File "./uvc-radiometry.py", line 6, in <module>
import cv2
ImportError: No module named cv2
$ sudo apt-get install python-opencv
$ ./uvc-radiometry.py
uvc_open error
$ dmesg | tail -n 30
[ 733.814416] usb 1-1: new full-speed USB device number 7 using xhci_hcd
[ 733.966127] usb 1-1: New USB device found, idVendor=1e4e, idProduct=0100
[ 733.966142] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 733.966153] usb 1-1: Product: PureThermal 1
[ 733.966162] usb 1-1: Manufacturer: GroupGets
[ 733.966171] usb 1-1: SerialNumber: v1.1.0
[ 733.968005] uvcvideo: Found UVC 1.00 device PureThermal 1 (1e4e:0100)
[ 733.969256] uvcvideo 1-1:1.0: Entity type for entity Extension 3 was not initialized!
[ 733.969273] uvcvideo 1-1:1.0: Entity type for entity Processing 2 was not initialized!
[ 733.969284] uvcvideo 1-1:1.0: Entity type for entity Extension 4 was not initialized!
[ 733.969294] uvcvideo 1-1:1.0: Entity type for entity Extension 5 was not initialized!
[ 733.969305] uvcvideo 1-1:1.0: Entity type for entity Extension 6 was not initialized!
[ 733.969315] uvcvideo 1-1:1.0: Entity type for entity Extension 7 was not initialized!
[ 733.969326] uvcvideo 1-1:1.0: Entity type for entity Extension 21 was not initialized!
[ 733.969337] uvcvideo 1-1:1.0: Entity type for entity Extension 254 was not initialized!
[ 733.969348] uvcvideo 1-1:1.0: Entity type for entity Camera 1 was not initialized!
[ 733.971018] input: PureThermal 1: PureThermal 1 as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/input/input13
$ ./uvc-radiometry.py
uvc_open error
$ sudo ./uvc-radiometry.py
unsupported descriptor subtype VS_COLORFORMAT
unsupported descriptor subtype VS_COLORFORMAT
unsupported descriptor subtype VS_COLORFORMAT
unsupported descriptor subtype VS_COLORFORMAT
unsupported descriptor subtype VS_COLORFORMAT
device opened!
Version gpp: 3.3.26 dsp: 3.3.26
FLIR part #: 500-0771-01
FLIR serial #: '{"(\x00\x00\x00\x00\x00'
format: UYVY
frame 160x120 @ 9fps
format: Y16
frame 160x120 @ 9fps
frame 160x122 @ 9fps
format: Y8
frame 160x120 @ 9fps
format: RGBP
frame 160x120 @ 9fps
format: }�6�
frame 160x120 @ 9fps
uvc_start_streaming failed: -2
$ sudo apt-get remove libuvc-dev
UVC Y16 reading raw values – Pure Thermal 1
$ cd ..
$ git clone https://github.com/groupgets/GetThermal.git
$ cd GetThermal
$ git submodule update --init
Submodule 'libuvc' (https://github.com/groupgets/libuvc) registered for path 'libuvc'
Cloning into '/home/andreas/src/GetThermal/libuvc'...
Submodule path 'libuvc': checked out '5e866910de3f172bd5adab72baec40a066bbbe3a'
$ cmake ..
Command 'cmake' not found, but can be installed with:
sudo apt install cmake
$ sudo apt install cmake
$ cmake ..
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- No build type selected, default to Release
-- No target type selected, default to shared library
CMake Warning at CMakeLists.txt:58 (message):
JPEG not found. libuvc will not support JPEG decoding.
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
LIBUSB_INCLUDE_DIR
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
used as include directory in directory /home/andreas/src/GetThermal/libuvc
LIBUSB_LIBRARY_NAMES
linked by target "uvc" in directory /home/andreas/src/GetThermal/libuvc
-- Configuring incomplete, errors occurred!
See also "/home/andreas/src/GetThermal/libuvc/build/CMakeFiles/CMakeOutput.log".
$ sudo apt-get install libusb-1.0-0-dev
$ cmake ..
CMake Warning at CMakeLists.txt:58 (message):
JPEG not found. libuvc will not support JPEG decoding.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/andreas/src/GetThermal/libuvc/build
$ sudo apt-get install libjpeg-dev
The following NEW packages will be installed:
libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev
$ xed $HOME/src/GetThermal/libuvc/CMakeLists.txt
# Try to find JPEG using a module or pkg-config. If that doesn't work, search for the header.
find_package(jpeg QUIET)
if(NOT JPEG_FOUND)
find_path(JPEG_INCLUDE_DIR jpeglib.h)
if(JPEG_INCLUDE_DIR)
set(JPEG_FOUND ON)
set(JPEG_LIBRARIES -ljpeg)
endif()
endif()
$ cmake ..
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- No build type selected, default to Release
-- No target type selected, default to shared library
-- Building libuvc with JPEG support.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/andreas/src/GetThermal/libuvc/build
$ make
[ 50%] Linking C shared library libuvc.so
[100%] Linking C static library libuvcstatic.a
$ xed $HOME/src/purethermal1-uvc-capture/python/uvctypes.py
libuvc = cdll.LoadLibrary("/home/andreas/src/GetThermal/libuvc/build/libuvc.so")
$ sudo ./uvc-radiometry.py
device opened!
Version gpp: 3.3.26 dsp: 3.3.26
FLIR part #: 500-0771-01
FLIR serial #: '{"(\x00\x00\x00\x00\x00'
format: UYVY
frame 160x120 @ 9fps
format: Y16
frame 160x120 @ 9fps
frame 160x122 @ 9fps
format: Y8
frame 160x120 @ 9fps
format: RGBP
frame 160x120 @ 9fps
format: }�6�
frame 160x120 @ 9fps
Estimated / selected altsetting bandwith : 18 / 962.
Lepton Camera feed not available
$ sudo sh -c "echo 'SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1e4e\", ATTRS{idProduct}==\"0100\", SYMLINK+=\"pt1\", GROUP=\"usb\", MODE=\"666\"' > /etc/udev/rules.d/99-pt1.rules"
$ ls -la /dev
0 lrwxrwxrwx 1 root root 15 Nov 16 17:46 pt1 -> bus/usb/001/013
$ vlc
$ ls -la /dev
0 drwxr-xr-x 4 root root 80 Nov 16 17:46 v4l
0 crw-rw-rw-+ 1 root root 81, 0 Nov 16 17:46 video0
VideoCapure: uncompressed 16 bit video stream (Y16)
$ python
>>> import cv2
>>> cam = cv2.VideoCapture("/dev/video0")
>>> cam.get(cv2.CAP_PROP_FORMAT)
16.0
>>> cam.set(cv2.CAP_PROP_FORMAT,cv2.CV_16U)
VIDEOIO ERROR: V4L2: setting property #8 is not supported
True
>>> print(cv2.CV_16U)
2
>>> print(cv2.CV_8UC3)
16
>>> cam.set(cv2.CAP_PROP_FORMAT, 2.0)
VIDEOIO ERROR: V4L2: setting property #8 is not supported
True
Captured frame RGB to YUV and Reverse
Creating a video with OpenCV
$ sudo apt install v4l-utils $ v4l2-ctl -d /dev/video0 --list-formats-ext ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'UYVY' Name : UYVY 4:2:2 Size: Discrete 160x120 Interval: Discrete 0.111s (9.000 fps) Index : 1 Type : Video Capture Pixel Format: 'Y16 ' Name : 16-bit Greyscale Size: Discrete 160x120 Interval: Discrete 0.111s (9.000 fps) Size: Discrete 160x122 Interval: Discrete 0.111s (9.000 fps) Index : 2 Type : Video Capture Pixel Format: 'GREY' Name : 8-bit Greyscale Size: Discrete 160x120 Interval: Discrete 0.111s (9.000 fps) Index : 3 Type : Video Capture Pixel Format: 'RGBP' Name : 16-bit RGB 5-6-5 Size: Discrete 160x120 Interval: Discrete 0.111s (9.000 fps) Index : 4 Type : Video Capture Pixel Format: 'BGR3' Name : 24-bit BGR 8-8-8 Size: Discrete 160x120 Interval: Discrete 0.111s (9.000 fps)
Boson
$ uname -a
Linux udoo-x86 4.15.0-32-generic #35-Ubuntu SMP Fri Aug 10 17:58:07 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ dmesg
[...]
[ 168.770386] usb 1-3: new high-speed USB device number 6 using xhci_hcd
[ 168.921648] usb 1-3: New USB device found, idVendor=09cb, idProduct=4007
[ 168.921663] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 168.921673] usb 1-3: Product: Boson
[ 168.921682] usb 1-3: Manufacturer: FLIR
[ 168.921690] usb 1-3: SerialNumber: 6088
[ 168.930320] cdc_acm 1-3:1.2: ttyACM1: USB ACM device
[ 169.013588] media: Linux media interface: v0.10
[ 169.032892] Linux video capture interface: v2.00
[ 169.062065] uvcvideo: Unknown video format 3132564e-0000-0010-8000-00aa00389b71
[ 169.062075] uvcvideo: Found UVC 1.00 device Boson (09cb:4007)
[ 169.064103] uvcvideo 1-3:1.0: Entity type for entity Processing 3 was not initialized!
[ 169.064108] uvcvideo 1-3:1.0: Entity type for entity Camera 1 was not initialized!
[ 169.064461] usbcore: registered new interface driver uvcvideo
[ 169.064463] USB Video Class driver (1.1.1)
$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YU12'
Name : Planar YUV 4:2:0
Size: Discrete 640x512
Interval: Discrete 0.111s (9.000 fps)
Interval: Discrete 0.133s (7.500 fps)
Index : 1
Type : Video Capture
Pixel Format: 'Y16 '
Name : 16-bit Greyscale
Size: Discrete 320x256
Interval: Discrete 0.111s (9.000 fps)
Interval: Discrete 0.133s (7.500 fps)
Index : 2
Type : Video Capture
Pixel Format: 'NV12'
Name : Y/CbCr 4:2:0
Size: Discrete 640x512
Interval: Discrete 0.111s (9.000 fps)
Interval: Discrete 0.133s (7.500 fps)
Index : 3
Type : Video Capture
Pixel Format: ''
Name : 3132564e-0000-0010-8000-00aa003
Size: Discrete 640x512
Interval: Discrete 0.111s (9.000 fps)
Interval: Discrete 0.133s (7.500 fps)
$ ./GetThermal-v0.1.3-x86_64-Linux.AppImage
UVC initialized
Device found
uvc_open: Access denied (-3)
$ sudo ./GetThermal-v0.1.3-x86_64-Linux.AppImage
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
UVC initialized
Device found
Device opened
DEVICE CONFIGURATION (09cb:4007/6088) ---
Status: idle
VideoControl:
bcdUVC: 0x0100
VideoStreaming(1):
bEndpointAddress: 129
Formats:
UncompressedFormat(1)
bits per pixel: 12
GUID: 4934323000001000800000aa00389b71 (I420)
default frame: 1
aspect ratio: 0x0
interlace flags: 00
copy protect: 00
FrameDescriptor(1)
capabilities: 02
size: 640x512
bit rate: 10592000-235929600
max frame size: 491520
default interval: 1/9
interval[0]: 1/9
interval[1]: 1/7
UncompressedFormat(2)
bits per pixel: 16
GUID: 5931362000001000800000aa00389b71 (Y16 )
default frame: 1
aspect ratio: 0x0
interlace flags: 00
copy protect: 00
FrameDescriptor(1)
capabilities: 02
size: 320x256
bit rate: 10592000-78643200
max frame size: 163840
default interval: 1/9
interval[0]: 1/9
interval[1]: 1/7
UncompressedFormat(3)
bits per pixel: 12
GUID: 4e56313200001000800000aa00389b71 (NV12)
default frame: 1
aspect ratio: 0x0
interlace flags: 00
copy protect: 00
FrameDescriptor(1)
capabilities: 02
size: 640x512
bit rate: 10592000-235929600
max frame size: 491520
default interval: 1/9
interval[0]: 1/9
interval[1]: 1/7
UncompressedFormat(4)
bits per pixel: 12
GUID: 4e56323100001000800000aa00389b71 (NV21)
default frame: 1
aspect ratio: 0x0
interlace flags: 00
copy protect: 00
FrameDescriptor(1)
capabilities: 02
size: 640x512
bit rate: 10592000-235929600
max frame size: 491520
default interval: 1/9
interval[0]: 1/9
interval[1]: 1/7
END DEVICE CONFIGURATION
Initializing Boson with UVC backend...
Using FLIR Boson with firmware 6088
Initialize: 0x00000000
bmHint: 0001
bFormatIndex: 1
bFrameIndex: 1
dwFrameInterval: 1111111
wKeyFrameRate: 1
wPFrameRate: 0
wCompQuality: 0
wCompWindowSize: 0
wDelay: 14240
dwMaxVideoFrameSize: 491520
dwMaxPayloadTransferSize: 491532
bInterfaceNumber: 1
Streaming...
QQmlExpression: Expression qrc:/ViewerForm.ui.qml:69:22 depends on non-NOTIFYable properties:
BosonVariation::supportsRadiometry
QQmlExpression: Expression qrc:/ViewerForm.ui.qml:53:30 depends on non-NOTIFYable properties:
BosonVariation::supportsRadiometry
Surface set. Supported formats: 18 19 22 23 20 21 3 1 10 8 5
Surface supports format 18 width 640 height 512QQmlExpression: Expression qrc:/boson/InfoControls.qml:44:23 depends on non-NOTIFYable properties:
BosonVariation::softwareRev
QQmlExpression: Expression qrc:/boson/InfoControls.qml:40:23 depends on non-NOTIFYable properties:
BosonVariation::cameraSerialNumber
QQmlExpression: Expression qrc:/boson/InfoControls.qml:36:23 depends on non-NOTIFYable properties:
BosonVariation::cameraPartNumber
QQmlExpression: Expression qrc:/boson/InfoControls.qml:32:23 depends on non-NOTIFYable properties:
BosonVariation::sensorSerialNumber
QQmlExpression: Expression qrc:/boson/InfoControls.qml:28:23 depends on non-NOTIFYable properties:
BosonVariation::sensorPartNumber
QQmlExpression: Expression qrc:/boson/VidControls.qml:47:22 depends on non-NOTIFYable properties:
BosonVariation::supportsHwPseudoColor
QQmlExpression: Expression qrc:/boson/VidControls.qml:25:22 depends on non-NOTIFYable properties:
BosonVariation::supportsHwPseudoColor
qrc:/controls/VideoRoi.qml:18: TypeError: Cannot read property 'height' of undefined
qrc:/controls/VideoRoi.qml:17: TypeError: Cannot read property 'width' of undefined
qrc:/controls/VideoRoi.qml:16: TypeError: Cannot read property 'y' of undefined
qrc:/controls/VideoRoi.qml:15: TypeError: Cannot read property 'x' of undefined
Closing...
Done streaming.
Device closed
UVC exited