Dots converts floorplan images into tactile-friendly maps and attaches a QR link so anyone can scan and ask map-specific questions (text or voice) like:
- “Where is the entrance?”
- “Where are the stairs?”
- “How many exits are there?”
This repo contains:
- A Python backend (FastAPI) intended to run on a public server (e.g. Vultr) that:
- generates tactile maps
- creates a per-map
map_id - serves
/m/{map_id}(text Q&A) and/m/{map_id}/voice(voice Q&A)
- Fetch.ai uAgents that can be hosted on Agentverse for:
- room scan intake
- payment (Dorado testFET)
- floorplan → tactile generation
- wayfinding Q&A
Note: This project intentionally avoids OpenAI dependencies in the main tactile pipeline.
backend/main.py: FastAPI serverbackend/map_store.py: SQLite registry storing:map_idtactile_png_url/tactile_pdf_urlcontext_text(map-specific grounding)- chat history keyed by
(map_id, session_id)
backend/layout_brief.py: prompt builders for map-grounded Q&A
agents/tools.py: downloader, Gemini tactile generation, Gemini context extraction, uploader, optional ADA/CV pipelinefloorplan_parser/connectdots_pdf.py: ConnectDots-style tactile PDF renderer (optional; supports “no numbering” mode)
Depending on your deployment, you may run/host:
- Room Scan: intake RoomPlan scans / payloads
- Dorado Pay: testFET gating + payment verification
- Floorplan → Tactile Map: floorplan URL → tactile output
- WayFind: answers questions grounded in a specific map
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCreate .env at repo root (never commit it):
GEMINI_API_KEY=...
ASI_ONE_API_KEY=... # or ASI_API_KEY=...
ELEVENLABS_API_KEY=...
ELEVENLABS_AGENT_ID=...
PUBLIC_BASE_URL=http://127.0.0.1:8000uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reloadcurl -X POST "http://127.0.0.1:8000/maps/from-tactile-upload" \
-F "file=@/path/to/tactile.png"The response includes:
chat_url: open in browser for text Q&Avoice_url: open in browser for ElevenLabs voice Q&A
curl -X POST "http://127.0.0.1:8000/maps/from-floorplan-url" \
-H "Content-Type: application/json" \
-d '{"image_url":"https://…/floorplan.png","model":"gemini-3-pro-image-preview"}'- Run the same FastAPI backend on the server.
- Set
PUBLIC_BASE_URLto your public origin, e.g.:http://<your-vultr-ip>:8000or your HTTPS domain.
- Ensure
.envis present on the server with:- Gemini key
- ASI:One key (optional for text Q&A)
- ElevenLabs key + agent id (required for voice)
tmpfiles.orglinks are temporary; for production, replace with durable storage (S3/R2).- Tactile-only images may be hard to interpret perfectly; best results come from generating context from the original floorplan or storing a structured layout.
