← Back to the blog

Plane Spotting

Introduction

📘 About the post

This project was completed for Assignment 1 in CSCI 6510: Trustworthy AI, a course exploring the opportunities, limitations, and risks of modern AI systems.

Learn more: Trustworthy AI – CSCI 6510

As AI systems are increasingly used for more complex tasks, there is growing interest in systems that can do more than generate text responses. Agentic systems can work through a problem over multiple steps, use tools and external information, and make decisions about how to proceed based on what they find. This makes them particularly useful for tasks that involve several stages, or where the path to a solution is not entirely known in advance.

For this assignment, we were tasked to explore how these capabilities could be applied to a problem of our choosing.

Why Aircraft Spotting?

For my project, I wanted to choose a problem where I had enough background knowledge to evaluate the agent’s results critically. Given my niche expertise in air traffic control research, aircraft identification was a natural choice.

At first glance, aircraft identification appears to be a traditional classification problem: show a computer vision model an image of an aircraft and ask it to identify the type. In practice, however, the process is rarely that simple. To accurately identify an aircraft spotters may rely on a combination of visual details, including:

  • Fuselage proportions
  • Wing shape
  • Engine placement
  • Cockpit windows
  • Landing gear
  • Tail geometry

Additional context can also provide important clues. Airline liveries, for example, can help identify the operator, while fleet information can narrow down which aircraft types that airline actually operates. These observations can then be verified through external sources such as web searches. Therefore, accurately identifying an aircraft type may require combining several pieces of visual and contextual evidence.

This combination of visual analysis, external information, and step-by-step reasoning made aircraft spotting a useful problem for exploring an agentic approach. It led to the central question:

Could an AI agent use multiple sources of information to help identify and organize aircraft captured on video?

What Does the Agent Need to Do?

The task was to take a video containing multiple aircraft movements and turn it into a set of organized, identified clips. To do that, the agent needed to:

  1. Review the full video
  2. Find each aircraft present in the video
  3. Separate the aircraft movements into individual clips
  4. Identify the aircraft using both visual evidence and supporting data sources

Writing the Prompt as a Project Brief

Rather than giving the agent a short instruction and leaving the rest open to interpretation, I treated the prompt more like a project brief.

It helps to think about the opposite. Imagine being handed a task at work with barely any context. You would probably have questions almost immediately: What exactly am I trying to achieve? What information should I use? What should the final result look like? The less detail you are given, the more you have to fill in the gaps yourself. And while agents can decide how to approach a task, they face much the same problem. They still need enough context to understand the goal, know what resources are available, and make sensible decisions along the way.

In this prompt, I defined the objective, specified the tools and data sources the agent could use, and highlighted the details that mattered when identifying each aircraft. The aim was to give the agent a clear procedure to work with.

The instruction set can be accessed by clicking on the box below:

You are an autonomous video-processing assistant for an avid plane spotter.

Context

The plane spotter records long plane-spotting sessions and later manually separates the footage into individual aircraft movements. Each movement should become its own video clip and be classified and organized. Because the plane spotter now has limited time, your task is to automate as much of this workflow as reasonably possible.

Read the full instruction set ↗

From there, the overall workflow can be summarized as an agentic loop:

User Prompt Read instructions.md in full Understand the task requirements • Objective • Inputs & tools • Processing steps • Outputs & naming • Validation & deliverables Build an execution plan Execute the task systematically Use agentic tools search · read · run · write act observe repeat until the step is complete Investigate uncertainty Handle failures and limitations Validate all outputs Outputs correct? Final completion report • Results • Generated files • Validation • Limitations • Deviations yes no — refine the work

This agentic loop is written out in the prompt, which is separate from the instruction set above. I ran the agent using Claude Opus 5, the latest Claude Opus model available at the time of writing. Read the prompt ↗

Generated Output

The task produces a collection of organized video clips, along with files recording how the work was completed and how the agent reasoned behind each identification.

To make the results easier to review, I also tasked the agent with producing a webpage. The webpage can be accessed by clicking on the image below:

Preview of the generated webpage: a catalog of aircraft movements, each clip shown as a card with a still from the footage, the aircraft model, the operator and its identification confidence. Click to open the catalog ↗

The agent also produced a detailed processing log documenting its reasoning and workflow:

