<i>An anonymized case study: how we built a computer-vision tool to pre-score roof damage from drone photos for a roofing contractor in Apopka after storm season — and why we never let the AI write the final report.</i>
(Client details are anonymized and some specifics composited at the client’s request.)
Last spring, a roofing contractor in Apopka called me in a panic. They had 200 homes waiting for inspection after a hailstorm rolled through Seminole County. Their three-man inspection crew could do maybe eight roofs a day. At that rate, homeowners were waiting three weeks for a quote. Competitors were snatching up the easy jobs. The owner said, “I need to triage these roofs fast. Can AI help?”
I told him yes, but with a catch: we wouldn’t replace his inspectors. We’d build a tool to pre-score drone photos so his crew could skip the clean roofs and focus on the ones that actually needed a ladder. Here’s what we built, how it worked, and what I’d change if we did it again.
The Situation: 60 Missed Calls a Day and a Growing Backlog
This was a mid-sized roofer with about 15 employees and a solid reputation in Apopka and surrounding areas. After a storm, they’d get 60 to 80 calls a day. Their process was standard: send a drone operator to capture overhead photos, then have an inspector review every image and drive out to the property. The bottleneck? The human review. Each roof took 30 to 45 minutes of photo analysis alone.
The owner had tried hiring more inspectors, but good ones are hard to find, and the work’s seasonal. He’d also looked at off-the-shelf AI inspection tools, but they were either too expensive (charging per roof) or required uploading images to a third-party server. Privacy concerns. He wanted something that ran locally and could learn from his own data.
That’s when I stepped in. We agreed on a two-phase project: first, build a proof-of-concept that could classify damage severity on a 1–5 scale; second, integrate it into their existing workflow so it actually saved time.
What They’d Tried Before: Manual Triage and a Spreadsheet Nightmare
Before we started, the team was using a shared Google Drive folder and a spreadsheet. The drone pilot would dump 50 to 100 photos per roof into a folder. An inspector would open each image, zoom in, and note any damage in a row. Then they’d decide whether to schedule a site visit. Tedious. Error-prone. Impossible to prioritize.
They’d experimented with a simple rule: “if more than five tiles look cracked, flag it.” But that missed subtle granule loss and didn’t account for shadows or glare. The owner knew he needed something smarter. He just didn’t know where to start.
I ran a quick AI readiness assessment and found that their data was actually solid — thousands of labeled photos from past inspections. That was the green light.
The AI Work: Training a Computer Vision Model With Local Data
We built a computer vision pipeline using a pre-trained ResNet-50 model and fine-tuned it on their photo library. The key steps:
- Data preparation: We gathered about 5,000 drone photos from past inspections, each already labeled by their crew as “no damage,” “minor,” “moderate,” or “severe.” We augmented the dataset with rotations, flips, and brightness adjustments to handle different lighting conditions.
- Feature extraction: Instead of training from scratch, we used transfer learning. The model already understood edges, textures, and patterns. We just retrained the last few layers to focus on roofing damage — cracked tiles, missing granules, dented metal flashing.
- Scoring system: The model output a damage score from 0 to 1. We mapped that to a 1–5 scale: 1 (clean), 2 (minor wear), 3 (moderate damage, needs inspection), 4 (significant damage, likely claim), 5 (severe, immediate attention).
- Deployment: We wrapped the model in a simple web app that the drone pilot could use to upload photos after each flight. The app processed images in batches and returned a summary: “Roof #12: Score 4.2 — 18 photos flagged as severe.”
One challenge: the model initially struggled with shadows from trees and antennas. We added a preprocessing step that normalized brightness and contrast. It added 10 seconds per roof but cut false positives by 40%.
Where We Kept a Human in the Loop (and Why)
From day one, the owner and I agreed the AI would never write the final inspection report. Why? Two reasons:
- Liability: Insurance companies require a licensed inspector’s signature. An AI can’t certify damage.
- Context: The model could miss things a human would catch — like a previous repair that looked like damage, or a gutter that was fine but had a weird reflection.
So we designed the workflow so the AI pre-scores every roof and highlights the top 20% of images that need human review. The inspector then spends 5–10 minutes per roof instead of 30–45. They still drive out to properties with scores of 3 or higher, but they skip the ones that score 1 or 2. That alone cut site visits in half.
The owner later told me, “I never trusted the AI to make the final call, but I trust it to tell me where to look.” That’s exactly right.
Measured Results: 12 Hours Saved Per Week and a Cleared Backlog
After two months of use, here’s what we measured:
- Inspection time per roof: Dropped from 40 minutes to 12 minutes on average (including AI processing and human review).
- Backlog cleared: The 200-home queue was gone in three weeks instead of the projected eight.
- Site visit reduction: 55% of roofs scored 1 or 2 and were handled without a ladder. The owner estimated that saved $4,500 in fuel and labor that month.
- Accuracy: We ran a blind test on 100 roofs that had already been inspected. The AI matched the human severity rating 89% of the time. The 11% misses were mostly cases where the human had overestimated minor damage — the AI was actually more consistent.
One unexpected win: the tool helped them prioritize claims for insurance adjusters. When they submitted a report with AI-scored photos, adjusters processed claims faster because the evidence was already organized.
“The AI didn’t replace my inspectors — it made them twice as productive. We went from drowning in photos to actually getting ahead.” — The client, after the first month
What We’d Do Differently: Honest Caveats
No project’s perfect. Here’s what I’d change if we did it again:
- Better data labeling upfront: The client’s historical labels were inconsistent — one inspector’s “moderate” was another’s “severe.” We spent two weeks re-labeling 1,000 images to train a more reliable model. If you’re considering this, start with a clear rubric for your team.
- Edge cases we didn’t anticipate: The model performed poorly on flat roofs and metal roofs because 90% of their training data was asphalt shingles. We had to collect additional photos for those roof types. If your business covers multiple materials, plan for that.
- Integration with their CRM: The web app worked fine, but the inspector still had to copy scores into their CRM manually. A proper integration via API would’ve saved another 3–4 hours per week. We’re building that now as a follow-up.
- Seasonal drift: The model was trained on spring/summer photos with clear skies. When fall came and leaves covered some roofs, accuracy dipped. We retrained with a small batch of autumn images and it recovered, but it’s a reminder that models need periodic updates.
If you’re thinking about a similar project, I’d recommend starting small — maybe 200 photos — and test the accuracy before scaling. Also, a fractional AI officer can help you scope the project without committing to a full hire.
What This Means for Other Central Florida Businesses
This approach isn’t just for roofers. Any business that relies on visual inspection — property management, agriculture, solar panel installers — can use computer vision to triage work. The key is to treat AI as a first pass, not a final answer.
In Central Florida, where storm season creates predictable surges, a tool like this can be the difference between keeping customers and losing them to competitors. The roofer I worked with now advertises “48-hour drone inspection” as a differentiator. That wouldn’t have been possible without the AI pre-score.
If you’re curious about whether your own business could benefit from a similar system, I’d be happy to talk. Get in touch and we can run a quick feasibility check.
The AI didn't replace my inspectors — it made them twice as productive. We went from drowning in photos to actually getting ahead.
Frequently asked questions
How accurate was the AI model in scoring roof damage?
In a blind test on 100 roofs, the AI matched the human severity rating 89% of the time. The 11% misses were mostly cases where the human had overestimated minor damage — the AI was actually more consistent.
Why didn't you let the AI write the final inspection report?
Two reasons: liability (insurance requires a licensed inspector's signature) and context (the AI can miss things like previous repairs or reflections). The AI pre-scores damage, but a human always makes the final call.
How much time did the AI tool save per roof inspection?
Inspection time dropped from 40 minutes to 12 minutes on average, including AI processing and human review. That saved about 12 hours per week for the inspection team.
What kind of AI technique did you use for the roof damage detection?
We used transfer learning with a pre-trained ResNet-50 model, fine-tuned on the client's 5,000 labeled drone photos. The model outputs a damage score from 0 to 1, mapped to a 1–5 severity scale.
Can this AI approach work for other types of visual inspections?
Yes. Any business that relies on visual inspection — property management, agriculture, solar panel installers — can use computer vision to triage work. The key is to treat AI as a first pass, not a final answer.
What was the biggest challenge in building this tool?
The model initially struggled with shadows from trees and antennas. We added a preprocessing step to normalize brightness and contrast, which cut false positives by 40% but added 10 seconds per roof.
Ready to talk it through?
Send a one-line description of what you are trying to do. I will reply within one business day with a plain-English next step. Email or use the form →