RealSense REST API & 3D Point Cloud Viewer
A comprehensive RealSense camera management system featuring a standalone REST API server and an advanced ReactJS 3D point cloud viewer with cloud signaling capabilities.
🏗️ Project Architecture
This project consists of two main components:
- Standalone REST API Server - FastAPI-based backend with WebRTC streaming
- ReactJS RealSense Viewer - Frontend with 3D point cloud visualization and cloud signaling
System Overview
┌─────────────────┐ WebRTC/Socket.IO ┌──────────────────┐
│ React Client │ ◄─────────────────────► │ Python API │
│ (Port 3000) │ │ (Port 8000) │
└─────────────────┘ └──────────────────┘
│ │
│ Socket.IO │ RealSense
│ │ Camera
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ Cloud Signaling │ │ RealSense D435i │
│ Server │ │ Depth Camera │
│ (Port 3001) │ └──────────────────┘
└─────────────────┘
🚀 Quick Start
Prerequisites
- Python 3.8+ with virtual environment
- Node.js 16+ and npm
- Intel RealSense D435i camera (or compatible)
- Network connectivity for multi-device access
1. Clone and Setup
git clone <repository-url>
cd realsense-restapi
# Create Python virtual environment
python3 -m venv venv
source venv/bin/activate
# Install Python dependencies
pip install -r requirements.txt
# Optional: install the camera-side stack as a package (enables `teleopsh`, `python -m teleop`)
pip install -e .
# Install Node.js dependencies
cd realsense-react-client
npm install
cd ..
Teleop CLI (Node-friendly launcher)
The camera-side server is still Python (RealSense + WebRTC). For Node developers we publish a small npm wrapper package under the name teleop (see packages/teleop/). After you install the Python project once (pip install -e . or pip install teleopsh from PyPI when published), you can run:
npx teleop -- --cloud http://localhost:3001 --robot-id my-robot
Or use Python only (after pip install -e . or pip install teleopsh):
teleopsh --cloud http://localhost:3001 --robot-id my-robot
python -m teleop --help
This does not remove the need for Python or pyrealsense2; it standardizes the entrypoint for both ecosystems.
2. Start All Services
# Terminal 1: Start Python API Server
source venv/bin/activate
python main.py
# Terminal 2: Start Cloud Signaling Server
cd realsense-react-client/server
node cloud-signaling-server.js
# Terminal 3: Start React Client
cd realsense-react-client
npm start
3. Access the Application
- Local access: http://localhost:3000
- Network access: http://YOUR_IP_ADDRESS:3000
📋 Component Details
1. Standalone REST API Server
Overview
A FastAPI-based server that provides RESTful endpoints for RealSense camera management, WebRTC streaming, and real-time data transmission.
Key Features
🔧 Device Management
- Device Discovery: List and manage connected RealSense devices
- Device Information: Get detailed device specs, firmware, and capabilities
- Hardware Control: Reset devices remotely
- Sensor Management: Configure individual sensors and options
📡 Streaming Capabilities
- REST-based Stream Control: Start/stop streams with custom configurations
- WebRTC Video Streaming: Real-time RGB, depth, and infrared streaming
- Socket.IO Data Streaming: Real-time point cloud and metadata transmission
🎯 WebRTC Implementation
- Peer Connection Management: Handle WebRTC offer/answer exchange
- ICE Candidate Handling: Manage network connectivity
- Data Channel Support: Efficient point cloud data transmission
- Session Management: Multiple concurrent streaming sessions
API Endpoints
Device Management
GET /api/devices/ # List all devices
GET /api/devices/{device_id} # Get device details
POST /api/devices/{device_id}/reset # Reset device
Stream Control
POST /api/devices/{device_id}/streams/start # Start streaming
POST /api/devices/{device_id}/streams/stop # Stop streaming
GET /api/devices/{device_id}/streams/status # Get stream status
WebRTC Management
POST /api/webrtc/sessions/create # Create WebRTC session
POST /api/webrtc/sessions/{session_id}/offer # Handle WebRTC offer
POST /api/webrtc/sessions/{session_id}/answer # Handle WebRTC answer
POST /api/webrtc/sessions/{session_id}/ice # Handle ICE candidates
Point Cloud Data
GET /api/devices/{device_id}/pointcloud # Get point cloud data
POST /api/webrtc/sessions/{session_id}/pointcloud/activate # Activate point cloud
Configuration
Environment Variables
# Cloud Signaling Server URL (for network access)
export CLOUD_SIGNALING_URL=http://YOUR_IP_ADDRESS:3001
# Robot ID (default: robot-844212070924)
export ROBOT_ID=your-robot-id
# API Server Port (default: 8000)
export API_PORT=8000
Starting the Server
# Basic startup
source venv/bin/activate
python main.py
# With custom configuration
CLOUD_SIGNALING_URL=http://192.168.0.43:3001 python main.py
Testing the API
Interactive Documentation
Access the built-in OpenAPI (Swagger) UI at:
http://localhost:8000/docs
Run Tests
# Install test dependencies
pip install pytest pytest-asyncio typeguard jinja2 pyyaml lark httpx
# Run tests
pytest tests/
2. ReactJS RealSense Viewer
Overview
A modern React application providing a comprehensive 3D point cloud visualization interface with real-time streaming capabilities.
Key Features
🎮 3D Point Cloud Visualization
- Real-time 3D Rendering: Interactive Three.js-based point cloud display
- Camera Controls: Mouse-based camera manipulation (rotate, pan, zoom)
- Performance Optimization: Efficient vertex rendering and updates
- Visual Feedback: Real-time vertex count and FPS display
🌐 WebRTC Integration
- Data Channel Management: Efficient point cloud data transmission
- Chunked Data Handling: Large dataset transmission via chunking
- Connection Management: Automatic reconnection and error handling
- Session Management: Multiple concurrent viewing sessions
📊 Real-time Monitoring
- Connection Status: Live connection state monitoring
- Data Flow Visualization: Real-time data transmission metrics
- Error Handling: Comprehensive error reporting and recovery
- Performance Metrics: FPS, vertex count, and latency monitoring
Application Structure
realsense-react-client/
├── src/
│ ├── pages/
│ │ ├── PointCloudDemo.js # 3D point cloud viewer
│ │ ├── WebRTCDemo.js # WebRTC streaming demo
│ │ └── MainViewer.js # Main camera viewer
│ ├── services/
│ │ ├── cloudSignalingService.js # Cloud signaling client
│ │ └── webrtcService.js # WebRTC management
│ ├── components/
│ │ ├── ThreeJSViewer.js # Three.js 3D renderer
│ │ └── ConnectionStatus.js # Connection monitoring
│ └── utils/
│ └── pointCloudUtils.js # Point cloud data processing
├── server/
│ └── cloud-signaling-server.js # Cloud signaling server
└── public/
└── index.html
Configuration
Environment Variables
Create a .env file in realsense-react-client/:
# Cloud Signaling Server URL
REACT_APP_CLOUD_URL=http://YOUR_IP_ADDRESS:3001
# API Server URL
REACT_APP_API_URL=http://YOUR_IP_ADDRESS:8000
Network Access Setup
For multi-device access, configure the environment variables to use your machine's IP address:
# Example for IP 192.168.0.43
REACT_APP_CLOUD_URL=http://192.168.0.43:3001
REACT_APP_API_URL=http://192.168.0.43:8000
Starting the Application
Development Mode
cd realsense-react-client
npm start
Production Build
cd realsense-react-client
npm run build
npm install -g serve
serve -s build -l 3000
3. Cloud Signaling Server
Overview
A Node.js Socket.IO server that manages real-time communication between the Python API server and React clients.
Key Features
🔄 Session Management
- Robot Registration: Register and manage RealSense robot instances
- Client Management: Handle multiple concurrent client connections
- Session Routing: Route messages between robots and clients
- Connection Monitoring: Track connection health and status
📡 Real-time Communication
- WebRTC Signaling: Handle WebRTC offer/answer exchange
- Point Cloud Activation: Manage point cloud streaming requests
- Event Broadcasting: Broadcast events to connected clients
- Error Handling: Graceful error handling and recovery
Starting the Server
cd realsense-react-client/server
node cloud-signaling-server.js
🎯 Usage Examples
1. Basic Point Cloud Visualization
- Start all services (see Quick Start section)
- Open the application at http://localhost:3000
- Navigate to "3D Point Cloud" page
- Select your robot from the dropdown
- Click "Start 3D Viewer" to begin streaming
- Interact with the 3D view:
- Left Click + Drag: Rotate camera
- Right Click + Drag: Pan camera
- Scroll Wheel: Zoom in/out
- R Key: Reset camera position
2. WebRTC Video Streaming
- Navigate to "WebRTC Demo" page
- Select stream type (RGB, Depth, Infrared)
- Click "Start Stream" to begin WebRTC streaming
- View real-time video in the browser
3. Network Access Setup
-
Configure environment variables with your IP address:
# Python server export CLOUD_SIGNALING_URL=http://YOUR_IP:3001 # React client (.env file) REACT_APP_CLOUD_URL=http://YOUR_IP:3001 REACT_APP_API_URL=http://YOUR_IP:8000
-
Restart all services with new configuration
-
Access from other devices at http://YOUR_IP:3000
🔧 Troubleshooting
Common Issues
Point Cloud Not Displaying
- Check NumPy array errors: Ensure proper data type conversion
- Verify WebRTC connection: Check browser console for connection errors
- Monitor server logs: Look for data transmission issues
Connection Issues
- Firewall settings: Ensure ports 3000, 3001, and 8000 are open
- Network configuration: Verify IP address settings
- Service status: Check all services are running
Performance Issues
- Reduce vertex count: Adjust
max_verticesin WebRTC manager - Optimize update rate: Modify FPS settings
- Check network bandwidth: Monitor data transmission rates
Debug Mode
Enable Verbose Logging
# Python server
export LOG_LEVEL=DEBUG
python main.py
# React client
REACT_APP_DEBUG=true npm start
Monitor Network Traffic
# Check service status
lsof -i :8000 -i :3001 -i :3000
# Monitor WebRTC connections
netstat -an | grep :3001
📊 Performance Optimization
Point Cloud Streaming
- Chunked transmission: Large datasets split into manageable chunks
- Compression: Efficient data serialization and transmission
- Update rate control: Configurable FPS for optimal performance
WebRTC Optimization
- ICE candidate optimization: Efficient network path selection
- Data channel buffering: Smooth data transmission
- Connection pooling: Reuse connections for better performance
🔒 Security Considerations
Network Security
- Firewall configuration: Restrict access to necessary ports
- Network isolation: Use VPN for remote access
- Authentication: Implement user authentication for production use
Data Security
- Encryption: Enable HTTPS for production deployments
- Access control: Implement proper access controls
- Data validation: Validate all incoming data
📈 Future Enhancements
Planned Features
- Multi-camera support: Simultaneous multiple camera streaming
- Advanced filtering: Real-time point cloud filtering and processing
- Recording capabilities: Save and replay point cloud sessions
- Mobile support: Responsive design for mobile devices
- Authentication system: User management and access control
Performance Improvements
- WebAssembly integration: Faster point cloud processing
- GPU acceleration: Hardware-accelerated rendering
- Compression algorithms: Advanced data compression
- Load balancing: Distributed processing support
🤝 Contributing
Development Setup
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new features
- Submit a pull request
Code Standards
- Python: Follow PEP 8 guidelines
- JavaScript: Use ESLint configuration
- Documentation: Update README for new features
- Testing: Maintain test coverage
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Intel RealSense SDK: For camera integration
- Three.js: For 3D visualization
- Socket.IO: For real-time communication
- FastAPI: For REST API framework
- React: For frontend framework
For support and questions, please open an issue on the project repository.
Metadata
Release files for teleopsh 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| teleopsh-0.1.0.tar.gz | 51.4 kB | Without provenance | Details for teleopsh-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| teleopsh-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for teleopsh-0.1.0-py3-none-any.whl |
Total release size: 100.9 kB
Release files / teleopsh-0.1.0.tar.gz
| Download URL | teleopsh-0.1.0.tar.gz |
|---|---|
| Size | 51.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aa834416c343c4bb6b5199bc729327f9881888625055898d0cee9909776e8dce
|
|
BLAKE2b-256 checksum How to use checksums |
76d9e39a3bf63b1dc3875c043668c1dc1ff4c56ef168ce9188f920bd6cb3c790
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|
Release files / teleopsh-0.1.0-py3-none-any.whl
| Download URL | teleopsh-0.1.0-py3-none-any.whl |
|---|---|
| Size | 49.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cc90ae42aadca9fbf6b720ba3438b7134b99df796cbba6d40006bce6472cfb25
|
|
BLAKE2b-256 checksum How to use checksums |
374a52688c68da6352d23a9fcb415dd32bae086cd2bb74ec2fac9ac4525ae227
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|
Security for teleopsh 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.