AIRCRAFT MOVEMENT EXTRACTION - PROCESSING LOG

East Midlands Airport (IATA: EMA / ICAO: EGNX), Castle Donington, Leicestershire

Processed: 2026-09-07

Operator of pipeline: autonomous video-processing assistant

Read the full processing log ↗

Interesting Observations

1. Reasoning about where to clip: One of the interesting observations for me was how the agent kept changing its approach to generating a clip. It first tried image-based scene detection, then moved to frame differences and audio based detection, and eventually, it settled on a more systematic visual review, to find reliable clip boundaries. I found it interesting to see the agent move between methods, and when the approach did not work, it reasoned to find a better approach.

--------------------------------------------------------------------------------
3. MOVEMENT DETECTION - WHAT WORKED AND WHAT DID NOT
--------------------------------------------------------------------------------
Attempt 1 - ffmpeg scene detection (`select='gt(scene,0.25)')`.
  RESULT: FAILED. Zero cuts detected across the whole video; the maximum scene score
  anywhere was 0.238. Cause: the compilation is shot largely from fixed vantage points
  around the same airfield, so a cut from one recording to the next produces almost
  identical colour histograms (sky over grass over runway). Histogram-based scene
  detection is blind to these cuts.

Attempt 2 - raw frame-difference (mean absolute difference at 96x54 grey, all 41,149
  frames), plus a "peak sharpness ratio" (instantaneous difference divided by the local
  median difference) designed to separate instantaneous cuts from sustained panning.
  RESULT: PARTIAL. It found a handful of genuine cuts (05:31, 08:00, 14:06, 20:03) but
  was dominated by false positives from (a) the camera panning to track aircraft and
  (b) regularly spaced (~1.23 s) anti-collision beacon flashes at 12:02-12:15 and
  15:51-15:59, which produce large brightness deltas that mimic cuts.

Attempt 3 - audio discontinuity (log-RMS envelope at 0.1 s resolution).
  RESULT: WEAK. The soundtrack is dominated by wind and near-continuous engine noise
  and appears loudness-normalised, so the envelope sits at 6-8/8 almost throughout and
  discriminates poorly. It did reliably mark a few hard cuts by near-silence
  (00:08-00:13, 08:08, 12:56, and the 22:46 outro).

Attempt 4 - aircraft-presence timeline from object detection.
  1,373 frames sampled at 1 fps were run through YOLO11; an aircraft was detected in
  1,232 of 1,373 frames (89.7%). Because aircraft are visible for nearly the whole
  video, presence alone produced only 11 blocks, the largest spanning 6m48s and
  containing many separate events. Insufficient on its own.

METHOD ACTUALLY ADOPTED - systematic visual review.
  The full video was rendered as 20 labelled contact sheets (one frame every 2 s,
  timestamp burned in), and every ambiguous region was re-rendered at 1-second
  resolution. Movement boundaries, landing-versus-takeoff calls and aircraft
  identification were then made by direct inspection, using the detector only to
  locate the aircraft within each frame for automatic high-resolution zoom crops.
  This was slower than an automatic cut list but is the only approach that produced
  reliable boundaries on this material.

Processing log — movement detection ↗

2. Compiling different pieces of information: Another interesting observation was how the agent combined several clues to arrive at an aircraft identification. The model appeared to reason across airframe geometry, livery, aircraft registration, and published fleet or route information rather than relying on any single feature. For example, in one instance, it identified an aircraft as an A321neo partly because Jet2’s “only Airbus type” is the A321neo.

Airbus A321neo — Jet2

TakeoffNarrow-bodyPassengerMedium confidence
Clip
0001
Registration
Unknown
Airport
EMA / EGNX
In the source video
00:00:16 – 00:01:33
Duration
77 s

Departure filmed from beyond the runway end; take-off roll visible from ~00:36 and rotation ~00:41, then climb-out overhead. 'Jet2holidays' titles clearly legible. Airbus A320-family confirmed by sharklet wingtips, large circular engine nacelles and Airbus fin/stabiliser shape; A321neo inferred because the A321neo is Jet2's only Airbus type. Boeing 737-800 considered and rejected on wingtip and nacelle shape. Registration not legible.

Footage © EMAplanespotting · watch this moment ↗

Clip 0001 — Airbus A321neo, Jet2

3. Reasoning through visual features: It was also interesting to see how the agent was able to capture text on the belly of an aircraft, which, to me at least, looks very difficult to read.

ATR 72-600 — Loganair

TakeoffTurbopropPassengerMedium confidence
Clip
0002
Registration
Unknown
Airport
EMA / EGNX
In the source video
00:01:34 – 00:02:39
Duration
65 s

'Loganair' titles and logo legible on the lower fuselage during the overhead pass. High-wing twin turboprop with T-tail identifies the ATR family; ATR 72-600 inferred from Loganair's current turboprop fleet (ATR 42 cannot be fully excluded from this angle). Landing gear seen retracting during the climb confirms Takeoff. A registration is painted on the wing but is not legible.

Footage © EMAplanespotting · watch this moment ↗

Clip 0002 — ATR 72-600, Loganair

Was it Correct?

The results produced by the agent were largely accurate, particularly in cases where it expressed a high degree of confidence. Nevertheless, several examples show that the model could still arrive at incorrect conclusions.

One clear example is a DHL aircraft that the agent classified as taking off, even though the footage clearly shows the aircraft landing.

Unknown — DHL

TakeoffUnknownCargoLow confidence
Clip
0008
Registration
Unknown
Airport
EMA / EGNX
In the source video
00:15:33 – 00:16:04
Duration
31 s

Night departure. DHL identified with confidence from the yellow fin carrying the red DHL logo. The aircraft is a twin-engine jet freighter but the darkness prevents a reliable variant call between the Boeing 757-200F and 767-300F that DHL operates at EMA, so the model is recorded as Unknown rather than guessed. Small operator titles are present on the forward fuselage but could not be resolved.

Footage © EMAplanespotting · watch this moment ↗

Clip 0008 — DHL freighter, Landing; incorrectly cataloged as Takeoff

Another notable error concerns the identification of the airline. In one case, the model’s reasoning initially suggested that the aircraft belonged to the AirOne fleet, yet its final classification assigned it to One Air. This discrepancy was likely caused by conflation, as several One Air aircraft appeared elsewhere in the video and may have influenced the model’s final prediction.

Boeing 747-400F — One Air

LandingWide-bodyCargoMedium confidence
Clip
0005
Registration
Unknown
Airport
EMA / EGNX
In the source video
00:08:40 – 00:09:20
Duration
40 s

Four-engine Boeing 747-400 freighter wearing the red AeroTransCargo 'atc' tail with 'AIRONE' fuselage titles. One Air leases its 747-400F/747-400ERF aircraft from AeroTransCargo, which explains the mixed markings. A Moldovan ER- registration is painted on the rear fuselage but is not legible. -400F versus -400ERF could not be determined.

Footage © EMAplanespotting · watch this moment ↗

Clip 0005 — Boeing 747-400F, AirOne; incorrectly cataloged as One Air

These were not the only errors observed. Several other inconsistencies appear throughout the model’s reasoning, including incorrect timing of the different stages of takeoff, such as rotation and initial climb. Rather than cataloguing every individual instance here, I leave these additional examples for the reader to explore through the interactive interface.

Would I Trust the Results?

As for whether I would trust the results, I would do so only after visually reviewing the aircraft and verifying that the agent’s classification is supported by the available evidence. I would treat the agent’s output as a possibility rather than as a definitive truth, particularly in cases where the identification is uncertain.

Although the agent was largely accurate, several examples were observed to have been misclassified. These included incorrect airline identifications, confusion between different stages of flight, and cases where the final classification did not fully align with the model’s own reasoning. With a longer plane spotting video, it is reasonable to expect that additional misclassifications of this kind could occur.

Nevertheless, the tool could still be highly valuable because it could significantly accelerate the aircraft identification process by quickly narrowing down possible aircraft types, airlines, and flight phases. Human review could then serve as a validation step, helping resolve ambiguous cases and correct occasional errors.

Conclusion

Overall, I see the agent as a promising tool for assisting with aircraft identification. Its ability to quickly narrow down possible identifications could make the process more efficient, while the errors we observed highlight the importance of keeping a human involved in the final decision.


Footage by EMAplanespotting, from “20 + mins of awesome landings and takeoffs at East Midlands Airport”. All rights remain with the channel.

Code and outputs: CSCI-6510-Trustworthy-AI / assignment_1