Topdon TC001 (and clones: Topdon TS001, InfiRay P2 Pro, MaAnt Super IR Cam, etc.) Linux thermal camera app to read and display live and offline thermal data.
Ported and updated to Linux C/C++ app based on Les Wright's 21 June 2023 PyThermalCamera Python app.
- All prior licenses apply.
- https://github.com/leswright1977/PyThermalCamera - Python script
- https://github.com/92es/Thermal-Camera-Redux - Ported C/C++ app
A multi-threaded C/C++ app to read, parse, display thermal data from the Topdon TC001 Thermal camera (and clones).
Rewritten with additional functionality, bug fixes, optimizations and offline post processing.
- Live mode reading from USB camera and Offline mode for post processing analysis.
- Offline mode has great advantages over .png Snapshots because the raw thermal data can be represented with any configuration combinations at a later date as if it were live data. No longer bound to a single colormap, scale, contrast, filter, etc. included in the static .png image. Great for post documenting thermal audits depicting differnt data perspectives.
- Freeze Frame mode offers an additional level of control in unstable hand held scenarios.
- Freeze frame, snapshots and recording.
- Optional dynamic border layout build ( V 0.9.3 )
- See Example 4 below.
- Also see the BORDER_LAYOUT notes for more information.
- Optionally lock live camera's color map auto-ranging ( V 0.9.2 )
- Numerous temperature to color mapping options.
- 4 layout modes displaying image and thermal data sub-frames.
- Image sub-frame (Portrait or Landscape)
- Thermal sub-frame (Portrait or Landscape)
- Image sub-frame on left, Thermal sub-frame on right (Portrait or Landsacpe)
- Image sub-frame on top, Thermal sub-frame on bottom (Portrait or Landscape)
- 4 display modes
- With translucent OSD config menu
- With translucent OSD key and mouse bindings menu
- With out translucent OSD menu
- With out translucent OSD menu and overlayed graphics, video image only
- Portrait and Landscape rotations in 90 degree increments.
- Translucent OSD settings and keybinding menus.
- Integer scaling from 1X native resolution to full screen.
- Switchable Celsius / Fahrenheit displays.
- Scalable video, fonts and graphic overlays.
- 3 user selectable fonts.
- 37 colormaps.
- 22 OpenCV stock colormaps dipicted to the right.
- 7 inverted OpenCV stock colormaps.
- 7 generated colormaps.
- Raw feed, no colormap.
- 7 interpolation methods.
- Nearest
- Linear
- Cubic
- Area
- Lanczos
- Linear Exact
- Nearest Exact
- Video blur and contrast settings.
- Histogram Equalization filter.
- User settable Threshold delta from average temp in degrees C or F.
- Live gradient colormap scale widget.
- Color coded widgets depict:
- below (average - threshold) temps
- (average +/- threshold) temps
- above (average + threshold) temps
- Horizontal and vertical scrollable thermal plotting rulers.
- Landscape ruler plots 256 plus 3, 5 or 7 text temps.
- Portrait ruler plots 192 plus 3, 5 or 7 text temps.
- Thermal rulers have 5 modes with 4 clipping and 5 size settings.
- 5 modes include:
- Single relocatable temp.
- Vertical and horizontal relocatable cross grid of text temps.
- Individual horizontal or vertical relocatable plotting rulers.
- Simulteanous horizontal and vertical relocatable plotting rulers.
- Cliping modes include:
- no clipping (average baseline is proportional to Min/Avg/Max distribution)
- outlier clipping (average baseline is centered in clippled plot)
- below average clipping (focus on temps at or above average)
- above average clipping (focus on temps at or below average)
- Size settings include 1/5, 1/4, 1/3, 1/2 and full height ruler widths.
- Horizontal and Vertical rulers can be displayed simultaenously or sepearately.
- 5 modes include:
- Ability to add up to 13 user defined temp locations (great for fixed mount bench work).
- User temp and ruler display modes are mutually exclusive.
- Min, Avg and Max screen temps.
- Thermal color gradient widget with Min/Avg/Max and current focus temp indicators.
- User input can be entered via keyboard and/or mouse as well as commands redirected to stdin.
- Keyboard and mouse input take presendece over redirected stdin command stream.
-
Linux, C/C++, OpenCV(V4L) and pthread libraries.
-
Optional build flags optimized for weak and single core / single threaded hardware.
-
NOTE 1: Building on Debian 11 and newer Debian Linux based distros have a better likihood of working due to library compatability issues.
- Distros like Arch, SUSE, Redhat, Fedora, BSD are not Debian based so there may be TBD issues.
-
NOTE 2: Running as a Virtual Machine Guest OS client will probably NOT work because the VM can alter the USB video feed passed to the client OS, thus destroying the thermal data.
- See the RPi/SBC build help notes.
- Section coming soon.
Thermal Camera Redux:
Built with display 2560x1600, max:default scale 8:4, rotation 0, default Fahrenheit, 37 colormaps, Jet,
Multi-threaded with drag scrolling
Tested on IvyBridge, SkyLake & CoffeeLake Debian 11 and 12 PCs with all features working
Tested by Amish Technician (from EEVblog) on numerous RPi models including RPi Zero 2w, 2, 3, 4 and 5
using 2023-12-05 release of Raspberry Pi OS desktop 64-bit (Debian 12 bookworm)
Reported working (by Cynfab) on "InfiRay P2 Pro" thermal camera
Reported working (by PMKrol, 2024/06/04) on "MaAnt Super IR Cam" thermal camera running on Ubuntu version 24.04
Reported working (by Artag, 2024/07/15) on "Topdon TS001" thermal camera running on Debian 11 PC
./redux -d n (where 'n' is the number of the desired video camera)
./redux -f input.raw (where input.raw is a raw dump file from ./redux)
[-rotate n] [-scale n] [-fullscreen] [-cmap n] [-fps n] [-font n] [-clip n] [-thick n]
[-help] [-quiet] [-snapshot [prefix]]
- a z: [In|De]crease Blur
- s x: +/- threshold from avg temp that contols min/max displays and ruler plot colors
- d c: Change interpolated window scale [camera native to fullscreen]
- f v: [In|De]crease Contrast
- g b: Cycle [for|back]wards through interpolation methods
- j m: Cycle [for|back]wards through Color[m]aps
- w : Cycle through single/dual[horizontal/vertical] [w]indow layouts
- 6 : Toggle between fullscreen and current scaled window size
- r : Toggle [r]ecording (.avi)
- 1 : Select Font
- 5 : Reset defaults
- p : Sna[p]shot (both .png and offline .raw)
- h : Cycle through overlayed screen data
- t : Toggle between Celsius and Fahrenheit
- y : Toggle Historgram Equalization filter
- l : [Un]Lock camera's colormap auto ranging
- i k: Cycle [for|back]wards through locked auto ranging mapping methods
- 8 : Rotate display 0, 90, 180, 270 degrees (Portrait and Landscape)
- e : Toggle Freeze Frame on/off
- o : Displays and cycles through 5 temp ruler modes
- 3 : Ruler plot clip modes: none, outlier, below avg, above avg
- 4 : Ruler thickness - 1/5, 1/4, 1/3, 1/2, full height
- : Keypad Up/Down/Left/Right/Center(5) moves rulers
- : Left mouse adds user temps or moves rulers
- : Right mouse removes user temps and disables ruler mode
- : Keypad Up/Down/Left/Right/Center(5) moves rulers
- / : Misc stdout help information
- q : Quit
Example 1: Full screen horizontal and vertical thermal ruler plots with, 4X scale and video blur settings applied.
- Green sections of plot lines depict above (average + threshold) temps.
- White sections of the plot lines depict (average +/- threshold) temps.
- Red sections of the plot lines depict below (average - threshold) temps.
- Ruler's focal point was relocated on the screen's Max temp location.
- The gradient scale's ">" marker in the upper right hand corner is Green indicating the focal point's respective temp range, above (average + threshold).
- The gradient scale's Avg temp marker "-" in the lower right hand corner is White, indicating the screen's current average temp.
- The Green lines extending from the focal points to both the Vertical and Horizontal plot lines indicate the relative temp at the current location. Longer lines indicates a larger relative delta from the screen's Avg temp.
- All thermal ruler features update in real time from thermal data obtained by the camera and as the rulers are repositioned around the screen.
- The gradient scale's ">" marker in the upper right hand corner is Green indicating the focal point's respective temp range, above (average + threshold).
- If only the lady had this app when she ordered hot coffee from the McDonald's drive thru order window ...
- This could be useful for fixed mount bench work.
- Hi/Lo alarm triggers could be added to user temp points in the future for temp range monitoring and automated logging.
- 1/5 screen height ruler size.
- Proportional, non-clipping display mode.
- See the BORDER_LAYOUT notes for more information.
- Added dynamic left and right border display areas.
- Border widths dynamically resize based on current scale factor, font selection and (-DDISPLAY_WIDTH=width or Fullscreen aspect ratio) constraints.
- OSD informational display in left display border.
- Colormap gradient widget in right display border.
- Feature requested by Amish Technician.
- Landscape, double high layout with optional lock auto-ranging filter applied in 2nd window.
- Data logging over time.
- User temp alarm triggers.
- 3D solid and mesh surface plots.
- LeoDJ's Kelvin conversion algorithm from post #216 on EEVblog
- Les Wright's original Python script and corresponding YT video.
- Amish Technician's gracious RPi testing, feature recommendations and valuable feedback.
- Cynfab for thermal range testing on the InfiRay P2 Pro.
- Matthias Wandel's helpful feature colaboration and RPi feedback.