Web Perception: Three Months of Tinkering with Model Bounding Boxes Was Less Effective Than Coding My Own Judgment
An independent developer documents the complete detours taken while building a web perception system called EH. Initially using YOLO for visual localization, manual annotation bias and resolution dependency caused bounding box jitter, requiring three months of patching. Introducing the DOM reduced annotation inconsistency, but the model still jittered; ultimately, subjective judgments about pages were decomposed into executable code rules to create a cross-site reusable engine. The article includes throughput and coefficient of variation data across six sites, five sets of window condition tests, and the author's self-defined boundaries regarding generalizability.
The earliest motivation for building EH was simply laziness. There are too many repetitive operations in a browser: viewing pages, finding content, clicking controls, and switching pages—I wanted the computer to do it for me. When V2EX user niuheishou built the web perception system EH, the first engineering decision he faced was: should the model look, or should the code look?
He initially chose the model. He built a complete set of YOLO annotation tools for himself, designed annotation rules, and manually annotated them one by one. During his most intense three days, he slept only twelve hours, accumulating approximately 2,300 basic training samples. The training results looked good, but problems arose when actually applied to pages: the samples were mostly from fixed browser resolutions and zoom levels, and the bias from his manual annotations was seriously learned by the model. Large elements could be handled roughly, but the boxes for small elements often deviated wildly—a seemingly small error landing on a button could determine exactly what gets clicked.
For the next three full months, he struggled against this jitter in the boxes. He added geometric priors, tried GNN correction, performed morphological dilation; re-annotated, re-trained, and supplemented data under different zooms and resolutions. Each time he felt closer to solving the problem, changing the page state would reveal new biases.