AI Thermometer

Contactless temperature mesurement using IR & RGB cameras and Deep CNN facial detection.

Normal temperature

Elevated temperature

What's new in v0.4

  • New facial detector (handles partial occlusion, e.g. with a mask)
  • Added IR camera drift compensation with an external blackbody

Hardware

To build this project you will need:

# Part link Price (USD)
1 Jetson Nano Dev Kit link 99
3 FLIR Lepton 3.5 IR Camera link 199
4 GroupGets Purethermal2 Module link 99
2 Raspberry Pi Camera Module V2.1 link 25
5 Noctua cooling fan link 14
6 3D printed enclosure https://a360.co/3nmDML3 -
total 436

Enclosure (live model available from https://a360.co/3nmDML3 ): wireframe image

Quickstart

  1. Flash Nvidia Jetson Nano with the latest Nvidia JetPack. Update package manager
sudo apt update && sudo apt upgrade
  1. Build OpenCV >4.4. It is required for CUDA DNN support.
wget https://raw.githubusercontent.com/mdegans/nano_build_opencv/master/build_opencv.sh
chmod +x build_opencv.sh
./build_opencv.sh
  1. Build pytorch (instructions here)

  2. Download AI Thermometer

git clone --recursive https://github.com/tomek-l/ai-thermometer
cd ai-thermometer
  1. Run AI Thermometer
python3 main.py
  1. Optionally, 3D print & assemble the enclosure from https://a360.co/3nmDML3

Limitations

IR and RGB camera alignment.

The current way of calculating the correspondence between IR and RGB cameras is not ideal. Factors, such as the non-rigid mount of the sensor on the Raspberry Pi CMV2.1 don't help. I'm actively working on calibration code that takes into account the intrinsic parameters of both cameras, which should allow for obtaining a pixel-level correspondence between the imags.

FAQ/common issues:

  1. uvc_open error -3

Reason: Your current user does not have r/w access to the PureThermal USB device.

For a quick and dirty fix you can do do:

echo 'SUBSYSTEM=="usb",  ENV{DEVTYPE}=="usb_device", GROUP="plugdev", MODE="0664"' | sudo tee /etc/udev/rules.d/10-libuvc.rules 
sudo udevadm trigger

(this gives camera access to all users)

For a better, fine-grained permission setup, create a new group, give permissions to that group only and your user to the newly created group. You can read more here.

  1. Illegal instruction (core dumped)

Reason: The provided libuvc.so is compiled for AArch64. It is a custom version of libuvc that supports Y16 video format. If you're using different architecture, you will need to build the library from source:

git clone https://github.com/groupgets/libuvc
cd libuvc
mkdir build
cd build
cmake ..
make
cp libuvc.so ~/ai-thermometer/ir/libuvc_wrapper
  1. using sudo or getting permission denied

You don't need sudo to run the code in this repository 🙂

Previous versions

Version 0.2: Haar Cascade + FLIR Lepton 3.5 temp. measurement (~10FPS, CPU only)

Watch full video: https://www.youtube.com/watch?v=j9eo9Cs8J8I

Version 0.1: SSD (COCO) + FLIR Lepton 3.5 temp. measurement (~12FPS w/ GPU accel.)

Watch full video: https://www.youtube.com/watch?v=i2XMtshdjn8