Home / Projects / Temi-VOC-Datasets
Project Software Apache-2.0

Temi-VOC-Datasets

Details

Architecture Python
License Apache-2.0

Temi VOC/Smell Datasets

This repo includes raw and cleaned smell collection metrics recorded by 2 versions of the SmartNanotubes Smell Inspector. The sensor was attached to the tray of a Temi robot, which roamed our office on a set path. The robot patrolled roughly once an hour during working hours and recorded a few dozen smell data points on each run. At each smell data point (in the processed/new-sensor.csv file), the robot also took a picture using its front top camera of the area that it was in.

Data collection ran from 2025-04-21 to 2026-01-09 (263 calendar days, ~8.6 months), with data recorded on 148 of those days.

Images associated with the processed CSV data can be found on huggingface.

Dataset Summary

All figures below were computed from the released files in processed/.

Property Old sensor New sensor Combined
Collection period 2025-04-21 to 2025-05-30 2025-06-02 to 2026-01-09 2025-04-21 to 2026-01-09
Calendar span 39 days 220 days 263 days (~8.6 months)
Days with data 23 125 148
Cleaned rows 12,360 74,870 87,230
Patrol runs 155 972 1,127
Median rows per run 67 61
Median logging interval 6.0 s 6.0 s 6.0 s
Synchronized frames N/A 74,870 74,870
Image archive size N/A 4.3 GB (frames.zip) 4.3 GB
Frame resolution N/A 640 × 480 640 × 480
Robot position No Yes New sensor only
Patrol footprint N/A ~33 m × 62 m N/A
Temperature range 25.3–28.6 °C 25.4–27.8 °C 25.3–28.6 °C
Humidity range 23.3–53.7 % 7.3–37.3 % 7.3–53.7 %
Firmware version 3.0.1 2.1.1

Old sensor: firmware 3.0.1. New sensor: firmware 2.1.1 — we replaced the old sensor with the new one due to faults in the old unit, even though it was a downgrade in firmware version number. The two firmware numbers do not reflect a linear progression in capability.

Note that the device’s own read-out cadence is 1.8 s for all 64 channels (per the manufacturer’s manual), but the logging service sampled it during patrol runs rather than continuously; the median interval between consecutive logged rows within a run is 6.0 s. All rows carry timestamps between 08:00 and 17:00 local time.

Data Dictionary (processed/old-sensor.csv)

Column Data Type Purpose
Timestamp DateTime (YYYY-MM-DD hh:mm:ss) The timestamp when the smell measurement was taken
value_{0,1,2,…63} float Measurement from each of the 64 smell sensor channels (raw values from sensor)
temperature float Measurement from the temperature sensor included in the smell sensor (Celsius)
humidity float Measurement from the humidity sensor included in the smell sensor (%)

Data Dictionary (processed/new-sensor.csv)

Column Data Type Purpose
Timestamp DateTime (YYYY-MM-DD hh:mm:ss) The timestamp when the smell measurement was taken
value_{0,1,2,…63} float Measurement from each of the 64 smell sensor channels (raw values from sensor)
temperature float Measurement from the temperature sensor included in the smell sensor (Celsius)
humidity float Measurement from the humidity sensor included in the smell sensor (%)
robot_x_position float X position of the robot w.r.t. its home base
robot_y_position float Y position of the robot w.r.t. its home base
frame_filename string Filename of the picture taken by the robot when a smell was measured (see frames/ directory)

A note on raw channel magnitudes

Raw channel magnitudes are strongly non-uniform. In new-sensor.csv, seven channels (0, 1, 14, 15, 19, 48, 49) have median values more than an order of magnitude above the typical channel, with channels 19, 48 and 49 sitting near 2.2e6 against a median channel value of ~8.1e3. In old-sensor.csv the spread is much smaller (largest per-channel median is 24× the smallest, and no channel exceeds 10× the typical value).

In both splits these high-magnitude channels are exactly the base/reference channels that Configuration A maps to 999 and that 2_prepare_features.py drops. The spread is a property of individual channels and their assigned role, not of any one detector chip. If you work with the raw 64-channel vector instead of the mapped feature set, scale per channel before analysis.

Pipeline Scripts

0_process_raw.py

Cleans raw CSV files by removing header/start rows, dropping NaN values, and renaming value_64/value_65 to temperature/humidity. Outputs to processed/.

1_clean_frames.py

Removes frame images from the frames/ directory that are not referenced in processed/new-sensor.csv.

2_prepare_features.py

Applies the sensor channel mapping (Configuration A) to transform the 64 raw value_* channels into meaningful feature columns. Inactive/base channels (mapped to 999) are dropped. The 15 active feature IDs (1–15) each have 3 replicate channels — the three replicates for a given feature ID sit within a single detector type, not one per detector — which can optionally be averaged together. Temperature (16) and humidity (17) pass through unchanged.

python 2_prepare_features.py              # keep all 45 individual channels
python 2_prepare_features.py --average    # average replicates → 15 feature columns

Outputs: processed/new-sensor-features.csv, processed/old-sensor-features.csv

Visualizations

visualizations/ contains seven standalone reference analysis scripts that turn the synchronized smell + image + pose data into spatial maps, smell-space clusterings, anomaly galleries, a patrol video, and a 3D office reconstruction. See visualizations/README.md for what each one produces and how to run it.

Evaluation Datasets

In addition to the full sensor logs, two labeled evaluation datasets are provided for ammonia detection benchmarking. These are controlled laboratory exposures, not clinical measurements.

processed/newSensor_training_ammonia-features.csv

Training set for ammonia detection. Contains 15-channel averaged feature columns (ch1_avgch15_avg) plus temperature and humidity, with binary class labels (ambient / ammonia) and a file column identifying the source environment. Used for training downstream classifiers and self-supervised pretraining.

processed/newSensor_testing_ammonia-features.csv

Held-out test set for ammonia detection. Collected from a single consistent sensor run where ammonia was poured in the middle of the recording — the sensor response rises and falls in a controlled pattern, providing the cleanest evaluation signal. Same schema as the training set. Used only for final evaluation — never for training or hyperparameter tuning.

processed/new-sensor-features.csv

Full unlabeled dataset with 15-channel averaged features from all environments. Used for self-supervised pretraining of the Smell-JEPA encoder.

See evaluation/README.md for the full evaluation pipeline, baseline results, and Smell-JEPA architecture details.

License

This dataset is licenced under the Apache License 2.0.


Imported from gh:Kentucky-Open-Science/Temi-VOC-Datasets. Source last updated 2026-08-12. Synced 2026-08-12.