THERMALBATS
Pteropus medius · drone thermal survey · Bangladesh · 8–19 Aug 2025

Counting flying foxes by their body heat

The Indian flying fox is the reservoir of Nipah virus in Bangladesh. We flew a thermal drone in orbits around its roost trees in Naogaon, Rajshahi and Faridpur, detected every bat in the footage, de-duplicated repeat passes, and read each animal's body-surface temperature.

Roost atlas

Every roost we flew

Circles are sized by census count and coloured by mean body-surface temperature. To protect the roosts, each circle is drawn several kilometres wide around a shifted centre, so it shows the area a roost is in, not the tree. Select a roost to see its orbit video and readings. Some roosts were flown more than once, so the panel lists every flight at that site.

27 °C35 °C
no video census (stills only)
One orbit per flight

Roost videos

Each clip is the drone's first complete 360° pass around the roost (the camera heading turning a full circle), sped up, with the detector's boxes and a running count of unique bats. Where no orbit closed inside the tracked footage, the clip shows the busiest three minutes and is labelled as a segment.

Body-surface temperature

Temperatures and counts by flight

Body-surface temperature by flight

Select any row for a summary. Line spans the minimum to maximum reading; the bar is the mean ± 1 SD; the dot is the mean. Sorted warmest to coolest. Video readings are calibrated estimates, still-photo readings are radiometric measurements.

Census: every pass vs first orbit

Grey is every unique track in the video; colour is the corrected census. Repeat laps re-count the same colony.

Mean temperature by local time of flight

Each roost was flown in one short session, so time of day and roost are tangled. Read this as a caution, not a daily cycle.

How the numbers were made

Methods and limits

  • Aircraft. DJI Matrice 4T, paired thermal and RGB video plus radiometric thermal stills. Times are Bangladesh local (UTC+6), corrected from an aircraft clock left on US Central time.
  • Detection. A custom RF-DETR model (Roboflow) finds bats in each frame; a tracker gives each bat an ID across brief occlusions.
  • Census. The tracker does not re-identify a bat on the next lap (0–5% cross-lap re-identification on six multi-lap flights). The census therefore counts only the first complete orbit. Flights that never closed an orbit are left uncorrected and should be read as upper bounds.
  • Temperature. Radiometric stills give measured temperatures (DJI Thermal SDK v1.8). Video carries no radiometric data, so video sightings are estimated from a per-roost colour calibration built on those stills.
  • Sites vs flights. The survey logged 24 flights. Several were repeat visits to the same trees: flights 008, 009 and 011 are one roost, and so are 003 + 005, 004 + 010, 014 + 016, and 020 + 023 + 035 + the unfiled flight. This page groups flights within 400 m into one site, giving sites.
  • Totals. The headline census adds the largest single-flight count at each site (). Adding every flight gives , which counts repeat-visited roosts more than once.
  • Anomalies. A bat is flagged warm or cool only against its own roost. Flags are a screening step, not a diagnosis; a cool “bat” can be a false detection on cold background.
  • Location privacy. Roost positions are not published. Each site appears as a circle at least 6 km across whose centre is shifted 1–3 km from the roost, the map stops zooming at district scale, and the drone's GPS readout is masked in every clip and still.
  • Coverage. Five flights (021–024, 035) have radiometric stills but no tracked video, so they have temperatures but no census.