The dataset I worked with was Google Streetview, since it is a massive database of images documenting nearly every road in the U.S. and other countries. Stop signs almost always appear around intersections of roads and they inherently have a strong relationship to the environment around them, so to explore this dataset, I filtered it down by only focusing on stop signs that were tagged by users of OpenStreetMap. After scraping images containing these stop signs off of Streetview using a Node.js script, I then further filtered through these images to find the images with stop signs clearly visible with an OpenCV program. These images were then transformed so that the stop sign was at the center.
The current version of the stop sign filter works by identifying the reddest pixels of the image, applying erosion and dilation, and then finding a blob on the screen with a certain amount of area. It then translates that blob to the center.
Initial versions tried to identify the word “stop” in the red blob and perspective unwarp the image, but this resulted in unpleasant results:
The process of filtering this data taught me more about stop signs than I expected, and suggested some future ideas. Some of the cases that made the stop signs hard to detect, like graffiti or physical wear, would be interesting things to explore on their own.