The problem
The client is a regional electric utility with crews that inspect poles, transformers, and substations, often in rural areas with no cellular coverage. Their existing inspection app required a connection to submit reports, so inspectors took photos, scribbled notes on paper, and rebuilt each report at home in the evening. Supervisors estimated a little over two hours of evening paperwork per inspector per day, and reports often arrived a day or two late, with photos that didn't match their notes.
What we actually did
Offline-first architecture from the start
We rebuilt the app so everything an inspector needs works with no network. Asset lists and inspection checklists are preloaded for the day's route, reports are stored in an encrypted local database, and a background sync engine uploads completed reports, with conflict resolution, when connectivity returns. Every record carries a local timestamp and GPS fix so the office sees exactly when and where each observation was made.
On-device vision for defect tagging
We fine-tuned a compact image classification model on around 18,000 labeled photos from the utility's own archive, covering the defect categories inspectors report most: cracked crossarms, leaning poles, damaged insulators, vegetation encroachment, and corrosion. The model was quantized and exported to Core ML for iOS and to TensorFlow Lite (now LiteRT) for the Android devices some crews use. It suggests defect tags as the photo is taken; the inspector confirms or corrects with one tap, and every correction is logged for the next training round.
On-device speech-to-text for notes
Inspectors now dictate notes instead of writing them. We run a small speech recognition model on the device, then apply a short list of domain-term corrections (equipment names and utility abbreviations that general models mishear). The transcript attaches to the specific asset and photo being inspected, which removed the photo-to-note mismatch problem entirely.
Challenges and tradeoffs
- Older devices in the fleet. Some crews carried phones several years old. We benchmarked inference time on the slowest supported device and kept the vision model small enough to classify a photo in well under a second there.
- Glare, rain, and night work. Accuracy dropped on low-light photos, so the app detects poor image quality and asks for a retake before classifying, rather than returning a confident wrong answer.
- Model updates without breaking the field. New model versions ship through the app's own update channel and are validated against a held-out photo set before release, so a bad model never reaches a truck.
Results
Across the pilot crews, inspections completed per shift rose 35%, mostly because inspectors stopped pausing to write detailed notes on site. The evening retyping step disappeared, and on-device defect tags matched the inspector's final classification 91% of the time. Reports now reach the maintenance planning team the same day, which shortened the time from defect found to work order created.
What we'd do differently
We would collect low-light and bad-weather photos deliberately from the start. The archive we trained on was biased toward clear daytime images, and closing that gap took an extra labeling round we could have planned for.