Skip to main content

Fluke Thermal Reader

A Python library for reading and analyzing Fluke thermal imaging files in .is2 format.

Package: fluke-thermal-reader · Import: import fluke_thermal_reader or from fluke_thermal_reader import read_is2


Features

  • .is2 reading: Full parsing of Fluke thermal imaging files (.is2)
  • Temperature conversion: Raw counts to temperature (°C) with emissivity and reflected background correction (radiative formula)
  • Metadata: Camera model, dimensions, emissivity, transmission, background temperature, min/max/avg from file and from JSON when present
  • Minimal dependencies: Only numpy
  • Tested and working: Fluke Ti480P and Ti300

Installation

From PyPI (when published)

pip install fluke-thermal-reader

From source (development or local release)

From the repository root:

pip install -e .

Or in non-editable mode:

pip install .

Quick start

from fluke_thermal_reader import read_is2

# Load a .is2 file
data = read_is2("thermal_image.is2")

# Thermal matrix (2D, °C)
thermal_data = data["data"]
print(f"Temperature range: {thermal_data.min():.1f}°C - {thermal_data.max():.1f}°C")

# Metadata
print(f"Camera: {data['CameraModel']}")
print(f"Size: {data['size']}")  # [width, height]
print(f"Emissivity: {data['Emissivity']}")
print(f"Background temperature: {data['BackgroundTemp']}°C")

Plot with matplotlib

import matplotlib.pyplot as plt
from fluke_thermal_reader import read_is2

data = read_is2("thermal_image.is2")
plt.imshow(data["data"], cmap="coolwarm", aspect="equal")
plt.colorbar(label="Temperature (°C)")
plt.title(f"Thermal image — {data['CameraModel']}")
plt.show()

Returned data structure (read_is2)

Key Type Description
data 2D ndarray Temperature in °C per pixel
FileName str File name
CameraModel str Thermal camera model
CameraSerial str Serial number
size [w, h] Image dimensions
MinTemp, MaxTemp, AvgTemp float From file/JSON when present
Emissivity float Emissivity
Transmission float Transmission
BackgroundTemp float Background temperature
thumbnail_path str / None Thumbnail path (if present)
photo_path str / None Visible photo path (if present)

Requirements

  • Python 3.8+
  • numpy >= 1.20.0

For visualization: matplotlib (optional).


Tested camera models

Tested and working with:

  • Fluke Ti480P
  • Fluke Ti300

Other Fluke .is2 files may work; feedback and sample files for additional models are welcome.


Project structure

Fluke_Python/
├── fluke_thermal_reader/    # Main package
│   ├── __init__.py
│   ├── reader.py            # read_is2, FlukeReader
│   ├── parsers.py           # IS2 parser
│   ├── utilities.py         # UnitConversion, calc_equation
│   ├── models.py
│   └── cli.py
├── examples/                 # Usage examples
├── tests/                    # Tests
├── pyproject.toml
├── requirements.txt
└── README.md

Development and testing

# Editable install
pip install -e ".[dev]"

# Run tests
pytest

Publishing to PyPI

  1. Install build tools

    pip install build twine
    
  2. Bump version in pyproject.toml and fluke_thermal_reader/__init__.py (e.g. 0.2.1).

  3. Build the package (from repo root)

    python -m build
    

    This creates dist/ with a .tar.gz (sdist) and a .whl (wheel).

  4. Check archives (optional)

    twine check dist/*
    
  5. Upload to PyPI

    twine upload dist/*
    

    Use your PyPI credentials (create an API token at pypi.org/manage/account/token/; username __token__, password = token).

After upload, users can install with:

pip install fluke-thermal-reader

read_is3 (Future Work)

read_is3(file_path) is planned for Fluke IS3 (video) files.

  • Current status: Not implemented — calling it raises NotImplementedError.
  • Scope: Video streams (multiple thermal frames), video-level metadata.
  • Documentation: The returned data structure will be defined once implementation starts.

If you are interested in IS3 support, please open an issue with sample files and requirements.


License

See the LICENSE file in the repository.


Changelog

0.2.0

  • Stable .is2 parser with temperature conversion (emissivity + background temperature)

0.1.x

  • Initial release, basic .is2 support

Metadata

Release files for fluke-thermal-reader 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fluke-thermal-reader 0.2.0
File Size Uploaded
fluke_thermal_reader-0.2.0.tar.gz 21.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fluke-thermal-reader 0.2.0
File Interpreter ABI Platform
fluke_thermal_reader-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 35.8 kB

Release files / fluke_thermal_reader-0.2.0.tar.gz

Download URL fluke_thermal_reader-0.2.0.tar.gz
Size 21.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d1c0e20446fb78142b8244eaba5d8757384fc697544696f312eb0c4267ea3ee0
BLAKE2b-256 checksum
How to use checksums
5bc9a759eede2e6f41f9f2f55a9de806c6ea1d2665abc2b42fb782e5166967d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / fluke_thermal_reader-0.2.0-py3-none-any.whl

Download URL fluke_thermal_reader-0.2.0-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f6ce92b53465ec9e669d67b5a900994f78396d64ad6fe3cda1e2bc182efae44
BLAKE2b-256 checksum
How to use checksums
2137ea039e6f5b3d820526ace0e25ecfdf6879317391783e9ebaa7ca3ea981c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page