Inspiration

Over 42,000 bridges in the US are structurally deficient. Manual inspections happen every 2 years, and by the time damage is visible, it's already serious. The 2007 I-35W collapse killed 13 people. Post-collapse analysis showed measurable changes in the bridge's vibration signature years before failure. We built a system that listens continuously so engineers don't have to wait.

What it does

BridgeGuard AI detects structural damage using two data streams; vibration signals from accelerometers and bridge photographs fused into a single health score.

The vibration side extracts 19 features from each 10-second sensor window (RMS energy, crest factor, kurtosis, spectral band energies, modal frequencies, Parseval energy ratio) and runs them through a trained autoencoder. Since the autoencoder only learned healthy vibration patterns, damaged signals produce high reconstruction error, and that error is our anomaly score. The visual side uses a fine-tuned EfficientNet-B3 to detect surface defects. Both scores are fused (65% vibration, 35% visual) into a Green / Yellow / Red alert.

Validated on real data from the Route 345 Bridge in Waddington, NY are 30 sensors across 6 progressive damage scenarios. We also found a 25.3% monotonic drop in vibration amplitude across 9 days of real deployed bridge monitoring data, which is the kind of structural drift a biennial inspection would completely miss.

How we built it

Full Python pipeline: h5py for HDF5 data extraction → sliding window segmentation (10s, 50% overlap) → Butterworth bandpass filter (0.1–50 Hz) → FFT with Hanning window → 19-feature extraction including Parseval's theorem verification → StandardScaler normalization → PyTorch autoencoder (19→64→32→16→32→64→19) trained on healthy data only → 95th percentile threshold → interactive Plotly.js HTML reports.

Hardware: DT9857E-16 professional DAQ for our physical test rig, Physics Toolbox Suite for live demo, with a documented upgrade path to Raspberry Pi + ADXL355 (6.25 µg/√Hz noise floor, 64× better than a phone).

Challenges we ran into

660 damaged windows produced NaN kurtosis values traced to near-zero variance after bandpass filtering on quasi-static bearing displacement signals. Python f-strings conflicting with JavaScript ${} template literals in our HTML report generator caused late-night crashes. PyTorch load_state_dict mismatches from architecture drift between scripts. Phone accelerometer timing jitter (±20ms) made FFT analysis nearly unusable for the live demo.

Accomplishments that we're proud of

We used real data from a real bridge that was deliberately damaged. We detected a genuine structural drift signal in 9 days of live monitoring data without knowing it was there. The Parseval ratio as a direct damage feature is our own insight, confirmed as one of the top 5 most discriminative features. We validated across 4 completely independent datasets.

What we learned

Physical intuition and signal processing are inseparable. This isn't background theory, but it's why frequency features outperform time-domain features and why bolt removal shifts energy to higher frequencies while bearing displacement shifts it lower. We also learned that unsupervised anomaly detection is architecturally the right approach for structural monitoring, because you almost never have labeled damage data in the real world, but you always have healthy baseline data.

What's next for BridgeGuard AI

Full Raspberry Pi + ADXL355 deployment node running inference on-device. LSTM-based temporal drift detection to catch the kind of gradual RMS decline we found in the real monitoring data. Multi-node spatial localization which is not just "damage detected" but "anomaly concentrated at sensors A13–A18 near the 6.86m diaphragm connection." Open-source release as a dataset-agnostic structural health monitoring toolkit.

Built With

Share this project:

Updates

Submission history