A full-stack prototype built for Turners Car Insurance to streamline vehicle quoting using AI image recognition. Developed as part of the Mission Ready HQ Full Stack Development diploma (Mission 1).
- Upload a vehicle photo and get an AI-powered prediction
- Two models running in parallel:
- Vehicle Type — identifies the category (e.g. sedan, SUV, van)
- Vehicle Model — identifies the specific make/model (e.g. Toyota Prado)
- Manual fallback selection if confidence is below threshold
- Confidence score displayed with each result
| Layer | Technology |
|---|---|
| Frontend | React + Vite |
| Backend | Node.js + Express |
| AI | Azure Custom Vision |
| Image handling | Multer |
├── backend/ │ ├── config.js │ ├── server.js │ ├── routes/ │ │ └── predict.js │ └── uploads/ # Sample test images included └── frontend/ └── src/ ├── App.jsx └── components/ └── ImageAnalysis.jsx
- Node.js v18+
- An Azure account with two Custom Vision projects set up (see Azure Custom Vision docs)
Azure setup tip: If your Custom Vision resources aren't populating when you create a new project, try switching to Firefox or Zen Browser. This is a known Chrome rendering issue — resources appear immediately in other browsers and Chrome usually picks them up afterwards.
git clone https://github.com/amyheritage/vehicle-image-classifier.git
cd vehicle-image-classifiercd backend
npm install
cp .env.example .envFill in your Azure credentials in backend/.env:
VISION_PREDICTION_ENDPOINT=<your-endpoint>
VISION_PREDICTION_KEY=<your-key>
PROJECT_ID=<your-project-id>
PUBLISHED_MODEL_NAME=<your-iteration-name>
VISION_V2_ENDPOINT=<your-endpoint>
VISION_V2_KEY=<your-key>
PROJECT_ID_V2=<your-project-id>
PUBLISHED_MODEL_NAME_V2=<your-iteration-name>
npm startcd frontend
npm install
cp .env.example .envThe default frontend/.env points to http://localhost:4000.
npm run devOpen http://localhost:5173 in your browser.
- Open the app in your browser
- Upload a photo of a vehicle
- Click Find my vehicle type
- View the AI prediction and confidence score
- Confirm the result or select manually if needed
Sample vehicle images are included in backend/uploads/ — a mix
of sedans, SUVs, vans, and other vehicle types. No need to source
your own photos to test the app.
If you want to retrain or extend the Custom Vision models, here's how the training data was sourced for this project.
The following open datasets were used to train both models:
- Vehicle Type dataset — Mendeley Data — all five vehicle type categories were used
- Vehicle Make/Model dataset — Mendeley Data — a selected subset of makes was used
For additional make/model images, you can use a browser save + terminal conversion method:
- Search for the vehicle make/model on Google Images
- Save the full page (
File > Save Page As > Webpage, Complete) - In the terminal, navigate to the saved folder and convert the HTML assets to images — this captures all images loaded on the page - 9min vid for instructions (https://www.youtube.com/watch?v=Mx8Ax1n7UjA&t=320s)
- Important: manually review and delete unusable images before uploading to Custom Vision. Interior shots, badges, and low-quality images will skew your model's training significantly.
- Use the official Microsoft documentation to set up your training project and publish your model iteration
- You'll need to create an Azure account and provision a Custom Vision resource before you can train
Never commit your .env files. Both backend/.env and
frontend/.env are listed in .gitignore. Use the .env.example
files as templates.