Extract data points from scatterplot images as CSV. Upload an image, calibrate the axes, and download the digitized data.
- Drag-and-drop image upload (PNG, JPG, WEBP)
- Auto-detected axis lines with manual fiducial adjustment
- Hybrid digitization: blob detection + template matching
- Point overlay on original image
- Copy/download results as CSV
- CPU-only, no GPU required
docker-compose up
# Open http://localhost:8000Backend:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn backend.main:app --reloadFrontend:
cd frontend
npm install
npm run dev
# Opens at http://localhost:5173Tests:
source .venv/bin/activate
python -m pytest tests/ -v- Push to a Git repository
- Connect the repo to your hosting provider
- Set the build command:
docker build -t app . - Set the start command:
docker run -p 8000:8000 app - The app serves both API and frontend on port 8000
| Variable | Default | Description |
|---|---|---|
PORT |
8000 |
Server port |
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/api/upload |
POST | Upload plot image (multipart) |
/api/image/{id} |
GET | Retrieve uploaded image |
/api/detect-axes |
POST | Auto-detect axis lines |
/api/digitize |
POST | Extract data points |
- Upload: Image is validated (max 10MB, max 4000x4000, PNG/JPG/WEBP) and normalized to RGB
- Axis Detection: Hough line transform finds axis boundaries, optional OCR reads tick labels
- Calibration: User adjusts fiducial handles and enters axis min/max values
- Digitization: Hybrid method runs blob detection first, falls back to template matching for non-standard markers
- Export: Points displayed as table and available as CSV
- Backend: Python 3.11+, FastAPI, OpenCV, scikit-image, numpy, scipy
- Frontend: React 18, TypeScript, Vite
- Deployment: Docker (CPU only)