← Back to projects



Autonomous Driving & License Plate Recognition — 3rd Place
2021
PythonROSGazeboKerasOpenCV
Programmed a simulated autonomous vehicle in Python using ROS and Gazebo for UBC's ENPH 353 machine learning competition. The car navigated an urban course using computer vision for line following, detected crosswalks and waited for pedestrians to pass, and read license plates mounted throughout the environment.
Built three specialized CNNs in Keras — one for letters, one for numbers, and one for parking spot labels — along with four backup CNNs to handle common misclassifications (e.g. 8 predicted as 0, B predicted as A). Generated synthetic training data using OpenCV augmentations including Gaussian blur, rotation, and perspective transforms. Navigation was implemented as a state machine that traversed an inner loop first for high-value plates, then looped the outer ring indefinitely. Placed 3rd out of 16 teams with a near-perfect score.
Experimenting with different contours