Project Info
Inspiration
How many times a day do you pull out your phone to identify a landmark, check the air quality, or find your next turn? We wanted to eliminate that friction. OmniScope was born from the idea that contextual, AI-powered information should live in your line of sight, not behind a screen. We envisioned a world where exploring your surroundings feels effortless, immersive, and intelligent.
What it does
OmniScope is a wearable AI assistant that brings the digital and physical worlds together. Built with Xreal AR glasses and a Raspberry Pi, it processes real-time camera feeds, GPS data, and environmental sensor inputs to deliver instant, contextual insights. Whether you're identifying a monument, checking air quality, or navigating city streets, OmniScope overlays this information seamlessly through AR, keeping your hands free and your eyes on the world.
How we built it
We built OmniScope as a fully integrated hardware-software system. Our setup combines: Xreal AR glasses for immersive, hands-free visual display Raspberry Pi + camera module for on-device processing Claude Sonnet 4 (Vision) for real-time image understanding and contextual analysis iOS companion app for control, data syncing, and Google Maps integration The workflow is simple: point your camera, tap “Capture” on the app, and OmniScope analyzes what it sees, cross-referencing GPS data to provide detailed historical or environmental context. We also implemented turn-by-turn navigation over AR, synced wirelessly from the iOS app, and a custom interface for air quality and weather visualization.
Challenges we ran into
We faced: Accurate navigation updates on both iOS app and AR display. Accessing Weather and AQI properly, making sure they're accurate. Bypassing iOS' hotspot client isolation problem.
Accomplishments we're proud of
We achieved full hardware integration, a seamless AR user interface, and end-to-end AI scene understanding. Seeing the system identify landmarks and overlay relevant context in real time was a true “wow” moment for the team.
What we learned
We learned how critical context-aware design is for wearable tech; balancing information richness with unobtrusive presentation. We also deepened our understanding of multimodal AI (vision + text), embedded system optimization, and the importance of efficient cross-device communication. Above all, we learned that the future of computing is not in our pockets, it’s in our perception.
What's next
Next, we plan to refine OmniScope into a consumer-ready product by: Miniaturizing the hardware into a sleeker, all-in-one module Expanding context recognition with offline AI models for privacy Enhancing AR UX with dynamic overlays and gesture/voice controls Adding more functionalities, such as real-time public transit navigation Activity tracking
OmniScope
Augmented Reality Information Display System for Smart Glasses
OmniScope is an integrated AR system that provides real-time environmental data, AI-powered scene analysis, and turn-by-turn navigation through smart glasses. The system combines an iOS companion app with a Raspberry Pi backend to deliver contextual information directly to your field of view.
Team
- Michael Thompson
- Joseph Bae
- Eugenio Ramirez
- Enjun Li
Overview
OmniScope transforms consumer AR glasses (Xreal Air 2 Pro) into a powerful heads-up display by combining:
- iOS Companion App: Captures GPS location, fetches weather data via Open-Meteo API, retrieves air quality from Google Cloud AQI API, and provides turn-by-turn navigation using Google Maps API
- Raspberry Pi Backend: Processes camera images through Claude AI for scene analysis and serves as the central data hub
- AR Display: Renders three simultaneous information panels on smart glasses with a frosted glass aesthetic
Core Features
1. Environmental Monitoring
- Real-time temperature and weather conditions via Open-Meteo API (free, unlimited)
- Air Quality Index (AQI) with color-coded health levels via Google Cloud AQI API
- GPS coordinates display
- Humidity and wind speed data
2. AI-Powered Scene Analysis
- Captures images using Raspberry Pi camera module
- Analyzes architectural and historical context via Claude Sonnet 4 API
- Displays landmark identification, architectural style, and historical facts
- Sophisticated prompting for scholarly depth and cultural sensitivity
- Auto-expires after 45 seconds to minimize visual clutter
3. Turn-by-Turn Navigation
- Google Maps integration with real-time directions
- Visual arrow indicators for maneuvers (turn, merge, straight, etc.)
- Distance tracking in feet/miles with real-time GPS updates
- Step-by-step instructions displayed in top-center panel
- Automatic route following with current position tracking
4. Data Persistence
- Search history tracking for quick re-navigation
- Historical capture records stored locally on iPhone
- Recent searches accessible from navigation interface
System Architecture
┌─────────────────────────────────────────────────┐
│ iPhone App │
│ - GPS Tracking │
│ - Open-Meteo API (weather) │
│ - Google Cloud AQI API (air quality) │
│ - Google Maps API (navigation) │
│ - User Interface │
└───────────────────┬─────────────────────────────┘
│ HTTP/JSON
v
┌──────────────────┐ ┌──────────────────┐
│ Raspberry Pi │ │ Claude API │
│ - Flask Server │<------->│ Vision Analysis │
│ - Camera Module │ └──────────────────┘
│ - Data Hub │
└────────┬─────────┘
│ HDMI
v
┌──────────────────┐
│ AR Glasses │
│ - Pygame Display│
│ - 3 Info Panels │
│ - Frosted Glass │
└──────────────────┘
Technical Stack
Hardware
- Raspberry Pi 4 (4GB+ RAM recommended)
- Pi Camera Module v2/v3 (for scene capture)
- Xreal Air 2 Pro Glasses (AR display)
- Micro-HDMI to USB-C Adapter (with DP Alt Mode support)
- iPhone (iOS 16+)
Software
- iOS App: Swift, SwiftUI, CoreLocation, MapKit
- Backend: Python 3.9+, Flask, Picamera2, Anthropic SDK
- Display: Pygame, NumPy
- APIs: Open-Meteo (weather), Google Cloud (AQI + Maps), Claude Sonnet 4 (AI)
Key Dependencies
Flask 3.0.0
pygame 2.5.2
anthropic 0.39.0
python-dotenv 1.0.0
requests 2.31.0
picamera2 (system package)
Quick Start
1. Raspberry Pi Setup
# Clone repository
git clone https://github.com/Jbae04/OmniScope.git
cd OmniScope
# Install system dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv python3-picamera2
sudo apt install -y libsdl2-dev libsdl2-image-dev
# Create environment
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Configure API keys
cp .env.example .env
nano .env # Add your Claude API key
# Enable camera
sudo raspi-config
# Navigate to: Interface Options -> Camera -> Enable
2. Start Backend Services
# Terminal 1: Start Flask server
cd OmniScope
source venv/bin/activate
python3 src/server.py
# Terminal 2: Start AR display
cd OmniScope
source venv/bin/activate
export DISPLAY=:0 # Adjust if glasses on different display
python3 src/display/ar_display.py
3. iOS App Setup
# Open Xcode project
open OmniScopeApp/OmniScope.xcodeproj
# Required capabilities:
# - Location (Always)
# - Background Modes: Location updates
# Configure API keys in Config/Secrets.swift:
# - Google Maps API key (for navigation and AQI)
# - Raspberry Pi IP address
# Build and run on iPhone
4. Connect and Use
- Ensure iPhone and Raspberry Pi are on the same WiFi network
- Launch iOS app and grant location permissions
- In Settings tab, enter Raspberry Pi IP address
- App will automatically start sending weather data
- Use Capture button to trigger AI scene analysis
- Use Navigation tab to search and start turn-by-turn directions
Display Layout
The AR glasses show three panels:
┌──────────────────────────────────────────────────┐
│ ┌──────────────┐ ┌───────────┐ │
│ │ AI ANALYSIS │ ┌──────────┐ │ WEATHER │ │
│ │ Landmark Info│ │NAVIGATION│ │ AQI │ │
│ │ Historical │ │ Arrows │ │ GPS │ │
│ │ Facts (45s) │ │ Distance │ └───────────┘ │
│ └──────────────┘ └──────────┘ │
│ [Transparent AR View of Real World] │
└──────────────────────────────────────────────────┘
- Top-Left: AI analysis (appears on capture, disappears after 45s)
- Top-Center: Navigation arrows and instructions (active during navigation)
- Top-Right: Weather, AQI, and GPS (always visible)
Configuration
Environment Variables (.env)
# Required
CLAUDE_API_KEY=sk-ant-xxxxx
# Optional (defaults provided)
GPS_SERVER_HOST=0.0.0.0
GPS_SERVER_PORT=5000
DISPLAY_WIDTH=1920
DISPLAY_HEIGHT=1080
FONT_SIZE=24
CAMERA_WIDTH=1920
CAMERA_HEIGHT=1080
iOS App Settings
- Pi IP Address: Set in Settings tab
- Location Permissions: Required for weather and navigation
- Background Location: Enables continuous tracking during navigation
- Google Maps API Key: Required for directions (configured in code)
API Keys Required
-
Claude API Key (Anthropic)
- Sign up at https://console.anthropic.com
- Used for AI scene analysis
- Pay-as-you-go pricing
-
Google Maps API Key (Google Cloud)
- Create project at https://console.cloud.google.com
- Enable: Maps SDK, Directions API, Places API, Air Quality API
- Used for navigation, location search, and AQI data
- Free tier: $200 credit per month
-
Open-Meteo API (No key required)
- Completely free weather API
- No registration needed
- Unlimited requests
Documentation
Detailed guides available in the docs/ directory:
- QUICKSTART.md - Fastest path to running system
- RASPBERRY_PI_SETUP.md - Complete Pi configuration
- NAVIGATION_SETUP.md - Google Maps and AQI setup
- AR_DISPLAY_README.md - Display customization
- DEBUGGING_GUIDE.md - Troubleshooting common issues
Project Structure
OmniScope/
├── OmniScopeApp/ # iOS companion app
│ └── OmniScope/
│ ├── Views/ # SwiftUI views
│ ├── Services/ # Location, Weather, Network
│ ├── Models/ # Data structures
│ └── Config/ # API keys
├── src/
│ ├── server.py # Flask backend server
│ ├── camera/
│ │ └── vision_service.py # Claude AI integration
│ └── display/
│ └── ar_display.py # Pygame AR renderer
├── scripts/ # Deployment scripts
├── docs/ # Documentation
└── requirements.txt # Python dependencies
Customization
Adjusting Analysis Display Time
Edit src/display/ar_display.py:
ANALYSIS_DISPLAY_DURATION = 45 # seconds
Changing UI Colors
Edit color scheme in ar_display.py:
COLOR_PANEL_BG = (40, 40, 45, 150) # Dark translucent
COLOR_PANEL_BORDER = (80, 80, 85, 100) # Subtle gray
COLOR_PRIMARY_TEXT = (255, 255, 255) # White text
Navigation Arrow Images
Custom arrow images stored in src/display/navigation_arrows/:
- turn_left.png, turn_right.png
- slight_left.png, slight_right.png
- straight.png, merge.png, etc.
Performance
- CPU Usage: ~10-15% on Raspberry Pi 4
- Memory: ~150-200 MB total
- Display FPS: 30 FPS
- Network Usage: ~2-3 KB per update
- Battery Life: ~6-8 hours with 20,000mAh power bank
Known Limitations
- Camera-based analysis requires sufficient lighting
- AQI data availability varies by region (WeatherKit limitation)
- Navigation requires active internet connection
- Display resolution locked to AR glasses native resolution (1920x1080)
- Real-time distance calculation depends on GPS accuracy
Troubleshooting
Display Issues
# Check HDMI output
tvservice -s
# Verify display number
DISPLAY=:0 xrandr
Server Connection Issues
# Test server status
curl http://RASPBERRY_PI_IP:5000/status
# Check firewall
sudo ufw status
Camera Problems
# Verify camera detection
vcgencmd get_camera
# Should show: supported=1 detected=1
# Test camera
libcamera-hello
iOS App Issues
- Check Pi IP address in Settings tab
- Verify both devices on same WiFi network
- Check Xcode console for API errors (Open-Meteo, Google Cloud)
- Ensure location permissions granted (Always)
- Verify Google Maps API key is valid and has required APIs enabled
Future Enhancements
- Voice command integration
- Multi-language support
- Offline map caching
- Custom landmark database
- Gesture controls
- Battery optimization mode
- Social features (share locations/routes)
- Integration with other smart home devices
Contributing
This is an academic project developed as part of a hackathon. While not actively maintained, feel free to fork and adapt for your own use cases.
License
This project is provided as-is for educational purposes.
Acknowledgments
- Open-Meteo for free, unlimited weather data
- Google Cloud for AQI data and navigation services
- Anthropic Claude for AI analysis capabilities
- Raspberry Pi Foundation for affordable computing
- Xreal for consumer AR glasses
Analysis
View
Metric
- 39
- 28
- 15
- 5
- 3
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- FlaskIn code
- PythonIn code
- SwiftIn code
4 of 4 appear in the indexed code.
AI coding agents
- Claude CodeCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
272 KB
Source files
31
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Jbae04/OmniScope
55 files · 368 KB · @ f0ed5c7
Structure
Interface
6 files · 11%Screens, components and styles rendered to the user.
Application logic
17 files · 31%Domain rules, services and shared utilities.
Data & schema
1 file · 2%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Swift50%
- Markdown23%
- Python22%
- Shell4%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 9- anthropic
- flask
- httpx
- Pillow
- pygame
- pytest
- python-dateutil
- python-dotenv
- requests
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.