A web application that scans satellite imagery to detect Orthodox cross structures in Arctic regions using computer vision.
- Interactive map for selecting scan locations
- Real-time scan progress with WebSocket updates
- Template matching using OpenCV
- Export detections as GeoJSON or CSV
- Adjustable detection threshold and scan radius
- Python 3.10+
- Node.js 18+
- A Mapbox account (free) for the map display
git clone <repo-url>
cd cross-finder
# Create Python virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install backend dependencies
pip install -r backend/requirements.txt
# Install frontend dependencies
npm install --prefix frontendCreate frontend/.env:
VITE_MAPBOX_TOKEN=pk.your_mapbox_public_token_here
VITE_API_URL=http://localhost:8000
Get your Mapbox token at https://account.mapbox.com/access-tokens/ (use a public token starting with pk.)
Terminal 1 - Backend:
source .venv/bin/activate
cd backend
uvicorn main:app --reload --port 8000Terminal 2 - Frontend:
npm run dev --prefix frontendOpen http://localhost:5173 in your browser.
- Enter coordinates or click on the map to select a location
- Choose a scan radius (smaller = faster, more precise)
- Adjust detection threshold (higher = fewer false positives)
- Click "Start Scan" and watch detections appear in real-time
- Click on detections to zoom to their location
- Export results as GeoJSON or CSV
Place cross template images in the templates/ folder. For best results:
- Crop templates directly from satellite imagery at the same zoom level
- Use high-contrast images
- Templates should be roughly 30-60 pixels in size
- The system automatically creates rotated and scaled variants
cross-finder/
├── backend/ # Python FastAPI server
│ ├── api/ # REST endpoints + WebSocket
│ ├── detection/ # OpenCV template matching
│ └── services/ # Tile fetching, coordinate conversion
├── frontend/ # React + Vite + TypeScript
│ └── src/
│ ├── components/
│ ├── hooks/
│ └── api/
└── templates/ # Cross template images
- Backend: FastAPI, OpenCV, Pillow, httpx
- Frontend: React, TypeScript, Vite, Mapbox GL JS, Tailwind CSS
- Imagery: Google Satellite tiles
For easier deployment, you can use Docker:
# 1. Copy the example env file and add your Mapbox token
cp .env.example .env
# Edit .env and add your Mapbox token
# 2. Build and run
docker-compose up --build
# 3. Open http://localhost:3000To stop: docker-compose down
MIT