Scoring a paper archery target used to mean walking downrange, squinting at holes, and eyeballing where one shot group ends and another begins. CompleteArchery replaces that with a photo: point a phone at the target, and a custom-trained computer vision model does the counting and grouping in seconds.
The Challenge
There's no off-the-shelf model for "find arrow holes in a paper target and tell me how they group." This is exactly the kind of problem generic AI APIs don't solve: a narrow, visually specific detection task with no public dataset, where the value is in training a model on your own labeled examples rather than wrapping someone else's general-purpose vision API.
What We Built
CypressBit designed and trained a custom object-detection model from scratch for CompleteArchery, then wired it into a production image-processing pipeline consumed by a native Flutter app:
- Custom-labeled training data. We hand-annotated a proprietary dataset of real target photos, marking each arrow hole with a bounding box, to train a purpose-built detector rather than relying on a generic pretrained model.
- Custom object detection in PyTorch. Using transfer learning on a Faster R-CNN backbone, we trained a model that detects individual "shot" objects in an uploaded photo, then applies non-max suppression to collapse duplicate, overlapping detections into clean, individual results.
- Unsupervised grouping. Detected shots are clustered with K-Means — but instead of hardcoding how many groups to expect, the pipeline tests a range of cluster counts and picks the best one automatically using silhouette scoring. A target with two tight groups and a target with five scattered ones are both handled correctly, with no manual input.
- Visual output, not just numbers. Computational geometry (convex hulls, offset with polygon clipping) draws a smooth, shaded boundary around each detected group directly on the original photo, so the archer sees exactly what the model saw.
The whole pipeline runs as an asynchronous job behind a token-authenticated REST API — a photo is uploaded, processed, and returned as an annotated image with a group count, with status tracked from upload through completion or error.
The Result
CompleteArchery, live at completearchery.com, turned a manual, subjective scoring ritual into an instant, consistent, photo-based analysis — a concrete example of custom computer vision solving a problem no general-purpose model was built to handle. It's the same underlying skill set — custom model training, image recognition, and applied ML — that carries directly into image-analysis, document-analysis, and inspection use cases for commercial and government clients.
The broader app layers scoring, challenges, and leaderboards on top of this pipeline, but the vision model is the part that couldn't be bought off the shelf — it had to be trained, tuned, and shipped by an engineering team willing to own the whole machine learning lifecycle, from labeled data to a production API.
Have a visual detection or classification problem with no off-the-shelf model? Tell us about it.